最近在学习《编码高质量代码》这本书,首先我们来看下第一个原则:不要在常量和变量中出现易混淆的字母
命名规则:包名全小写,类名首字母全大写,常量全部大写并用下划线分割,变量采用驼峰命名法(Camel Case)命名等,这些都是最基本的Java编码规范。但是在变量的声明时要注意不要引入容易混淆的字母,例如:
long i=1l;
这里需要注意,长整形的l需要大写,否则容易和1混淆。此外,如果字母和数字必须混合使用,字母l必须大写,字母o则增加注释。
建议2:莫让常量蜕变成变量
有时候public static修饰的常量也可以发生变化,例如:
interface Const{
public static final int RAND_CONST=new Random().nextInt();
}
显然上述常量会发生改变。注意务必让常量的值在运行期间保持不变。
建议3:三元操作符的类型务必一致
三元操作符是if-else的简化写法,在项目中使用它的地方很多,但是注意不能随意使用,例如:
当i=80的时候,我们输出int型,如果i为101,却输出float型,这就会让我们疑惑到底输出什么类型的数据
建议4:避免带有变长参数的方法重载
Java5之前常用的设计技巧就是把形参定义成Collection类型或其子类类型,或者是数组类型,这种方法的确定是需要对空参数进行判断和筛选。而Java5引入变长参数就是为了更好地提高方法的复用性,当然变长参数需要遵循一定规则的,比如变长参数必须是方法的最后一个参数,一个方法不能定义多个变长参数等
显然后面的变长参数方法包含了前面的方法,此处是重载,那么当参数有2个的时候,调用哪一个方法呢,调用简单的,也就是第一个。
建议5:别让null值和空值威胁到变长方法
变长参数的重载问题,如果出现下图所示情况,
两个methodA都进行了重载,但是client.methodA("china")和client.methodA("china",null)编译报错,原因在于这两次调用均存在模糊调用,也就是说两个方法都符合,而且两个方法都是含有变长参数的复杂方法。
解决:在调用前指定好类型,例如String ss=null; client.methodA("china",ss)