代码
class A {
String name;
static {
System.out.println("父类:静态代码块");
}
public A() {
System.out.println("父类:无参构造器,name:" + name);
}
public A(String name) {
this.name = name;
System.out.println("父类:有参构造器,name:" + name);
}
}
class B extends A {
A a;
static {
System.out.println("子类:静态代码块");
}
public B() {
System.out.println("子类:无参构造器");
}
public B(String name) {
this.name = name;
System.out.println("子类:有参构造器,name:" + name);
a = new A(name + " tag");
}
public static void main(String[] args) {
new B("I am B");
}
}
结果为:
父类:静态代码块
子类:静态代码块
父类:无参构造器,name:null
子类:有参构造器,name:I am B
父类:有参构造器,name:I am B tag
注意:
如果一个类没有写任何构造函数,JVM会给这个类添加一个无参构造函数;
如果一个类中写了构造函数(不管几个,也不管是不是有参),JVM则不再会给这个类添加无参构造函数。