星期一
动手动脑
当自定义了构造方法后,系统不会调用默认构造方法
解决方法:构造方法重载,再定义一个默认构造方法
类中数据的初始化,如果默认构造方法中没有赋值,初始化优先级:有参构造方法>类中赋值初始化?初始化块
如果默认构造方法中有赋值,优先级:默认构造方法=有参构造方法>类中赋值初始化?初始化块
其中类中赋值初始化与初始化块要看先后位置,谁在后面执行,谁优先级大
可以看出静态初始化块只执行一次,所以第二个值还是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