异常分类:

异常和异常处理 - 图1

异常包含:

  • 可检异常(一般异常):一般无法预料。例如,程序需要的文件没有找到。
  • 运行时异常:可以被程序员避免。
  • 错误:已经脱离程序员的控制的异常。例如,内存空间不够。

异常:

一般异常:

🐵 #面试 #CCQC #一般异常 和 运行时异常 的区别
  • 非RuntimeException类的异常即为一般异常。(⭐可以想成:我也晓得,按我的技术会出错,但是我真的无法控制)
  • 通常包含了:
    • IO异常:IOException
    • 数据库异常:SQLException
    • 用户自定义的异常
  • 编译器将强制要求程序员处理
  • 如果不处理,程序连编译都无法通过。

    运行时异常:

    🐵 #面试 #CCQC #一般异常 和 运行时异常 的区别
  • (⭐可以想成:作为一个程序员,我觉得他不得出错)

  • 通常包含了:
    • 数组越界:IndexOutOfBoundsException
    • 空指针(对象):NullPointerException
    • 除数为0
  • 程序能编译通过,但是在运行时,可能出错。(例如,进行除法时,进行到某一步时,除数为0了。此程序在编译时能编译成功,但是程序运行时会出错。)

异常处理:

抛出异常:

🐵 #面试 #CCQC #throw和throws的区别

throw:
  • throw用在方法体内部。
  • throw后只能跟一个异常。
  • throw的异常,要么使用方法体内的try-catch处理,要么throws

    1. public class className
    2. {
    3. public void deposit(double amount) throws RemoteException
    4. {
    5. // Method implementation
    6. throw new RemoteException();
    7. }
    8. //Remainder of class definition
    9. }

    throws:
  • throws用在方法声明后面。

  • throws后可以跟多个异常,使用,隔开。

    1. public class className
    2. {
    3. public void withdraw(double amount) throws RemoteException,InsufficientFundsException
    4. {
    5. // Method implementation
    6. }
    7. //Remainder of class definition
    8. }

    🐵 #面试 #CCQC #异常处理

    处理异常:

    1. try{
    2. // 程序代码
    3. }catch(异常类型1 异常的变量名1){
    4. // 程序代码
    5. }catch(异常类型2 异常的变量名2){
    6. // 程序代码
    7. }finally{
    8. // 程序代码
    9. }

    其中,

  • catch至少存在一个。

  • finally可以省略不用。
  • 对于finally,当try被执行到时,finally里的代码一定会被执行,具体表现在:即使在**try**或者**catch**里执行了**return****finally**里的代码也会在**return**前执行