1.无继承情况下,对象的初始化过程
静态域(包括静态变量和静态代码块,他俩同级按先后顺序加载) -> 非静态域(包括非静态变量和非静态代码块,他俩同级按先后顺序加载) -> 构造方法
public class Test3 {
public static void main(String[] args) {
Try try1 = new Try();
/*
结果如下
****************************
我是静态变量
我是静态代码块
***************************
我是静态变量
我是非静态变量
我是非静态代码块
***************************
我是构造方法*/
}
}
class Try {
public Try() {
System.out.println("***************************");
System.out.println("我是构造方法");
}
private static String s1 = "我是静态变量";
private String s2 = "我是非静态变量";
{
System.out.println("***************************");
System.out.println(s1);
System.out.println(s2);
System.out.println("我是非静态代码块");
}
static {
System.out.println("***************************");
System.out.println(s1);
System.out.println("我是静态代码块");
}
}
2.有继承情况下,对象的初始化过程
父类静态域 ->子类静态域->父类非静态域 -> 父类构造方法->子类非静态域 -> 子类构造方法
public class Test3 {
public static void main(String[] args) {
TrySon son = new TrySon();
/*
结果如下
****************************
我是父类静态变量
我是父类静态代码块
***************************
我是子类静态变量
我是子类静态代码块
***************************
我是父类静态变量
我是父类非静态变量
我是父类非静态代码块
***************************
我是父类构造方法
***************************
我是子类静态变量
我是子类非静态变量
我是子类非静态代码块
***************************
我是子类构造方法
* */
}
}
class Try {
public Try() {
System.out.println("***************************");
System.out.println("我是父类构造方法");
}
private static String s1 = "我是父类静态变量";
private String s2 = "我是父类非静态变量";
{
System.out.println("***************************");
System.out.println(s1);
System.out.println(s2);
System.out.println("我是父类非静态代码块");
}
static {
System.out.println("***************************");
System.out.println(s1);
System.out.println("我是父类静态代码块");
}
}
class TrySon extends Try{
public TrySon() {
System.out.println("***************************");
System.out.println("我是子类构造方法");
}
private static String s1 = "我是子类静态变量";
private String s2 = "我是子类非静态变量";
{
System.out.println("***************************");
System.out.println(s1);
System.out.println(s2);
System.out.println("我是子类非静态代码块");
}
static {
System.out.println("***************************");
System.out.println(s1);
System.out.println("我是子类静态代码块");
}
}