星期一
动手动脑

当自定义了构造方法后,系统不会调用默认构造方法
解决方法:构造方法重载,再定义一个默认构造方法

类中数据的初始化,如果默认构造方法中没有赋值,初始化优先级:有参构造方法>类中赋值初始化?初始化块
如果默认构造方法中有赋值,优先级:默认构造方法=有参构造方法>类中赋值初始化?初始化块
其中类中赋值初始化与初始化块要看先后位置,谁在后面执行,谁优先级大

可以看出静态初始化块只执行一次,所以第二个值还是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

浙公网安备 33010602011771号