java类执行顺序

2017-04-27  本文已影响0人  jackzhoud

加载器第一次加载某一个类时,执行顺序如下:

  1. 先执行父类的静态变量和静态代码块,如果有初值为其赋值,没有就赋值默认初始值
  2. 执行当前类的静态变量和静态代码块,如果有初值为其赋值,没有就赋值默认初始值
  3. 执行当前类成员的默认赋值,int-0, boolean - false等
  4. 执行当前类的构造方法,显示或者掩式调用父类的构造方法,如果构造方法代码块中有this,则在父类构造中就表示调用父类的属性,子类中就是调用子类的属性;如果父类还有父类的话,会调用它的父类构造方法
  5. 执行父类的非静态成员赋默认的初始值, int -0 boolean-false等
  6. 如果父类成员有显示赋值,则为其赋值
  7. 执行父类构造方法的其他代码块
  8. 如果子类成员有显示赋值,则为其赋值
  9. 执行子类构造方法其他代码块
    出个题考考:
public class Test extends father{

    int i = 222;
    
    public Test(){
        super();
        display();
        this.display();
    }
    
    public void display(){
        System.out.println(i+"--");
    }
    
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        new Test();
    }

}


class father{
    private int i = 2;
    
    public father(){
        System.out.println(this.i);
        display();
        this.display();
    }
    
    public void display(){
        System.out.println(i + "88");
    }
}

先自己思考思考

答案在这儿:
2
0--
0--
222--
222--

总结:

  1. 静态变量先父类后子类
  2. 这儿精简重点:
public father(){
        // 当前类成员默认赋初值
        // i =0

        //掩式或者显示调用父类构造方法,父类的构造方法也是如下步骤的
        super();
        
        // 当前类成员显示赋值,如果存在的话
        i = 2;
        //其他代码块
        display();
    }

搞定,如有不对请指正

上一篇 下一篇

猜你喜欢

热点阅读