美文网首页
Java学习笔记6

Java学习笔记6

作者: wangmin | 来源:发表于2016-01-30 15:48 被阅读28次

    异常

    Java把所有的非正常信息分成两类:

    • 异常
    • 错误

    这两类异常都是继承于Throwable。

    Java异常捕获有一个特点就是,把小异常放在catch块的前面进行先处理,然后再捕获大异常,把大异常放在catch块的后面。

    有的时候在try块里面打开的物理资源(例如:数据库连接、网络连接和磁盘文件等),这些物理资源都必须显示的回收。Java的垃圾回收机制是不会回收任何的物理资源,垃圾回收机制只能回收堆内存中的对象所占用的内存。这就必须使用finally来完成垃圾的回收。

    Java的异常也被分成两类:Checked异常和Runtime异常。所有的RuntimeException类及其子类的实例都被称为Runtime异常,不是RuntimeException类及其子类的异常实例则被称为Checked异常。

    自定义异常

    如果是自定义检查性异常则需要继承Exception基类,然后提供一个无参的构造器,以及一个带字符串的有参数构造器,并且将这个字符串参数作为该异常对象的描述信息。例如:

    public class ExceptionTest extends Exception {
        public ExceptionTest() {}
        public ExceptionTest(String msg) {
            super(msg);
        }
    }
    

    如果定义的是非检查性异常(也就是运行时异常),就需要自定义的类继承RuntimeException类,并且提供两个构造器,提供的形式如检查性异常一样。

    public class RuntimeExceptionTest extends RuntimeException {
        public RuntimeExceptionTest() {}
        public RuntimtExceptionTest(String msg) {super(msg);}
    }
    

    对于异常信息的处理一般的做大是:层与层之间的异常信息有非常清晰的划分,上层功能的实现严格依赖于下层的API,但是不会跨界访问。例如:当业务逻辑层出现SQLException异常的时候,程序不应该把底层的SQLException异常传到用户界面,通常的做法是在程序中先捕获原始的异常信息,然后抛出一个新的业务异常,新的业务异常中包含了对用户的提示信息。这种处理方式被称为异常转译。例如:

    public void exceptionMethod() throws SalException {
    
        try {
        ...
        } catch(SQLException e) {
            // 做一些处理
            ...
            // 包装异常,抛出一个新的异常
            throw new SalException(...);
        }
    }
    

    相关文章

      网友评论

          本文标题:Java学习笔记6

          本文链接:https://www.haomeiwen.com/subject/uvajkttx.html