星期一

动手动脑

当自定义了构造方法后,系统不会调用默认构造方法

解决方法:构造方法重载,再定义一个默认构造方法

类中数据的初始化,如果默认构造方法中没有赋值,初始化优先级:有参构造方法>类中赋值初始化?初始化块

如果默认构造方法中有赋值,优先级:默认构造方法=有参构造方法>类中赋值初始化?初始化块

其中类中赋值初始化与初始化块要看先后位置,谁在后面执行,谁优先级大

可以看出静态初始化块只执行一次,所以第二个值还是300

另外创建子类型的对象时,也会导致父类型的静态初始化块的执行

public class Main {
    public static void main(String[] args) {
        InitializeBlockClass obj1=new InitializeBlockClass(300);
        obj1.Show(obj1);
    }

}
class InitializeBlockClass{
    int n=0;




    static {
        field=200;
    }
    public static int field=100;
    public InitializeBlockClass(int value)
    {
        this.field=value;
    }
    public InitializeBlockClass(){

    }
    public static void Show(InitializeBlockClass a)
    {
        System.out.println(a.n);
    }
}

  可以用类对象作为参数传递给静态方法访问

使用静态方法输出了类的实例成员 n

 

posted @ 2023-09-18 18:40  umiQa  阅读(6)  评论(0编辑  收藏  举报