代码块本质上是构造器的补充,多个构造器中有重复语句,抽到代码块中,提高代码的重用性,static代码块随类的加载而执行,并且加载类只执行一次。普通代码块每创建一个对象就执行一次。
import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;
public class codeBlockDetails {
public static void main(String[] args) {
//老师说明
//1.先进行类的加载 1.1先加载父类A02,在加载B02
//1.2 创建对象
//2.1 创建子类的构造器开始
new B02();//对象
}
}
class A02 {
private static int n1 = getVal01();
static {
System.out.println("A02的一个静态代码块。。");// 2
}
{
System.out.println("A02的一个普通代码块。。"); // 5
}
public int n3 = getVal02();
public static int getVal01() {
System.out.println("getVal01");// 1
return 10;
}
public int getVal02() {
System.out.println("getVal02"); //6
return 10;
}
public A02() {
//super();
//普通代码块和普通属性的初始化。。。。。
System.out.println("A02的构造器");// 7
}
}
class B02 extends A02 {
//无参构造器,执行super();与代码块
public static int n3 = getVal03();
static {
System.out.println("B02的一个静态代码块。。");// 4
}
public int n5 = getVal04();
{
System.out.println("B02的一个普通代码块"); // 9
}
public static int getVal03() {
System.out.println("getVal03");// 3
return 10;
}
public int getVal04(){
System.out.println("getVal04");// 8
return 10;
}
public B02(){
System.out.println("B02的构造器。。");// 10
}
}