1. 静态模块和构造模块的区别
静态块:用static申明,JVM加载类时执行,仅执行一次
构造块:类中直接用{}定义,每一次创建对象时执行
执行顺序优先级:静态块>main()>构造块>构造方法
静态块按照申明顺序执行,所以先执行public staticB t1 = newB();
该语句创建对象,则又会调用构造块,输出构造块
接着执行public static B t1 = new B();
输出构造块
再执行
static {
System.out.println("静态块");
}
输出静态块
最后main方法执行,创建对象,输出构造块。
例如:
public class B
{
public static B t1 = new B();
public static B t2 = new B();
{
System.out.println("构造块");
}
static
{
System.out.println("静态块");
}
public static void main(String[] args)
{
B t = new B();
}
}
输出结果是:构造块 构造块 静态块
2.构造函数
父类没有无参的构造函数,所以子类需要在自己的构造函数中显式调用父类的构造函数,
添加
super("nm");
否则报错:
Implicit super constructor Person() is undefined. Must explicitly
invoke another constructor
class Person {
String name