静态常量(static final)在class文件里是如何的呢?
近期写项目遇到一个问题,来回折腾了几次,最终探究清楚了。不废话。上样例。
背景:由于项目小,没有使用配置文件,全部静态常量都放在Config.java里面了
public class Config {
public static final String URL="http://www.xxxx.com/";
public static final int PAGE_NUM=10;
}
看起来也不错啊,没什么大问题。都这么用的啊。
好吧,放到server上执行一下,正常啊。
接下来,问题来了。
URL改,PAGE_NUM也改。
public class Config {
public static final String URL="http://www.yyyy.com/";
public static final int PAGE_NUM=200;
}
好了,生成下class文件,放到server上。喝杯茶。。。
刷新下,没变。再等等。server有个转换时间。。。
30s。
。。没变
1min。。。没变
重新启动server。
。
。(应该好了)
怎么还是没变???~~~!!!@@@###&&&+++***(究竟怎么回事。server坏了。重装?)
事实上什么都没坏。你不信?往下看。
找个小工具。把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文件里是如何的呢?的更多相关文章
- static final与final修饰的常量有什么不同
最近重头开始看基础的书,对一些基础的概念又有了一些新的理解,特此记录一下 static final修饰的常量: 静态常量(static修饰的全部为静态的),编译器常量,编译时就确定其值(java代码经 ...
- <init>与<clinit>,static与final与static final
<init>和<clinit> init是对象构造器方法,初始化对象的时候执行 clinit是类构造器方法,类加载的初始化阶段执行 final常量赋值(必须是一下其中一种) 显 ...
- NiXi.DAY06东软实训.:面向对象思想~抽象~static~final~构造方法及其重载
本章技能目标: 使用类图描述设计 掌握面向对象设计的基本步骤 掌握类和对象的概念 掌握构造方法及其重载 掌握封装的概念及其使用 本章单词: class:类 object:对象 static: fina ...
- java里的static/final含义
java里的static/final含义 static static可以修饰:属性,方法,代码段,内部类(静态内部类或嵌套内部类) static修饰的属性的初始化在编译期(类加载的时候),初始化后能改 ...
- java:构造方法:无参构造/有参构造 this static关键字 静态变量 静态方法 代码块 封装 静态常量。
/*构造方法是一种特殊的方法,专门用于构造/实例化对象,形式:[修饰符] 类名(){ }构造方法根据是否有参数分为无参构造和有参构造*/public class Dog { ...
- C#中的静态常量(const)和动态常量(static和readonly)用法和区别
C#中有两种常量类型,分别为readonly(运行时常量)与const(编译时常量),本文将就这两种类型的不同特性进行比较并说明各自的适用场景.工作原理 readonly为运行时常量,程序运行时进行赋 ...
- 《Java虚拟机原理图解》 1.2.2、Class文件里的常量池具体解释(上)
[last updated:2014/11/27] NO1.常量池在class文件的什么位置? 我的上一篇文章<Java虚拟机原理图解> 1.class文件基本组织结构中已经提到了clas ...
- Java中final与 static final 修饰的常量的区别
喵喵开车,新手上路,多多关照.有任何错误请在评论区指出. ...........................................我是万恶的分界线( • ̀ω•́ )✧......... ...
- static final修饰的静态变量修改后更新到服务器,重启无法生效的问题
今天在工作中碰到这样一个问题,有一个常量类,将工程中常用的一些变量定义在了里面.今天我要修改其中的某个变量.修改完后将编译好的.class文件更新到了服务器上,但是重启服务器后发现始终没有变化,还是以 ...
随机推荐
- Help Johnny-(类似杭电acm3568题)
Help Johnny(类似杭电3568题) Description Poor Johnny is so busy this term. His tutor threw lots of hard pr ...
- hyper-v 报错 0x80070569
在Windows8.1Pro版使用过程中,突然出现HYPER-V无法创建虚拟机.显示错误为: 登录失败:未授予用户在此计算机上的请求登录类型.(0x80070569). 回顾起近期通过组策略增强了系统 ...
- ServiceProvider实现
ServiceProvider实现揭秘 [总体设计 ] 本系列前面的文章我们主要以编程的角度对ASP.NET Core的依赖注入系统进行了详细的介绍,如果读者朋友们对这些内容具有深刻的理解,我相信你们 ...
- SWT的GridLayout一些参数解释
1. GridLayout类的说明GridLayout在包org.eclipse.swt.layout中,各参数意义如下:1. numColumns指定布局器中的列数2. horizontalSpac ...
- oracle之spool详细使用总结(转)
今天实际项目中用到了spool,发现网上好多内容不是很全,自己摸索了好半天,现在总结一下. 一.通过spool 命令,可以将select 数据库的内容写到文件中,通过在sqlplus设置一些参数,使得 ...
- android 自己定义开关(SwitchButton)
近期心血来潮,写了一个自己定义仿iPhone的开关. 有须要的同学能够来下载啦.支持点击自己主动滚动,速率能够自己依据须要改动.触摸滚动,大小自己定义,支持改动样式.就不录制动画,就上传了两张图给大家 ...
- 主席树(可持久化线段树) 静态第k大
可持久化数据结构介绍 可持久化数据结构是保存数据结构修改的每一个历史版本,新版本与旧版本相比,修改了某个区域,但是大多数的区域是没有改变的, 所以可以将新版本相对于旧版本未修改的区域指向旧版本的该区域 ...
- Quasi-Newton Method--LBFGS
Quasi-Newton Method Quasi-Newton Method每一步计算过程中仅涉及到函数值和函数梯度值计算,这样有效避免了Newton Method中涉及到的Hessian矩阵计算问 ...
- Android kxml解析WBXML
WAP Binary XML定义好XML片断表述出同步server地址.远程数据库名称.登录账号等等内容一.两种訪问方法: 眼下的kxml支持两种wap格式:WBXML/WML. 而有两种方法将解析 ...
- 广域网佰腾玩O2O笑话——它看起来很漂亮,注定不低于
据说 2014.8.29:中国最大的商业运营商万达在一起的互联网服务供应商百度.腾讯在深圳(属性)战略合作签约仪式举行. 从功能表面上.万达代表实体,百度代表数据.腾讯代表社区:按三个合伙人理解,是要 ...