【Java】编写高质量的Java代码(一)

关于通用方法和准则

不要在常量和变量中出现易混淆的字母

包名全小写,类名首字母全大写,常量全部大写并用下划线分隔,变量采用驼峰命名法(Camel Case)命名等,这些都是最基本的Java编码规范,是每个Javaer都应熟知的规则,但是在变量的声明中要注意不要引入容易混淆的字母。
【问题代码】

public class Client {
	public static void main(String[]args){
		long i=1l;
		System.out.println("i的两倍是:"+(i+i));
	}
}

此处运行结果为2,而不是22。

【建议】

  • 字母“l”(还包括大写字母“O”)尽量不要和数字混用
  • 如果字母和数字必须混合使用,字母“l”务必大写,字母“O”则增加注释
  • 字母“l”作为长整型标志时务必大写

避免带有变长参数的方法重载

在项目和系统的开发中,为了提高方法的灵活度和可复用性,我们经常要传递不确定数量的参数到方法中,因此,Java 5引入变长参数(varags)就是为了更好地提高方法的复用性,让方法的调用者可以“随心所欲”地传递实参数量。
变长参数也是要遵循一定规则的,比如变长参数必须是方法中的最后一个参数;一个方法不能定义多个变长参数等
【问题代码】

public class Client {
	//简单折扣计算
	public void calPrice(int price, int discount){
		float knockdownPrice = price * discount / 100.0F;
		System.out.println("简单折扣后的价格是:" + formateCurrency(knockdownPrice));
	}
	
	//复杂多折扣计算(传说中的折上折)
	public void calPrice(int price, int……discounts){
		float knockdownPrice = price;
		for(int discount:discounts){
			knockdownPrice = knockdownPrice * discount / 100;
		}
		System.out.println("复杂折扣后的价格是:" + formateCurrency(knockdownPrice));
	}

	//格式化成本的货币形式
	private String formateCurrency(float price){
		return NumberFormat.getCurrencyInstance().format(price/100);
	}

	public static void main(String[]args){
		Client client=new Client();
		//499元的货物,打75折
		client.calPrice(49900,75);
	}
}

【问题分析】
多折扣计算方法看似重载了简单折扣计算方法,实则覆盖了后者的参数范畴。
此处运行结果为:简单折扣后的价格是:374.25。

【建议】
尽管此处编译器根据实参类型和个数(int,int)来默认匹配了第一个callPrice方法,但是为了让我们的代码能够被人类所看懂,还是要慎重考虑变长参数的方法的重载问题。

别让null和空值影响到变长方法

还是变长参数的方法重载问题。
【问题代码】

public class Client {
	public void fun(String str, Integer......is) {
	}
	public void fun(String str, String......strs) {
	}

	public static void main(String[] args) {
		Client client = new Client();
		client.fun("ABC");
		client.fun("ABC", null);
	}
}

【问题分析】
上面代码根本编译不过(方法模糊不清,编译器不知道调用哪一个方法)。
该代码违反了懒人原则。第二个实参null没有类型,两个fun方法都符合调用请求,因此编译器不知道该调用哪个方法。
【建议】

  • 按照懒人原则编写代码。
  • 不要隐藏实参类型,这非常危险,不仅仅调用者需要“猜测”该调用哪个方法,而且被调用者也可能产生内部逻辑混乱的情况。

【修改】

public static void main(String[] args) {
	Client client = new Client();
	String[] strs = null;
	client.fun("ABC", null);
}

让编译器知道这个null值是String类型的,编译即可顺利通过。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值