恒大的一个题,关于System.out.print和System.err.println以及静态和构造函数的
2013-04-14 17:05
253 查看
恒大的一个题,题目:
问题解答:
1.当父类和子类中都有静态代码块和构造函数时,执行顺序如下:
父类静态代码块---->子类静态代码块
父类构造函数------>子类构造函数
总结:静态代码优先执行,父类优于子类先执行,静态代码块是在jvm加载类的时候执行的,而且仅执行一次
2.System.out和System.err
System.out是行缓冲,System.err是不缓冲。System.err会自动重启一个线程来执行。
综合上述两点,得:静态代码块先执行,然后为构造函数代码块。所以1,2会先输出,随后输出3。但是这里有会牵扯到System.err和System.out两个的区别。如果将System.err改为System.out的话,执行结果一定是:
1
2
3
但是现在这个是System.err,它新开辟一个线程,且没有缓冲,会立即输出。而System.out是行缓冲,在1,2缓冲输出的时候,3可以在任意时候输出。具体结果为:1先2后是绝对的,3的输出位置与程序执行情况有关。输出结果可能会很奇葩,比如:
1
3
2
或者
3
1
2
甚至
13
2
和
1
32
大家结合我上面的分析,就能弄明白了。System.out.println执行的时候会自动换行,但是换行符没有处理之前是缓冲的,所以会有一个时间段,虽然很短,因为只输出一个1和2,但是3还是会可能和1或者2是一行。
另外System.err在eclipse中默认输出就为红色字体。
个人愚见,望大家多指正!
最后再说一句:恒大坑爹啊,这么难的题,是要作死啊...
public class TestCodeSeg { static { System.out.println("1"); } { System.out.println("2"); } public TestCodeSeg() { System.err.println("3"); } public static void main(String[] args) { new TestCodeSeg(); } }
求输出结果;
问题解答:
1.当父类和子类中都有静态代码块和构造函数时,执行顺序如下:
父类静态代码块---->子类静态代码块
父类构造函数------>子类构造函数
总结:静态代码优先执行,父类优于子类先执行,静态代码块是在jvm加载类的时候执行的,而且仅执行一次
2.System.out和System.err
System.out是行缓冲,System.err是不缓冲。System.err会自动重启一个线程来执行。
综合上述两点,得:静态代码块先执行,然后为构造函数代码块。所以1,2会先输出,随后输出3。但是这里有会牵扯到System.err和System.out两个的区别。如果将System.err改为System.out的话,执行结果一定是:
1
2
3
但是现在这个是System.err,它新开辟一个线程,且没有缓冲,会立即输出。而System.out是行缓冲,在1,2缓冲输出的时候,3可以在任意时候输出。具体结果为:1先2后是绝对的,3的输出位置与程序执行情况有关。输出结果可能会很奇葩,比如:
1
3
2
或者
3
1
2
甚至
13
2
和
1
32
大家结合我上面的分析,就能弄明白了。System.out.println执行的时候会自动换行,但是换行符没有处理之前是缓冲的,所以会有一个时间段,虽然很短,因为只输出一个1和2,但是3还是会可能和1或者2是一行。
另外System.err在eclipse中默认输出就为红色字体。
个人愚见,望大家多指正!
最后再说一句:恒大坑爹啊,这么难的题,是要作死啊...
相关文章推荐
- 你还在用System.out.println吗?经过静态引用包你可以使用我的print啦!
- 关于java三元运算符,(i%5==0)?System.out.println():System.out.print(" "); does not work!
- System.out.print与System.out.println的区别
- java 关于Java中静态代码块以及构造函数的执行先后顺序
- System.out.println和System.err.println的区别
- 一个关于静态局部变量以及全局变量的例子
- java中的System.out.println和System.err.println的区别
- 浅谈Java的System.out.print与System.out.println的区别
- System.out.println与System.err.println的区别
- 关于System.out.println和System.out.write的实验
- System.err.println()与System.out.println的区别
- JAVA Catch中异常信息的输出 System.out.println(e) e.printStackTrace()
- System.out.println与System.err.println的区别
- System.out.println和System.err.println的区别
- java 关于System.out.println的多线程并发问题
- JAVA学习笔记--关于System.out.println()
- System.out.println与System.err.println的区别(输出顺序!!!)
- 关于java项目中System.out.println()标准输出方法性能影响分析
- java在调用System.out.println()打印一个新new的对象时,为什么会调用toString方法?
- 当使用System,out.println()打印一个对象是自动调用toString方法