普通代码块:
- 定义在方法中{}(解决 变量重命名)
- 代码块一定要写在变量命名前
构造块:定义在类中,不加任何修饰符
- 构造块优先于构造方法执行
- 有多少对象,就有多少构造块
静态块:定义在类中,使用static关键字修饰
- 优先于构造块执行,在类加载时执行,与类无关
- 主类中的静态块优先于主方法执行
继承:
- 先调用父类构造方法再调用子类构造方法
- 单继承局限
class A{
public A(){
System.out.println("调用A类构造方法");
}
{
System.out.println("调用A类普通代码块");
}
static
{
System.out.println("调用A类静态代码块");
}
}
public class Test extends A{
public Test(){
System.out.println("调用Test类的构造方法");
}
{
System.out.println("调用Test类的构造代码块");
}static{
System.out.println("调用Test类的静态代码块");
}
public static void main(String[] args) {
System.out.println("7");
new Test();
new Test();
System.out.println("8");
}
}
输出:
调用A类静态代码块
调用Test类的静态代码块
7
调用A类普通代码块
调用A类构造方法
调用Test类的构造代码块
调用Test类的构造方法
调用A类普通代码块
调用A类构造方法
调用Test类的构造代码块
调用Test类的构造方法
8
知识点小结:
1.静态代码块优先于构造块
2.无论产生多少实例化对象,静态块都只执行一次