码迷,mamicode.com
首页 > 其他好文 > 详细

静态常量(static final)在class文件中是怎样的呢?

时间:2015-06-25 19:42:10      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:jvm

最近写项目遇到一个问题,来回折腾了几次,终于探究清楚了。不废话,上例子。


背景:因为项目小,没有使用配置文件,所有静态常量都放在Config.java里面了

public class Config {
    public static final String URL="http://www.xxxx.com/";
    public static final int PAGE_NUM=10;
}


看起来也不错啊,没什么大问题,都这么用的啊。

好吧,放到服务器上运行一下,正常啊。


接下来,问题来了。

URL改,PAGE_NUM也改。

public class Config {
    public static final String URL="http://www.yyyy.com/";
    public static final int PAGE_NUM=200;
}

好了,生成下class文件,放到服务器上,喝杯茶。。。

刷新下,没变,再等等,服务器有个转换时间。。。

30s。。。没变

1min。。。没变

重启服务器。。。(应该好了)

怎么还是没变???~~~!!!@@@###&&&+++***(到底怎么回事,服务器坏了,重装?)


其实什么都没坏。你不信?往下看。

找个小工具,把class文件反编译一下,找找引用常量的地方,你就瞬间明白了。

不是你想象的

Config.URL
Config.PAGE_NUM


而是

"http://www.xxxx.com/"
10


明白了吧,常量在class文件中,直接替换为值了。

那还是想用Config.java,又不想改很多地方,怎么办?

两个方法:

public class Config {
    public static final String URL=new String("http://www.xxxx.com/");//好用
    public static final int PAGE_NUM=new Integer(10);//不好用
}
public class Config {
    public static String getURL(){
	return "http://www.yyyy.com";
    } 
    public static int getPageNum(){
	return 200;
    } 
}


好了,其余的,等待大家去发现。


静态常量(static final)在class文件中是怎样的呢?

标签:jvm

原文地址:http://blog.csdn.net/emovie/article/details/46638613

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!