您的位置:首页 > 编程语言 > Java开发

读书笔记--编写高质量代码 改善java程序的151个建议(八)异常

2014-08-14 11:13 639 查看

读书笔记--编写高质量代码:改善java程序的151个建议(八)异常

这个异常内容不多,简单总结一下就好了

提倡异常封装

异常封装可以提高系统的友好性,和可维护性,封装后给用户提供的异常信息更友好,然后给代码维护人员更容易阅读。

受检异常尽可能的转化为非受检异常

受检异常使接口声明变得很脆弱,代码可读性降低,还增加了开发工作量,但是在受检异常威胁到系统的安全性、稳定性、可靠性、正确性时,不能转换为非受检异常

不要在finally块中处理返回值

finally可能引起覆盖try中的返回值和屏蔽异常等问题。

不要在构造函数中抛出异常

使用Throwable获得栈信息

AOP编程可以很轻松的控制一个方法调用哪些类,也能够控制哪些方法允许被调用,一般来说切面编程只能控制到方法级别,不能实现代码级别的植入,比如一个方法被类A的m1方法调用时返回1,在类B的m2方法调用时返回0,着就要求被调用者据有识别调用这的能力。在这话总情况下,可以使用Throwable来获得栈信息,来鉴别调用者:
public class Client {
public static void main(String[] args) {
Invoker.m1();
Invoker.m2();
}

}

class Foo {
public static boolean m() {
// 取得当前栈信息
StackTraceElement[] sts = new Throwable().getStackTrace();
// 检查是否是m1方法调用
for (StackTraceElement st : sts) {
if (st.getMethodName().equals("m1")) {
return true;
}
}
return false;
}
}

class Invoker {
// 该方法打印出true
public static void m1() {
System.out.println(Foo.m());
}

// 该方法打印出false
public static void m2() {
System.out.println(Foo.m());
}
}


在JDK1.4中,可以这样写:
StackTraceElement[] stackTraceElements = new Throwable().getStackTrace();


然后就可以获取到类名、方法名、行数、文件名等信息:

stackTraceElements.getClassName()

stackTraceElements.getFileName()

stackTraceElements.getLineNumber()

stackTraceElements.getMethodName()

在JDK1.5中,可以使用:
StackTraceElement[] stackTraceElements = Thread.getStackTrace();

异常只为异常服务

不要用异常来做判断或者区别业务处理逻辑走向。这样做降低了系统性能,降低了代码的可读性,而且还容易隐藏运行期产生的错误。

也不要因为异常性能不高而不使用异常,异常可以让系统更健壮,开发维护更省心,而正确使用异常的性能开销还是可以接收的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 性能 编程
相关文章推荐