JavaSE基础复习三:异常机制知识点

  ------- android培训、java培训、期待与您交流! ----------


为了提高程序的容错性、健壮性,引入异常机制,当程序发生异常时,自动生成异常对象通知程序,成而实现正常代码和错误处理代码的分离,提高可读性。

Java中异常的关键字:

try    catch    finally    throw    throws


异常之间的关系:

Throwable
    |---Error  错误,与JVM相关的问题,无需catch捕获和throws声明,不能被处理。
    |---Exception  异常
        |---RuntimeException
        |---checked Exception


RuntimeException:运行时异常

    运行时异常指示调用方无法处理或恢复的程序错误。
    取决于运行状态,编译时不被检测,可以由系统自动抛出,自动捕获,它会直接终止程序。
    不需要try,catch和throws exception语句,
    运行时异常也可以显示捕获。
    如果捕获,程序代码的错误(bug)会被掩盖在运行当中无法被察觉。
    常见有除零异常、空指针异常、数组越界异常等。
    

checked Exception:编译时被检测异常

    需要调用方显示捕获处理或者显示声明抛出异常。
        

catch:

异常捕获:先捕获小异常,再捕获大异常。
Java7的多异常捕获:
    catch(Exception1|Exception2 e) {...   }  各异常类型之间用|分开,e默认被final修饰.
    

异常的几种处理方式:

    1、通过catch处理异常,并进行修复,然后继续执行程序;
    2、catch后重新抛出新异常,交给上层调用者;
    3、不捕捉异常。直接使用throws声明抛出。
        
捕获的异常赋给catch后的形参,该异常对象的方法有:
    getMessage():返回异常的描述字符串
    printStackTrace():错误栈信息输出到标准输出
    printStackTrace(PrintStream ps):错误栈信息输出到指定输出流
    getStackTrace():返回栈信息,数组


finally代码块:

    用于关闭资源。
    当遇到return或者throw 语句时,方法返回前会先执行finally中的代码;
    如果catch代码块中有System.exit(1);语句,则finally代码块将不被执行。
    如果需要定义必须执行的代码,可以使用try。。。finally。。语句,将代码放在finally块中。
    
Java7 自动关闭资源的try语句
    try(定义资源或者初始化资源){。。。。} 
    这些资源必须实现Closeable或者AutoCloseable接口;
    隐式包含用于关闭资源的finally块,可以不需要catch块和finally块。
    

throw语句

    单独存在时,后面不可以跟语句,因为执行不到。    
    自定义异常:需要继承Exception或者RuntimeException

throws抛出异常

    子类方法抛出的异常应该是父类方法抛出的异常的子类或者相同,子类方法不能比父类方法抛出更多的异常。    

    举例:如在多态时,早期的程序不能处理后来出现的新异常。

------- android培训、java培训、期待与您交流! ----------

你可能感兴趣的:(JavaSE基础复习三:异常机制知识点)