effective java
78条,每天更两条,有空会补充我自己的理解。
38、检查参数有效性
定义方法时控制参数的类型限制。
public static void sort(long a[], int offset,int length){
assert a !=null;
assert offset >=0 && offset<=a.length;
assert length >= 0 && length <= a.length-offset;
//do the computaion
}
39、必要时进行保护性拷贝
如果类具有从客户端得到或者返回到客户端的可变组件,类就必须保护性地拷贝这些组件。
40、谨慎设计方法签名
方法的名称、不要过于追求便捷、避免过长的参数列表(4个)、一个参数的方法比较推荐、对象替代多个参数、接口替代类为参数。
方法的正交性 orthogonality
41、慎用重载
覆盖、编译期与运行期间的依赖,传递同样的参数,所有重载的方法的行为保持一致。
42、可变参数
可变数组? Arrays.toString
43、返回零长度的数组或者集合,而不是null.
使用方不用做非null验证,去除不必要的处理。
44、api文档化(javadoc)
45、将局部变量的作用域最小化。
for(int x=0;n=list.size();x<n;x++){
dosomething(x);
}
46、 foreach 替代传统的for循环
以下三种不考虑使用foreach 过滤、转换、平行迭代
关键词,迭代器和索引变量
48、 如果需要精确的答案,请避免使用float和double
int<long<Bigdecmal
49、基本类型优先于装箱基本类型
类型系统 primitive、reference type 、boxed primitiveji
两者区别
1、值 同一性 2、null 3、效率
if(i == 42)
50、选择使用合适的类型,来尽量避免使用字符串
threadlocal
public static void get(String key);
51、当心字符串拼接的性能
85 StringBuilder 不可变 平方级
52、参数类型-通过接口引用对象
List <Sting> list = new ArrayList<String>();
值类、框架、不存在的额外方法
53、接口优先于反射机制
编译时期未知的类,访问对象时已知的某个接口或者类。
性能差两倍、代码量多、缺少编译时检查的优势
54、谨慎使用本地方法 JNI (java native interface)
本地程序设计语言(c/c++)、JVM、biginteger
55、谨慎地进行优化
好代码,有效率的代码。
api、链路层、永久数据格式
56、遵守普遍接受的命名惯例
the java langrage specification
57、 只针对异常的情况才使用异常
try{
int x=0;
while(true){
arr[x++].climb();
}
}catch(exception e) {
}
jvm优化、异常模式、堆栈轨迹的完整性、api设计、hasNext()
58、对可恢复的情况使用受检异常,对编程错误使用运行时异常。
可抛出结构、
受检的异常-简单说是需要try的异常、
运行时异常 前提违例-数组角标越界。
RuntimeException和它的子类以及Error和它的子类都是非受检异常
参考资料:http://blog.csdn.net/p106786860/article/details/11918773
59、避免不必要地使用受检的异常。
60、优先使用标准的异常
nullpointexception、indexoutofboundsexception
内存印迹,装载类的时间开销
61、抛出与抽象相对应的异常
高层实现与低层异常,
异常转译:更高层的实现应该捕获低层的异常,同时抛出可以按照高层抽象进行解释的异常。
try{
return i.next();
}catch(nosuchelementException e){
Throw new indexofoutofException();
}
异常链:低层的异常传递到高层,高层的异常提供访问方法。
62、每个方法抛出的异常都要有文档
@throws
63、在细节消息中包含能捕获失败的信息
硬数据、描述性数据
64、努力使失败保持原子性
对象的原子性
1、不可变的对象
2、检查参数的有效性
3、 调整计算处理过程的熟悉,任何会失败的都在对象状态被修改之前。
65、不要忽略异常
1、catch 里面什么都不做
2、 关闭FileInputStream
什么都不做类似关掉火警信号
3、用enum替代int常量
浙公网安备 33010602011771号