JVM类加载机制测试浅谈

public class TestJVM {

	public static void main(String[] args) {
		B b = new B();
	}

}

class A{
	public static int a_int;
	private int test = 10;
	{
		System.out.println("A语句块 a_int :"+a_int);
		System.out.println("A语句块 test :"+test);
		test = 20;
	}
	
	static{
		System.out.println("A静态语句块 a_int :"+a_int);
		a_int =300;
		//test = 10;非静态变量无法使用
	}
	
	public A(){
		System.out.println("A构造器 a_int :"+a_int);
		a_int =400;
		System.out.println("A构造器 test :"+test);
		test = 30;
	}
}


class B extends A{
	public static int b_int =200;
	private int b_test = 10;
	{
		System.out.println("B语句块b_int :"+b_int);
		System.out.println("B语句块 test :"+b_test);
		b_test = 20;
	}
	
	static{
		System.out.println("B静态语句块 b_int :"+b_int);
		b_int =300;
	}
	
	public B(){
		System.out.println("B构造器 b_int :"+b_int);
		b_int =400;
		System.out.println("B构造器 test :"+b_test);
		b_test = 30;
	}
	
}

输出如下

A静态语句块 a_int :0       1.在执行B b 时父类未加载与初始化,首先加载初始化父类,执行静态变量初始化(默认值为0),执行静态语句块
B静态语句块 b_int :200       2.父类加载初始化完成后,进行子类的加载初始化,执行静态变量初始化(设定值为200),执行静态语句块
A语句块 a_int :300              3.执行new B();。首先初始化父类变量,运行父类语句块,(变量初始化与语句块执行按代码先后顺序)然后运行父类构造方法。
A语句块 test :10
A构造器 a_int :300
A构造器 test :20
B语句块b_int :300 4.运行子类语句块,初始化子类变量,运行子类语句块,运行子类构造方法
B语句块 test :10
B构造器 b_int :300
B构造器 test :20


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值