编写高质量代码-改善java程序的151个建议-第一章 01
2017-09-21 00:00
609 查看
摘要: java开发中通用的方法和准则
1.不要在常量和变量中出现容易混淆的字母
准则: 包名全小写,类名首字母大写,常量全大写并使用下划线分割,变量首字母小写并侧用驼峰形式,变量和常量的值中不能出现容易混淆的字母。
我们需要遵循上面准则外,还需要注意变量和常量的值中出现容易混淆的字母,比如1l,2O,在程序中我们很难辨别出其正确值。我们可以使用1L代替1l,2O //八进制的2 代替2O,一个准则:不要让程序出现让人难以读明白的代码。
2.不要让常量蜕变为变量
准则: 常量的值需要在编译时就确定。
看下面的例子
3.三元操作符的类型必须一致
准则:保证三元操作符的两个操作数类型一致
看下面的程序
为什么是false呢,三元运算符在运算过程中会转化为操作数中最大的类型,如果两个类型不可以转化,则两个操作数都转为Object类型。
4.避免带有变长参数的方法重载【一个非变长,一个变长】
准则:避免带有变长参数的方法重载
变长参数是方法的最后一个参数,且一个方法只能支持一个变长参数。
为什么上面的程序输出的不是comple discount: $50.0呢? 对于java编译器来说,它会找类型最为匹配的方法进行调用。 此时传入的50是int,所以会调用calPrice(int price, int discount)。在实际项目中尽量少用这种重载方式,代码可读性差。
5.别让null值和空值威胁到变长方法
现在我们来看一个两个变长参数重载的例子。
上例中我们在调用methodA时,最后两行分别传入空值和null值,这是编译器就晕了,两个方法都匹配,因此会报错。因此针对这种情形,不要传入空置和null。要传入一个类型确定的null,可以这样调用:client.methodA("China",(String)null)。
1.不要在常量和变量中出现容易混淆的字母
准则: 包名全小写,类名首字母大写,常量全大写并使用下划线分割,变量首字母小写并侧用驼峰形式,变量和常量的值中不能出现容易混淆的字母。
我们需要遵循上面准则外,还需要注意变量和常量的值中出现容易混淆的字母,比如1l,2O,在程序中我们很难辨别出其正确值。我们可以使用1L代替1l,2O //八进制的2 代替2O,一个准则:不要让程序出现让人难以读明白的代码。
2.不要让常量蜕变为变量
准则: 常量的值需要在编译时就确定。
看下面的例子
public class Client{ public static void main(String[] args){ System.out.println(Const.RAND_CONST); } } interface Const{ //此时的常量值在每次运行时都不一样,该常量的值为运行时确定 public static final int RAND_CONST = new Random().nextInt(); }
3.三元操作符的类型必须一致
准则:保证三元操作符的两个操作数类型一致
看下面的程序
public class Client{ public static void main(String[] args){ int i=8; String s = String.valueOf(i<10?8:10); String s1 = String.valueOf(i<10?8:10.0); //print false here System.out.println(s.equals(s1)); } }
为什么是false呢,三元运算符在运算过程中会转化为操作数中最大的类型,如果两个类型不可以转化,则两个操作数都转为Object类型。
4.避免带有变长参数的方法重载【一个非变长,一个变长】
准则:避免带有变长参数的方法重载
变长参数是方法的最后一个参数,且一个方法只能支持一个变长参数。
public class Client{ public void calPrice(int price, int discount){ float knowndownPrice = price * discount /100.0f; System.out.println("simple discount: " + formatCurrency(knowndownPrice)); } public void calPrice(int price, int...discounts){ float knowndownPrice = price; for(int discount: discounts){ knowndownPrice = knowndownPrice * discount; } System.out.println("complex discount: " + formatCurrency(knowndownPrice)); } public String formatCurrency(float price){ return NumberFormat.getCurrencyInstance().format(price/100); } public static void main(String[] args){ Client client = new Client(); //此时会打印simple discount: $50.00 client.calPrice(10000, 50); } }
为什么上面的程序输出的不是comple discount: $50.0呢? 对于java编译器来说,它会找类型最为匹配的方法进行调用。 此时传入的50是int,所以会调用calPrice(int price, int discount)。在实际项目中尽量少用这种重载方式,代码可读性差。
5.别让null值和空值威胁到变长方法
现在我们来看一个两个变长参数重载的例子。
public class Client{ public void methodA(String str, Integer...is){ } public void methodA(String str, String... strs){ } public static void main(String[] args){ Client client = new Client(); client.methodA("China", 0); client.methodA("China", "People"); //编译出错 client.methodA("China"); //编译出错 client.methodA("China", null); } }
上例中我们在调用methodA时,最后两行分别传入空值和null值,这是编译器就晕了,两个方法都匹配,因此会报错。因此针对这种情形,不要传入空置和null。要传入一个类型确定的null,可以这样调用:client.methodA("China",(String)null)。
相关文章推荐
- 编写高质量代码-改善java程序的151个建议-第一章 02
- [编写高质量代码:改善java程序的151个建议]建议38-41
- [编写高质量代码:改善java程序的151个建议]建议32-静态变量一定要先声明后赋值
- [编写高质量代码:改善java程序的151个建议]建议53 注意方法中传递的参数要求
- [编写高质量代码:改善java程序的151个建议]建议43 避免对象浅拷贝; 建议44:推荐使用序列化实现对象的深拷贝
- 编写高质量代码:改善Java程序的151个建议 (第2章 基本类型)
- [编写高质量代码:改善java程序的151个建议]建议34:构造函数尽量简化
- [编写高质量代码:改善java程序的151个建议]建议62 警惕数组的浅拷贝
- [编写高质量代码:改善java程序的151个建议]建议42,如何让一个工具类不可实例化
- [编写高质量代码:改善java程序的151个建议]建议63 在明确的场景下,为集合指定初始容量
- [编写高质量代码:改善java程序的151个建议]建议31-在接口中不要存在实现代码
- [编写高质量代码:改善java程序的151个建议]建议35:不要在类中初始化其他类
- 编写高质量代码++改善Java程序的151个建议
- [编写高质量代码:改善java程序的151个建议]建议33:不要覆写静态方法
- 《编写高质量代码改善Java程序的151个建议》学习笔记 第6章 枚举和注解