恒生电子笔试题:
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();
}
}
求上述代码的输出结果。
分析:上述代码的执行顺序是确定的,首先在类加载的时候执行静态初始化代码块,然后执行对象初始化块,最后调用构造器;所以一般程序员会认为输出结果为123;但实际输出结果是不确定的,这主要受到out和err这两个对象输出结果机制的影响,out输出结果是带缓冲的,而err是没有缓冲的,所以输出结果不确定,但是12的顺序是确定的,所以输出结果有可能为:312,132,123(忽略换行。。。)