星期一

发布时间 2023-09-25 22:51:36作者: umiQa

动手动脑

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

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

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

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

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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