《涨姿势系列》--2017.01.23代码review

来源:互联网 发布:迦陵论诗丛稿 知乎 编辑:程序博客网 时间:2024/05/21 01:42

1: finally中不能throw或者return。
throw会把try catch中的异常给吃了!

具体如下:

java 的异常处理中:
1):在不抛出异常的情况下,程序执行完 try 里面的代码块之后,该方法并不会立即结束,而是继续试图去寻找该方法有没有 finally 的代码块,
如果没有 finally 代码块,整个方法在执行完 try 代码块后返回相应的值来结束整个方法。

2):如果有 finally 代码块,此时程序执行到 try 代码块里的 return 语句之时并不会立即执行 return,而是先去执行 finally 代码块里的代码。
若 finally 代码块里没有 return 或没有能够终止程序的代码,程序将在执行完 finally 代码块代码之后再返回 try 代码块执行 return 语句来结束整个方法;
若 finally 代码块里有 return 或含有能够终止程序的代码,方法将在执行完 finally 之后被结束,不再跳回 try 代码块执行 return。
在抛出异常的情况下,原理也是和上面的一样的。

错误代码如下:
这里写图片描述
从代码可以看出,在finally中进行了try catch异常捕获,如果关闭输入流失败,并且在try代码中初始化也失败,这时catch代码块中的异常将会被吃掉。方法调用者只能捕获到finally中的异常,而不能获取到catch中的异常。

2:catch中的Exception类型,尽量细化到各个类型的异常。不要直接简单粗暴的catch(Exception e).

3:Integer类型的值比较不要用==、!=
这个答案,就涉及到Java缓冲区和堆的问题:
java中Integer类型对于-128-127之间的数是缓冲区取的,所以用等号比较是一致的。但对于不在这区间的数字是在堆中new出来的。所以地址空间不一样,也就不相等。

Integer i=60,这是一个装箱过程也就是
Integer b3=Integer.valueOf(60)
所以,以后碰到Integer比较值是否相等需要用intValue()

错误代码示范:
这里写图片描述

对于Double没有缓冲区。

4:for循环嵌套层级不要太多,最多不要超过2层。多了可以引入设计模式。

1 0