日期:2014-05-20  浏览次数:20657 次

怎么这么多不懂的啊 ?哪位帮忙?
public class StaticTest {
static String name;
static int count;
static{
System.out.println("1.Static Block!");
}
public StaticTest(){
System.out.println("2.In Constrtuctor!");
}
public static void addCount(){
count++;
System.out.println(name);
}
public static void main(String[] args){
System.out.println("3.In Main Method firstLine!");
new StaticTest();
}

} 这个程序执行顺序我不是很理解,求助哪位高手?输出结果为什么是132

------解决方案--------------------
执行顺序是这样的:静态代码块->静态函数->类初始化函数
在你的程序中:
先输出1,因为1是在静态代码块{}中,静态代码块在类加载时先执行,在main函数和类实例化前执行
再输出3,2在main函数中,main是静态函数,是java程序入口点被系统调用,在静态块后,系统必然先执行main函数
最后输出2,2在类的默认初始函数中,new也就是实例化的时候调用
------解决方案--------------------
初始化顺序问题.
类加载就会执行静态块 所以 1 输出.
加载后 main 执行 所以 3 输出.
然后 new StaticTest() 所以构造函数被调用 2 输出.
------解决方案--------------------
1、static{ 
System.out.println("1.Static Block!"); 


这部分是静态代码快,加载类时执行。(在main方法代码快执行之前执行,在一个静态qu)

2、System.out.println("3.In Main Method firstLine!"); 


然后是main方法中的这个

3、new StaticTest();

调用构造方法。public StaticTest(){ 
System.out.println("2.In Constrtuctor!"); 




所以结果为:132

完。