改善Java程序的151个建议(1-4)
1.不要在常量和变量中出现易混淆的数字
个人感觉这条在于编程命名的规范性。代码除了给机器看,也要给人看。要写能够结构清晰,命名规范,让人看懂的代码。
字母l作为长整型标志时务必大写 L
2.莫让常量蜕变成变量
java的常量有编译期常量和运行期常量。他们都被static final修饰。引用被static final 修饰的java八种基本类型(int,long,byte,short,float,double,char,boolean)和直接赋值的String类型的地方会被替换成实际值,例如 public static final int a = 1; 引用a的地方会被直接替换成1.基本类型的包装类型不可以。以上几种是编译期常量。
运行期常量是到运行时才能确定值。例如public static final int a = Math.getExponent(32); a的值需要经过计算才能完成。当然也不是所有经过计算才能得到值的都是运行时常量。
如:public static final a = 1+1; 仍然属于编译期常量。
oracle官方文档第15章28节对编译期常量作了解释。oracle 15-28
书中的例子:public static final int RAND_CONST = new Random().nextInt(); 导致RAND_CONST的值是不可预期的。
3.三元操作符的类型务必一致
public static void main(String[] args) {
int i = 80;
String s = String.valueOf(i < 100 ? 90 : 100);
String s1 = String.valueOf(i < 100 ? 90 : 100.0);
System.out.println(s);
System.out.println(s1);
System.out.println(s.equals(s1));
}
输出的结果为90,90.0,false
造成这种结果的原因是三元操作符是要返回一个类型的结果的,编译器并不允许 条件为真时返回int 为假时返回float,所以三元操作符进行了类型转换。
三元操作符类型转换原则如下
1.若两个操作数不可转换,则不做转换,返回值为Object类型。
2.若两个操作数时明确类型的表达式,则按照正常的二进制数字来转换。int转换为long,long转换为float等。
3.若两个操作数有一个是数字S,另外一个是表达式,且其类型标识为T,那么若数字S在T的范围内,则转换为T的类型,若S超出了T类型的范围,则T转换为S类型
4.若两个数都是字面值(Literal)则返回值类型为范围较大者。
4.避免带有变长参数的方法重载
变长参数的方法重载不推荐使用主要是会对人产生误导。
public static void sysout(String test) {
System.out.println("1.hello " + test);
} public static void sysout(String... test) {
for (String string : test) {
System.out.println("2.hi " + string);
}
} public static void main(String[] args) {
sysout("xu5hy");
}
输出 1.hello xu5hy
改善Java程序的151个建议(1-4)的更多相关文章
- 博友的 编写高质量代码 改善java程序的151个建议
编写高质量代码 改善java程序的151个建议 http://www.cnblogs.com/selene/category/876189.html
- 编写高质量代码改善java程序的151个建议——导航开篇
2014-05-16 09:08 by Jeff Li 前言 系列文章:[传送门] 下个星期度过这几天的奋战,会抓紧java的进阶学习.听过一句话,大哥说过,你一个月前的代码去看下,慘不忍睹是吧.确实 ...
- 编写高质量代码:改善Java程序的151个建议(第二章:基本类型)
编写高质量代码:改善Java程序的151个建议(第二章:基本类型) 目录 建议21:用偶判断,不用奇判断 建议22:用整数类型处理货币 建议23:不要让类型默默转换 建议24:边界还是边界 建议25: ...
- 编写高质量代码:改善Java程序的151个建议(第一章:JAVA开发中通用的方法和准则)
编写高质量代码:改善Java程序的151个建议(第一章:JAVA开发中通用的方法和准则) 目录 建议1: 不要在常量和变量中出现易混淆的字母 建议2: 莫让常量蜕变成变量 建议3: 三元操作符的类型务 ...
- 编写高质量代码改善java程序的151个建议——[1-3]基础?亦是基础
原创地址: http://www.cnblogs.com/Alandre/ (泥沙砖瓦浆木匠),需要转载的,保留下! Thanks The reasonable man adapts himse ...
- 编写高质量代码:改善Java程序的151个建议 --[117~128]
编写高质量代码:改善Java程序的151个建议 --[117~128] Thread 不推荐覆写start方法 先看下Thread源码: public synchronized void start( ...
- 编写高质量代码:改善Java程序的151个建议 --[106~117]
编写高质量代码:改善Java程序的151个建议 --[106~117] 动态代理可以使代理模式更加灵活 interface Subject { // 定义一个方法 public void reques ...
- 编写高质量代码:改善Java程序的151个建议 --[78~92]
编写高质量代码:改善Java程序的151个建议 --[78~92] HashMap中的hashCode应避免冲突 多线程使用Vector或HashTable Vector是ArrayList的多线程版 ...
- 编写高质量代码:改善Java程序的151个建议 --[65~78]
编写高质量代码:改善Java程序的151个建议 --[65~78] 原始类型数组不能作为asList的输入参数,否则会引起程序逻辑混乱. public class Client65 { public ...
- 编写高质量代码:改善Java程序的151个建议 --[52~64]
编写高质量代码:改善Java程序的151个建议 --[52~64] 推荐使用String直接量赋值 Java为了避免在一个系统中大量产生String对象(为什么会大量产生,因为String字符串是程序 ...
随机推荐
- CSS动态定位
$(document).ready(function(){ $('body').on('click', '#start_timer', function() { var laydate = $(&qu ...
- suid, sgid,粘滞位,chattr
一. 基本含义和作用 1. SUID:当设置了SUID 位的文件被执行时,该文件将以所有者的身份运行,也就是说无论谁来执行这个文件,他都有文件所有者的特权. 2. SGID:与上面的内容类似.用于设置 ...
- 程序设计中的dry原则
DRY:dont repeat yourself 假设一个逻辑(代码块)会重复两次或者以上,应该写成函数被调用 为什么呢,实际上,我们处处可见重复性的代码.这除了增加工作量之外,还会增加维护难度. d ...
- Bad Smell (代码的坏味道)
sourcemaking 如果一段代码是不稳定或者有一些潜在问题的,那么代码往往会包含一些明显的痕迹.正如食物要腐坏之前,经常会发出一些异味一样, 我们管这些痕迹叫做 "代码异味" ...
- 织梦dedecms5.7手机站页面首页正常其他页面显示pc页面解决方法
最近遇到的问题,用的是织梦的dedecms从以前的版本升级上来的最新版5.7sp2,客户需要手机版的,要做一个百度的验证. 这个站首页显示算是基本正常,点开里面随便一个页面会跳转到pc页面上 ...
- Python——付费/版权歌曲下载
很多歌曲需要版权或者付费才能收听 正确食用方法: 1.找到歌曲编号 2.输入编号并点击下载歌曲 # coding:utf8 # author:Jery # datetime:2019/4/13 23: ...
- QueryRunner(DBUtils) 结果集实例
转自:http://www.cnblogs.com/myit/p/4272824.html# 单行数据处理:ScalarHandler ArrayHandler MapHandler ...
- oracle12c之一 控制-PDB的磁盘I/O(IOPS,MBPS)资源管理
在以前的版本中,没有简单的方法来控制单个PDB使用的磁盘I / O量. 因此,某个PDB可能耗尽大量磁盘I / O,并影响同一实例中的其他PDB的性能. Oracle 12c R2可以控制PDB使用的 ...
- try-catch里面加了return后,finally还会执行吗?
请看下面的方法,在我们的catch里面,捕获到了异常之后,我们的catch模块里面的语句,还会接着执行,当我们执行到return之后,我们不会立即返回,而是会接着执行finally块里面的代码,只有执 ...
- IE8 placeholder不支持的兼容性处理
引入 <script type="text/javascript" src="<%=path%>/common/js/jquery/jquery.min ...