动手动脑(10.14)

一、

public class Test{

  public static void main(String[] args) {
   Fool obj1=new Foo();
}
}
class Foo{
   int value;
   public Foo(int initValue){
    value=initValue;
}
}

以上代码无法通过编译,是因为类Foo是有参的,所以在引用的时候缺少参数。

结论:如果类提供了一个自定义的构造方法,将导致系统不再提供默认的构造方法。

 二、

public class InitializeBlockClass {
    {
        field=200;
    }
    public int field=100;
    public InitializeBlockClass(int value){
        this.field=value;
    }
    public InitializeBlockClass() {
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        InitializeBlockClass obj=new InitializeBlockClass();
        System.out.println(obj.field);
        obj=new InitializeBlockClass(300);
        System.out.println(obj.field);
        }
}

执行结果为

结论:1、执行类成员定义时指定的默认值或类的初始化块,到底执行哪一个要看哪一个排在前面。2、执行类的有参构造函数是就执行里面的语句。

三、静态初始化块的执行顺序:

1、静态初始化块只执行一次;2、创建子类的对象时,也会导致父类型的静态初始化块的执行

原文地址:https://www.cnblogs.com/tianwenjing123-456/p/11695492.html