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)的更多相关文章

  1. 博友的 编写高质量代码 改善java程序的151个建议

    编写高质量代码 改善java程序的151个建议 http://www.cnblogs.com/selene/category/876189.html

  2. 编写高质量代码改善java程序的151个建议——导航开篇

    2014-05-16 09:08 by Jeff Li 前言 系列文章:[传送门] 下个星期度过这几天的奋战,会抓紧java的进阶学习.听过一句话,大哥说过,你一个月前的代码去看下,慘不忍睹是吧.确实 ...

  3. 编写高质量代码:改善Java程序的151个建议(第二章:基本类型)

    编写高质量代码:改善Java程序的151个建议(第二章:基本类型) 目录 建议21:用偶判断,不用奇判断 建议22:用整数类型处理货币 建议23:不要让类型默默转换 建议24:边界还是边界 建议25: ...

  4. 编写高质量代码:改善Java程序的151个建议(第一章:JAVA开发中通用的方法和准则)

    编写高质量代码:改善Java程序的151个建议(第一章:JAVA开发中通用的方法和准则) 目录 建议1: 不要在常量和变量中出现易混淆的字母 建议2: 莫让常量蜕变成变量 建议3: 三元操作符的类型务 ...

  5. 编写高质量代码改善java程序的151个建议——[1-3]基础?亦是基础

    原创地址:   http://www.cnblogs.com/Alandre/  (泥沙砖瓦浆木匠),需要转载的,保留下! Thanks The reasonable man adapts himse ...

  6. 编写高质量代码:改善Java程序的151个建议 --[117~128]

    编写高质量代码:改善Java程序的151个建议 --[117~128] Thread 不推荐覆写start方法 先看下Thread源码: public synchronized void start( ...

  7. 编写高质量代码:改善Java程序的151个建议 --[106~117]

    编写高质量代码:改善Java程序的151个建议 --[106~117] 动态代理可以使代理模式更加灵活 interface Subject { // 定义一个方法 public void reques ...

  8. 编写高质量代码:改善Java程序的151个建议 --[78~92]

    编写高质量代码:改善Java程序的151个建议 --[78~92] HashMap中的hashCode应避免冲突 多线程使用Vector或HashTable Vector是ArrayList的多线程版 ...

  9. 编写高质量代码:改善Java程序的151个建议 --[65~78]

    编写高质量代码:改善Java程序的151个建议 --[65~78] 原始类型数组不能作为asList的输入参数,否则会引起程序逻辑混乱. public class Client65 { public ...

  10. 编写高质量代码:改善Java程序的151个建议 --[52~64]

    编写高质量代码:改善Java程序的151个建议 --[52~64] 推荐使用String直接量赋值 Java为了避免在一个系统中大量产生String对象(为什么会大量产生,因为String字符串是程序 ...

随机推荐

  1. js返回上一级代码和刷新页面代码

    返回上一级代码: <a href="javascript:;" onclick="history.go(-1);" class="icon_ba ...

  2. jvisualvm_使用jmx连接远程linux应用

    [前提] JVisualVM是由Sun提供的性能分析工具,在Jdk6.0以后的版本中是自带的,如果是用Jdk1.5或以前版本的就得要单独安装了. [1]远程机器需要开启jmx 在使用jvisualvm ...

  3. RDLC报表的相关技巧一(不足N行用空行补齐)

    为了广泛支持客户端,系统框架运行在.Net Framework 4.0之上,Report viewer的版本也限制在11.0.3366.16. 使用NUGET安装Microsoft.ReportVie ...

  4. TCP的成块数据流

    TCP使用滑动窗口协议的另一种方式来实现流量控制.该协议允许发送方在停止并等待确认之前可以连续发送多个分组.由于发送方不必每发送一个分组就停下来等确认,因此该协议可以加速数据的传输. 一.滑动窗口  ...

  5. 10分钟教你用VS2017将代码上传到GitHub

    前言 关于微软的Visual Studio系列,真可谓是宇宙最强IDE了.不过,像小编这样的菜鸟级别也用不到几个功能.今天给大家介绍一个比较实用的功能吧,把Visual Studio 2017里面写好 ...

  6. Alluxio学习

    介绍 Alluxio(之前名为Tachyon)是世界上第一个以内存为中心的虚拟的分布式存储系统.它统一了数据访问的方式,为上层计算框架和底层存储系统构建了桥梁.应用只需要连接Alluxio即可访问存储 ...

  7. MACD 的数学解释

    目录 MACD 的数学解释 MACD 的一般定义 引入延迟算子 Taylor 展开 权重分析 共振? MACD 的数学解释 MACD 的一般定义 \[ \begin{align*} DIF & ...

  8. linux开机、重启和用户登陆注销

    关机&重启命令 基本介绍: shutdown –h now    立该进行关机 shudown -h 1 "hello, 1 分钟后会关机了" shutdown –r no ...

  9. 27.Next Permutation(下一个字典序列)

    Level:   Medium 题目描述: Implement next permutation, which rearranges numbers into the lexicographicall ...

  10. 如果你创建了类似于下面的 Twitter 元素,那么它相关的类定义是啥样子的?

    代码: <Twitter username='tylermcginnis33'> {(user) => user === null ? <Loading /> : < ...