he20041987 发表于 2008-4-13 14:46

static 有这么麻烦吗?(已解决)

class Explicit{
        Test3 a=new Test3();//这里怎么会比构造函数先执行,还有这一句也没有在main()里怎么就可以被执行了呢
                                        //这里是不是被默认成static语句了啊
        Explicit(){
                System.out.println("Explicit");
        }
}
class Test3{
        Test3(){
                System.out.println("Test3");
        }
}
class Test{
        public static void main(String[] args){
                Explicit e=new Explicit();
        }
}

[[it] 本帖最后由 he20041987 于 2008-4-15 11:58 编辑 [/it]]

InternetMote 发表于 2008-4-13 15:26

public class a {

        int i = 0;  

        public a() {

                i++;
                System.out.println("" + i);
        }

        public static void main(String []args) {

                new a();
        }
}

成员变量也是先执行的...........

如果不是从成员变量执行的话,会出现异常

he20041987 发表于 2008-4-13 15:30

哦那么说java是先执行static语句块,再执行成员变量,最后才执行main().

sunkaidong 发表于 2008-4-13 15:48

class Explicit{
   
    static  Test3 b=new Test3();                                 
    Explicit(){
        System.out.println("Explicit");
    }
    Test3 a=new Test3();
}
class Test3{
    Test3(){
        System.out.println("Test31");
    }
    public String toString()
    {
            return getClass().getName();
            }
}
class Test{
    public static void main(String[] args){
        Explicit e=new Explicit();
        System.out.println(Explicit.b);
    }
}

sunkaidong 发表于 2008-4-13 15:51

可以这样看建立对象的前提,就是把对象中可能要建立的都建好,在建立对象自己,不用关键字定义的都不是静态得..

he20041987 发表于 2008-4-14 16:10

差不多了解了,谢谢两位了!

aipb2007 发表于 2008-4-15 01:06

正确的顺序是
执行静态初始化(包括static块)
字段默认初始化
字段初始化
构造器

页: [1]

编程论坛