- 被static修饰的成员变量都是类变量,会随着JVM加载类的时候加载而执行,且只执行一次,即使后面再有该类的实例化也不会再执行
- 没有被static修饰的成员变量也被称为实例变量,需要创建对象才会随之加载到堆内存
- 构造方法体的this关键字跟super关键字不能同时出现,而且只能在代码的第一行
- 构造方法体的第一行既不是this语句也不是super语句,则隐式调用super()
public class Animal{
static {
System.out.println("父类静态代码块");
}
{
System.out.println("父类构造代码块");
}
public Animal() {
System.out.println("父类构无参构造方法");
}
public Animal(String str){
System.out.println("父类含一个参数构造方法");
}
}
public class Panda extends Animal {
static {
System.out.println("子类静态代码块");
}
{
System.out.println("子类构造代码块");
}
public Panda() {
this("调用带一个参数构造方法");
System.out.println("子类无参数构造方法");
}
public Panda(String n) {
this(n, "调用带两个参数构造方法");
System.out.println("子类一个参数构造方法");
}
public Panda(String s1, String s2) {
//父类初始化选择的构造方法却和子类中super 选择的构造相关
super(s1);
System.out.println("子类两个参数构造方法");
}
public static void main(String[] args) {
System.out.println("主方法执行");
new Panda();
new Panda();
}
}
结果:
父类静态代码块
子类静态代码块
主方法执行
父类构造代码块
父类含一个参数构造方法
子类构造代码块
子类两个参数构造方法
子类一个参数构造方法
子类无参数构造方法
父类构造代码块
父类含一个参数构造方法
子类构造代码块
子类两个参数构造方法
子类一个参数构造方法
子类无参数构造方法