欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于初始化的顺序

程序员文章站 2022-04-19 18:22:23
...

关于初始化的顺序
今天看书的时候偶然看到,感触良多,在这里记录一下.
首先理解java中所有事物都是对象,每个类的编译代码都存在于它自己独立的文件中,该文件只有需要程序代码时才会加载,即类的代码在初四使用时才会加载;
1.运行main方法,顺序执行,当有对象被创建时,这个对象对应的类开始被加载,
2.首先检查他的父类,加载类中的静态块,对静态变量赋值,然后加载子类静态块,静态变量.
3.对父类中变量初始化,调用父类构造器,
4.子类变量初始化.调用子类构造器.
上个代码:
package chushihua;

public class Man {

static {
	System.out.println("man静态块初始化");
}
{
	System.out.println("man代码块初始化");
}
private  String s1=start1();
private static String s2=start2();
public static String start1() {
	System.out.println("变量s1初始化");
	return "父类静态成员变量的初始化" ;
}
public static  String start2() {
	System.out.println("静态变量s2初始化");
	return null;
}
public Man() {
	System.out.println("man构造器");
	method();
}
public void method() {
	System.out.println("man调用method方法");
	
}

}
package chushihua;

public class Boy extends Man{

static {
	System.out.println("boy静态块初始化");
}
{
	System.out.println("boy代码块初始化");
}
private int a=1;
private static int b=1;
public  String s=ff();

public String ff() {
	System.out.println("s变量初始化");
	return null;
}
		


public void method() {
	System.out.println("boy调用method方法,a="+a+",b="+b);
	
}
public Boy() {
	System.out.println("boy构造器");
	method();
}

}
package chushihua;

public class Test {
public static void main(String[] args) {
new Boy();
}

}
运行结果:
man静态块初始化
静态变量s2初始化
boy静态块初始化
man代码块初始化
变量s1初始化
man构造器
boy调用method方法,a=0,b=1
boy代码块初始化
s变量初始化
boy构造器
boy调用method方法,a=1,b=1

比较man类的变量初始化顺序,可以得知为何a的值不同;

相关标签: java初始化的顺序