一些最佳实践

来源:互联网 发布:电子游戏机软件 编辑:程序博客网 时间:2024/06/06 00:36

1. 接口参数进行验证

public void test(String s){if(s == null){throw new NullPointerException();}}

2. 保护性拷贝

避免因为测试外参数变更对方法造成影响:如下

Date start = new Date(2014, 2, 2);Date end = new Date(2014, 3, 1);test(start, end);end.setMonth(1);
可以这样来实现方法解决这个问题:

public void test(Date start, Date end){Date s = new Date(start.getTime());Date e = new Date(end.getTime());}

以及对get方法中的返回值使用clone或者new新对象等


3. 返回空的数组或者集合而不是null

4. 局部变量作用于最小化

防止拷贝错误,更好的垃圾回收

List<String> list = new ArrayList<String>();// 用for代替下面的whilefor (Iterator<String> i = list.iterator(); i.hasNext();) {}Iterator<String> i1 = list.iterator();while(i1.hasNext()){}
5. 尽量使用基本类型,只有在作为key,或者是必须用封装类型的地方采用

Integer i = null;Integer i2 = new Integer(1);Integer i3 = new Integer(1);System.out.println(i2 == i3);System.out.println(i == 0);
出了性能上的损耗外,上面的代码还容易造成错误。

6. 对于可恢复的情况适用受检异常,对于编程错误适用运行时异常

7. 可以适用it.hasNext()这样的状态检测方式或者是返回状态码的方式来减少运行时异常

8. 一些常用的标准异常

IllegalArgumentException   参数不合适的异常

IllegalStateException 调用方法是对象的状态不正确,比如没有这个对象没有初始化

NullPointerException

IndexOutOfBoundsException

UnsupportedOperationException 对象不支持用户请求的方法

ArithmeticException  数学计算的时候出现错误,比如除0了

NumberFormatException 数字格式错误


9. 序列化要加上UID,并且记得在需要的时候修改它,如果不加的话JVM会根据类信息自动算出UID,有可能在很小的变动之后就造成接口不兼容。


10. 序列化有可能被攻击,比如别人直接生成了一个二进制文件,然后被读入就可以进行攻击。为了防止这种攻击,可以使用readObject方法,进行简单的参数验证




0 0
原创粉丝点击