四、异常的设计
1、异常不能代替简单的测试,如if
2、异常没必要细化,就是一个try加n个catch
3、合理的设计异常的结构,该封装就封装,注意保持root cause
4、避免catch之后什么都不做
5、检测到错误,不要返回一个简单的值表示出错了,抛个异常更好
6、方法后面大胆地加throws,让高层次的方法通知用户
五、断言
看段代码就知道了
int x = 10;
assert x == 11 : “failed”;
System.out.println(”finish”);
直接运行,输出finish,可是如果在java.exe后面+个-ea呢,就输出Exception in thread “main” java.lang.AssertionError: failed
注意:断言失败是致命的,断言只用在开发和测试的时候
六、IO
涉及的类太多,使用时候看API就行了,值得理解是结构。Reader和Writer类主要用于读取文本格式的内容,而InputStream和OutputStream及它们的子类主要用于读取二进制文件。这里有decorator模式哦。
七、泛型设计
语法 ? super T 表示T的一个未知的父类(或者是T自己)。用? extends T 表示T的一个未知的子类是对应的。
如:class C<T extends Comparable<? super T> & Serializable>
来分析下,用个通俗的解释就是这个T是Comparable和Serializable的子类,而Comparable又是有限制的,限制就是必须是T的父类,什么父类?未知。
一篇很好的文章