关于初始化的顺序

关于初始化的顺序
今天看书的时候偶然看到,感触良多,在这里记录一下.
首先理解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的值不同;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值