155个建议笔记1

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

包(package)名全部小写,类(class)名首字母全大写,常量全部大写,并用下划线分隔,变量采用驼峰(camel case)命名法则(第一个单词以小写字母开始,第二个单词的首字母大写或者每一个单词的首字母都采用大写字母);

在变量的声明中不要引入容易混淆的字母。例如:long i=1l(字母l和大写字母O尽量不要和数字混用,如果必须混合使用,字母l必须大写,字母O添加注释)。

建议2:莫让常量蜕变成变量

不要用随机数生成的方式定义变量。例如:public static final int RAND_CONST=new Random().nextInt();

常量就是常量,在编译器就必须确定其值,不应该在运行期间发生更改。

建议3:三元操作符的类型务必一致

三元操作符是if-else的简化写法。

public class Clint{

public static void main(String[] args){

int i=70;

Sting s=String.valueOf(i<100?80:100);

Stirng s1=String.valueOf(i<100?80:100.0);

System.out.println(s.equals(s1));

}

}

结果输出为false.原因是在计算s1时,对返回值进行了类型转换,返回float类型的。

建议4:避免带有变长参数的方法重载

变长参数是变量个数不定,例如:int... count

建议5:别让null值和空值威胁到变长方法

建议6:覆写变长方法也循规蹈矩

在JAVA中,子类覆写父类中的方法很常见,这样做既可以修正bug,也可以提供扩展的业务功能支持。

遵循开闭原则设计出的模块具有两个主要特征:[1]

(1)对于扩展是开放的(Open for extension)。这意味着模块的行为是可以扩展的。当应用的需求改变时,我们可以对模块进行扩展,使其具有满足那些改变的新行为。也就是说,我们可以改变模块的功能。

(2)对于修改是关闭的(Closed for modification)。对模块行为进行扩展时,不必改动模块的源代码或者二进制代码。模块的二进制可执行版本,无论是可链接的库、DLL或者.EXE文件,都无需改动。

覆写方法需要满足的条件:

1) 重写方法不能缩小访问权限

2) 参数列表必须与被重写方法相同。

3) 返回类型必须与被重写方法的相同或是其子类

4) 重写方法不能抛出新的异常,或者超出父类范围的异常,但是可以抛出更少、更有限的异常或者不抛出异常。

[重载方法]方法名相同,参数类型,参数个数至少有一个不相同

[重写方法]重写父类的方法,方法名字相同,参数类表相同,方法体不同

建议7:警惕自增的陷阱

建议8:不要让旧语法困扰你

建议9:少用静态导入

例如:import static org.junit.Assert

对于静态导入,一定要遵循两个规则:

1)    不适用*通配符,除非是导入静态常量类(只包含常量的类和接口)

2)    方法名是具有明确、清晰表象意义的工具类。

建议10:不要在本类中覆盖静态导入的变量和方法

建议11:养成良好习惯,显式声明UID

我们编写一个实现了serializable接口的类,Eclipse马上就会给一个黄色警告:需要增加一个Serial Version ID。

类实现serializable接口的目的是为了可持久化,比如网络传输或本地存储,为系统的分布和异构部署提供先决支持条件。

建议12:避免用序列化类在构造函数中为不变量赋值

反序列化时,构造函数不会执行。

在序列化类中,不使用构造函数为final变量赋值。

建议13:避免为final变量复杂赋值

建议14:使用序列化类的私有方法巧妙解决部分属性持久化问题

(该建议没怎么看懂,最好看原来的工资例子)

建议15:break不可少

在swithch语句中,每个case语句后一定要跟上break,养成良好的习惯。

避免出错方法:修改IDE的警告级别,例如在Eclipse中,

可以依次点击

Preferences—java—Compiler—Errors/Warnings—Potential Programming problems,然后点击修改 switch case fall-through 为Errors级别,以后如果在case语句中不加break,就会报错。

建议16:易变业务使用脚本语言编写

(该建议不太懂,对于脚本语言不太明白)

建议17:慎用动态编译

建议18:避免instanceof非预期结果

Instanceof是一个简单的二元操作符,它是用来判断一个对象是否是一个类实例的。

Instanceof只能用于对象的判断,不能用于基本类型的判断。

Instanceof操作符的左右操作数必须有继承或者实现关系,否则编译会失败。

建议19:断言绝不是鸡肋

在java中的断言使用的是assert关键字,基本用法如下:

Assert<布尔表达式>

(该建议没用过,不太懂)

建议20:不要只替换一个类.

建议29:优先选择基本类型

包装类型自动装箱有一个重要的原则:基本类型可以先加宽,再转变成宽类型的包装类型,但不能直接转变成宽类型的包装类型。举例说:int可以加宽转变成long,然后再转变成Long对象,但不能直接转变成包装类型。int可以自动转化成Integer,long类型自动转化成Long。

建议30:不要随便设置随机种子

随机数和种子之间的关系:

种子不同,产生的随机数不同

种子相同,即使实例不同,也产生相同的随机数

若非必要,不要设置随机数种子

建议31:在接口中不要存在实现代码

接口中可以声明常量,声明抽象方法,也可以继承父接口,但就是不能有具体实现。

建议32:静态变量一定要先声明后赋值

静态变量是类加载时被分配到数据区的,在内存中,只有一个拷贝,不会被分配多次,其后的所有赋值操作都是值改变,地址则保持不变。

 

posted on 2013-05-09 15:52  ywf—java  阅读(198)  评论(0编辑  收藏  举报

导航