Effective Java 读书笔记或学习笔记
来源:互联网 发布:淘宝远程付款安全吗 编辑:程序博客网 时间:2024/06/01 20:02
本文主要截图或者代码来自EffectIve Java,所有归属该书作者。
1.泛型的优化
请不要在新的代码中使用原生态类型。
如果使用原生态类型,就失掉了泛型在安全性和表达性方面的所有优势。
一般使用在集合、类(DAO)、方法上。
2.消除非受检警告
Set<Lark> exaltation = new HashSet();会出现警告
----->解决Set<Lark> exaltation = new HashSet<Lark>();
警告的处理方式:
@SuppressWarning("unchecked")来禁止这条警告,不要在类上使用。
3.列表由于数组
修改如下代码:
static <E> reduce(List<E> list,Finction<E> f,E initVal){List<E> snapshot;synchronized(list){snapshot=new ArrayList<E>(list);}E result=initVal;for(E e:snapshot){result=f.apply(result,e);return result;}}
public class Stack<E>{private E[] elements;private int size=0;public Stack(){elements =new E[19];//这里有问题}public void push(E e){.....}public E pop(){......}}
5.方法
5.1.检查参数是否有效
索引值是否为负数,对象是否为空。
在方法体的开题处,进行参数的检查。
5.2.谨慎设计方法签名
谨慎地选择方法的名称
不要过于追求提供便利的方法
避免过长的参数列表(目标是4个)
5.3.谨慎使用重载
5.4.慎用可变参数
5.5.返回零长度的数组或者集合,而不是null
5.6.为所有导出的API元素编文档注释
6.java异常
1.对可恢复的情况使用受检异常,对编程错误使用运行时异常
java可抛出的结构:受检的异常、运行时异常和错误
在决定使用受检的异常或是未受检的异常时,主要的原则是:如果期望是调用者能够适当地恢复,对于这种情况就应该使用受检的异常。强迫调用者在一个catch子句中处理该异常,或者将它传播出去。
IllegalArgumentException.传递的参数值不合适
IllegalStateException.接受对象的状态而使用调用非法,例如,如果在某个对象被正确地初始化之前,调用者就企图调用这个对象。
NullPointerException,如果调用者在某个不允许null值的参数中传递了null。
IndexOufOfBoundsException,如果调用者在表示序列下标的参数中传递了越界的值。
ConcurrentModificationException,如果一个对象设计为单线程或者与外部同步机制配合使用,一旦发现它正在被并发地修改。
UNsupportedOperationException,如果对象不支持所请求的操作。
2.抛出与抽象想对应的异常。
如果高层的实现在后续的发型版本中发生了变化,它所抛出的异常也可能会跟着发生变化,从而潜在地破坏现有的客户端程序。
为了避免这个问题,更高层的实现应该捕获低层的异常,同时抛出可以按照高层抽象进行解释的异常。叫做异常转译。
3.对异常建立一个好的文档
4.在细节消息中包含能捕获失败的信息。
为了捕获失败,异常的细节信息应该包含所有“对该异常有贡献”的参数和域的值。
例如:IndexOutOfBoundsException异常的细节消息应该包含下界、上界以及没有落在界内的下标 值。
三种错误,如果指定查找那种错误,就可以极大地加速诊断过程。
堆栈轨迹的用途是与源文件结合起来进行分析,它通过包含抛出该异常的确切文件和行数,以及堆栈中所有其他方法调用所在的文件和行数。
5.努力使失败保持原子性
对于在可变对象上执行操作的方法,获得失败原子性最常见的方法是,在执行操作之前检查参数的有效性。这可以使得在对象的状态被修改之前,先抛出适当的异常。
public Object pop(){
if(size== 0)
throw newEmptyStackException();
Objectresult=elements[--size];
......
}
7.内存泄露的问题:
一般而言,只要类是自己管理内存,程序员就应该警惕内存泄露问题。
一旦元素被释放掉,则该元素中包含的任何对象引用都应该被清空。
内存泄露的另一个常见来源是缓存。
缓存应该时不时地清掉没用的项,这项清除工作可以由一个后台线程(可能是Timer或者是SeheduledThreadPoolExecutor)来完成。或者也可以在给缓存新条目时候顺便进行清理。
内存泄露的第三个常见来源是监听器和其它回调。
内存工具:Head剖析工具。
- Effective Java 读书笔记或学习笔记
- effective java学习笔记
- Effective java学习笔记
- effective java学习笔记
- effective java 学习笔记
- Effective Java 学习笔记
- Effective Java 学习笔记
- Effective Java学习笔记
- Effective Java学习笔记
- Effective Java学习笔记
- Effective Java 学习笔记
- Effective java --学习笔记
- JAVA学习之 Effective JAVA (读书笔记)
- 《Effective Java》学习笔记(1)
- 《Effective Java》学习笔记(3)
- 《Effective Java》学习笔记(4)
- 《Effective Java》学习笔记1
- 《Effective Java》学习笔记2
- linux下如何隐藏进程(ps/top) 和找到linux进程路径
- code signing is required for product type 'Application' in SDK 'iOS 9.1'
- web前端之路(3)--sublime的环境搭建
- 第一个Hibernate应用
- Android Http请求头与响应头
- Effective Java 读书笔记或学习笔记
- centos 下更改ftp登录根目录
- C# HttpHelper,帮助类,真正的Httprequest请求时无视编码,无视证书,无视Cookie,网页抓取
- fragment认识
- MySQL临时表
- BZOJ 3524: [Poi2014]Couriers|主席树
- 机器学习的三个基本量纲 Three Fundamental Dimensions for Thinking About Machine Learning Systems
- adb操作命令详解及大全
- android 动态设置background颜色