您的位置:首页 > 编程语言 > Java开发

编写高质量代码-改善java程序的151个建议-第一章 01

2017-09-21 00:00 609 查看
摘要: java开发中通用的方法和准则

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