zoukankan      html  css  js  c++  java
  • 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:静态变量一定要先声明后赋值

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

  • 相关阅读:
    简单工厂,工厂方法和抽象工厂
    谈谈类之间的关联关系与依赖关系(转载)
    redis-cli 命令操作 Redis 五种数据类型
    深入分析java中的反射机制
    深入分析Java中String、StringBuilder、StringBuffer的区别
    String类型为什么设计成不可变的?
    java集合系列(5)LinkedList
    java集合系列(4)fail-fast机制(面试常问)
    java集合系列(3)ArrayList
    java集合系列(2)collection
  • 原文地址:https://www.cnblogs.com/yuwenfeng/p/3069153.html
Copyright © 2011-2022 走看看