Java成员变量初始化

来源:互联网 发布:武侠大宗师源码外网 编辑:程序博客网 时间:2024/05/16 10:41
Java按如下原则进行成员变量初始化:
1、先执行static修饰的成员(static变量、static代码块,两者优先级按代码次序);【前提是static修饰的成员还未初始化,若已初始化,不再初始化,即static修饰的成员只执行一次初始化】
2、然后再是非静态成员变量(包含非静态实例初始化)(非静态成员变量初始化次序按代码次序);
3、最后是构造方法;
4、先父类,再子类。
注意:第“4”点意思是指:按1、2、3的顺序初始化,并且,1中先父类再子类,2中先父类再子类,3先父类再子类。

看代码:
public class Test {    Test() {i = f(100);}    static{        System.out.println("Test()");    }    int f(int n){return n;}    int g() {return 11;}          int i = g();    int j = f(i);          public static void main(String[] args){        Test a = new Test();        System.out.println(a.i+","+a.j);        new B();              }}  class A{    static{        System.out.println("A()");    }    A(){        System.out.println("Father");    }}  class B extends A{    static int a = 1,b = 1;    int d = 1;    static{        b = 2;        int c = 2;        System.out.println("B()");        System.out.println("a:"+a+",b:"+b+",c:"+c);    }          B(){        System.out.println("Child");        System.out.println("a:"+a+",b:"+b);        System.out.println("d:"+d);    }}


再看代码:
public class Test {    Test() {i = f(100);}    static{        System.out.println("Test()");    }    int f(int n){return n;}    int g() {return 11;}           int i = g();    int j = f(i);           public static void main(String[] args){        Test a = new Test();        System.out.println(a.i+","+a.j);        new B();               }}   class A{    static{        System.out.println("A()");    }    A(){        System.out.println("Father");    }}   class B extends A{    int d = 1;    {        System.out.println("B()"+d);  //此处为非静态实例               }    static{        b = 2;        int c = 2;        int dd = 2;        System.out.println("Child");        System.out.println("B()");        //System.out.println("a:"+a+",b:"+b+",c:"+c+",dd:"+dd);会报错,应该如下:        //仔细对比以下两行        System.out.println("a:"+B.a+",b:"+B.b+",c:"+c+",dd:"+dd);        System.out.println("a:"+B.a+",b:"+B.b+",c:"+c+",dd:"+B.dd);    }    static int a = 1, b = 1, dd;    B(){        System.out.println("a:"+a+",b:"+b);        System.out.println("d:"+d);    }}

0 0
原创粉丝点击