Java成员变量初始化

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);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值