int a = 5;
static String count = "10";
public A() { // 3
System.out.println("A的构造方法"+a);
}
// 代码块
{
System.out.println("A类代码块....."); // 2
}
// 代码块会随着对象的创建而执行,执行次序: 1.分配空间 2.属性初始化. 3.代码块执行 4.构造方法执行
// 静态代码块
static {
System.out.println("A静态代码块被调用..." + count);
}
1.无继承条件下的代码执行顺序
- A加载(A类的静态属性的初始化、A类的静态代码块的初始化)
- A创建对象(A类属性的初始化、A类代码块的初始化、A类构造方法的初始化)
2.有继承条件下的代码执行顺序(B类继承A类)
- A加载(A类静态属性的初始化、A类静态代码块的初始化)
- B加载(B类静态属性的初始化、B类静态代码块的执行)
- A创建对象(A类属性的初始化、A类代码块的执行、A类构造方法的执行)
- B创建对象(B类属性的初始化、B类代码块的执行、B类构造方法的执行)
public class B extends A{
public B() { //3
System.out.println("B的构造方法");
System.out.println(n);
}
int n=5; //1
static String c="10";
//代码块
{
System.out.println("B类代码块....."); //2
}
//代码块会随着对象的创建而执行,执行次序: 1.分配空间 2.属性初始化. 3.代码块执行 4.构造方法执行
//静态代码块
static {
System.out.println("B静态代码块被调用..."+c);
}
}
Class<?> c = Class.forName("com.qf.day11.usestatic.A"); //加载类 加载类时会初始化静态属性并执行静态代码块
//创建对象时才会执行代码块和构造方法
//简单来说 加载类是将类的描述加载到类的内存中,以便于创建对象。
A a = (A) c.newInstance();