博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
类的加载顺序 (一、编译时常量与运行时常量)
阅读量:6959 次
发布时间:2019-06-27

本文共 1874 字,大约阅读时间需要 6 分钟。

编译时常量在编译阶段会写死到.class中

而且会存入到 调用这个常量的方法所在的类的常量池中

如下代码编译后 删除Parents01.class 后依然可以正常执行

public class MyTest01 {	public static void main(String[] args) {		// TODO Auto-generated method stub		System.out.println(Parents01.VALUE);	}	}class Parents01{	public static final String VALUE = "Parents01 const VALUE";	static {		System.out.println("this is Parents01 static block");	}}//out:Parents01 const VALUE

说明VALUE被写入了MyTest01中

运行时常量:(编译时不加载,类初始化时才加载)

public class MyTest01 {	public static void main(String[] args) {		// TODO Auto-generated method stub		System.out.println(Parents01.VALUE);	}	}class Parents01{	public static final String VALUE = new String("Parents01 const VALUE");	static {		System.out.println("this is Parents01 static block");	}}//out:Parents01 const VALUE

  

另外 用子类调用父类的 static字段 并不会初始化子类static域

具体代码如下

public class MyTest01 {	public static void main(String[] args) {		// TODO Auto-generated method stub		System.out.println(Children01.VALUE);	}	}class Parents01{	public static String VALUE = "Parents01 const VALUE";	static {		System.out.println("this is Parents01 static block");	}}class Children01 extends Parents01{	static {		System.out.println("this is Children01 static block");	}} //~out:

this is Parents01 static block

Parents01 const VALUE

  将VALUE修改为final 则 一个static域都不执行。

static域在static字段后初始化,父类先于子类初始化:

public class MyTest01 {	public static void main(String[] args) {		// TODO Auto-generated method stub		new Children01();	}	}class Parents01{	public static Sub01 sub = new Sub01();	static {		System.out.println("this is Parents01 static block");	}}class Children01 extends Parents01{	static {		System.out.println("this is Children01 static block");	}}class Sub01{	Sub01(){		System.out.println("this is Sub01");	}}//~out:this is Sub01this is Parents01 static blockthis is Children01 static block

  

转载于:https://www.cnblogs.com/chafanbusi/p/10639328.html

你可能感兴趣的文章
BZOJ2725 : [Violet 6]故乡的梦
查看>>
HttpSesstionActivationLIstener示例
查看>>
解密字符串(水的问题)
查看>>
nyoj 228 士兵杀死(五岁以下儿童)【树状数组】
查看>>
GIT/node使用
查看>>
Android项目实战之(1)-- 开发一个"快速冲浪"的程序
查看>>
存储过程,稍微复杂
查看>>
EF DbContext.Configuration.ProxyCreationEnabled 什么鬼?
查看>>
[转]Oracle SOME,ANY,All,EXISTS,IN
查看>>
Linux ALSA声卡驱动之四:Control设备的创建
查看>>
cygintl-8.dll 是cygwin的哪个包?|Windows查看man手册的方法-cygwin
查看>>
UTF-8 's format
查看>>
Save Princess(丑数)
查看>>
高性能文件缓存key-value存储—Redis
查看>>
LM-Sensors unable to load driver module
查看>>
linux用shell腳本解决被ddos攻击的问题
查看>>
Swift - 31 - 常量参数, 变量参数和inout参数
查看>>
pytho
查看>>
Screwturn搭建企业内部wiki
查看>>
Cookie禁用了,Session还能用吗?
查看>>