1.静态代码块
格式: static{ 内容..... }
- 随着类的加载而加载,而且只被加载一次
- 多个静态代码块之间按照顺序结构执行
- 优先其他各种代码块以及构造函数先执行
- 静态的代码块中只能执行静态的结构(类属性,类方法)
2.构造代码块
格式:{ 内容...... }
- 每创建一个类的对象,非静态代码块就加载一次
- 非静态代码块的执行要早于构造器
- 一个类中可以有多个非静态的代码块,多个代码块之间按照顺序结构执行
- 可以对类的属性(静态的 & 非静态的)进行初始化操作,同时也可以调用本类声明的方法(静态的 & 非静态的)
3.普通代码块
普通代码块是在方法体中定义的
格式:权限修饰符 返回值 方法名(){ { 内容...... } }
package com.codeblock; /** * 代码块 * * @author yyx 2019年2月15日 */ public class CodeBlockDemo { public static void main(String[] args) { SubClass subClass = new SubClass(); subClass.sayHello(); System.out.println("-------------"); SubClass subClass1 = new SubClass(); } } class SuperClass { static { System.out.println("父类静态代码块!"); } { System.out.println("父类构造代码块!"); } public SuperClass() { System.out.println("父类构造函数"); } } class SubClass extends SuperClass { static { System.out.println("子类静态代码块!"); } { System.out.println("子类构造代码块!"); } public SubClass() { System.out.println("子类构造函数"); } public void sayHello() { { System.out.println("子类普通代码块"); } } }运行结果:
父类静态代码块!
子类静态代码块!
父类构造代码块!
父类构造函数
子类构造代码块!
子类构造函数
子类普通代码块
-------------
父类构造代码块!
父类构造函数
子类构造代码块!
子类构造函数