1700440046
1700440047
而对于final修饰的类(即非基本类型),编译器认为它是不稳定态(Mutable Status),在编译时建立的则是引用关系(该类型也叫做Soft Final),如果Client类引入的常量是一个类或实例,即使不重新编译也会输出最新值。
1700440048
1700440049
千万不可小看了这点知识,细坑也能绊倒大象,比如在一个Web项目中,开发人员修改一个final类型的值(基本类型),考虑到重新发布风险较大,或者是时间较长,或者是审批流程过于繁琐,反正是为了偷懒,于是直接采用替换class类文件的方式发布。替换完毕后应用服务器自动重启,然后简单测试一下(比如本类引用final类型的常量),一切OK。可运行几天后发现业务数据对不上,有的类(引用关系的类)使用了旧值,有的类(继承关系的类)使用的是新值,而且毫无头绪,让人一筹莫展,其实问题的根源就在于此。
1700440050
1700440051
恩,还有个小问题没有说明,我们的例子为什么不在IDE工具(比如Eclipse)中运行呢?那是因为在IDE中不能重现该问题,若修改了Constant类,IDE工具会自动编译所有的引用类,“智能”化屏蔽了该问题,但潜在的风险其实仍然存在。
1700440052
1700440053
注意 发布应用系统时禁止使用类文件替换方式,整体WAR包发布才是万全之策。
1700440054
1700440055
1700440056
1700440057
1700440059
编写高质量代码:改善Java程序的151个建议 第2章 基本类型
1700440060
1700440061
不积跬步,无以至千里;
1700440062
1700440063
不积小流,无以成江海。
1700440064
1700440065
——荀子《劝学篇》
1700440066
1700440067
Java中的基本数据类型(Primitive Data Types)有8个:byte、char、short、int、long、float、double、boolean,它们是Java最基本的单元,我们的每一段程序中都有它们的身影,但我们对如此熟悉的“伙伴”又了解多少呢?
1700440068
1700440069
积少成多,积土成山,本章我们就来一探这最基本的8个数据类型。
1700440070
1700440071
1700440072
1700440073
1700440075
编写高质量代码:改善Java程序的151个建议 建议21:用偶判断,不用奇判断
1700440076
1700440077
判断一个数是奇数还是偶数是小学里学的基本知识,能够被2整除的整数是偶数,不能被2整除的是奇数,这规则简单又明了,还有什么好考虑的?好,我们来看一个例子,代码如下:
1700440078
1700440079
public class Client{
1700440080
1700440081
public static void main(String[]args){
1700440082
1700440083
//接收键盘输入参数
1700440084
1700440085
Scanner input=new Scanner(System.in);
1700440086
1700440087
System.out.print(“请输入多个数字判断奇偶:”);
1700440088
1700440089
while(input.hasNextInt()){
1700440090
1700440091
int i=input.nextInt();
1700440092
1700440093
String str=i+”->”+(i%2==1?“奇数”:“偶数”);
1700440094
1700440095
System.out.println(str);
[
上一页 ]
[ :1.700440046e+09 ]
[
下一页 ]