Java异常

烂漫一生 提交于 2019-12-11 04:59:29

1 、异常的思维导图

在这里插入图片描述

2、JAVA异常分类

1.1、概念

如果某个方法不能按照正常的途径完成任务,就可以通过另一种路径退出方法。在这种情况下会抛出一个封装了错误信息的对象。此时,这个方法会立刻退出同时不返回任何值。另外,调用这个方法的其他代码也无法继续执行,异常处理机制会将代码执行交给异常处理器。
在这里插入图片描述

1.2、异常分类

Throwable是 Java 语言中所有错误或异常的超类。下一层分为Error和Exception。
Error:

  • Error类是指java运行时系统的内部错误和资源耗尽错误。应用程序不会抛出该类对象。

Exception:

  • Exception又有两个分支 ,一 个是运行时异常RuntimeException 一个是编译时异常CheckedException。

3 、自定义异常类型

Java 的异常机制中所定义的所有异常不可能预见所有可能出现的错误,某些特定的情境下,则需要我们自定义异常类型来向上报告某些错误信息。
在 Java 中你可以自定义异常:

  • 所有异常都必须是 Throwable 的子类。
  • 如果希望写一个检查性异常类,则需要继承 Exception 类。
  • 如果你想写一个运行时异常类,那么需要继承 RuntimeException 类。

4 、异常的处理方式

4.1 try…catch关键字

  • 使用 try 和 catch 关键字可以捕获异常。
  • try/catch 代码块放在异常可能发生的地方。

try/catch代码块中的代码称为保护代码,使用 try/catch 的语法如下:

try {
   // 程序代码
} catch(ExceptionName e1) {
   //Catch 块
}
  • Catch 语句包含要捕获异常类型的声明。当保护代码块中发生一个异常时,try 后面的 catch 块就会被检查。如果发生的异常包含在 catch 块中,异常会被传递到该 catch 块,这和传递一个参数到方法是一样。
  • 一个 try 代码块后面跟随多个 catch 代码块的情况就叫多重捕获。
    多重捕获块的语法如下所示:
try{
   // 程序代码
}catch(异常类型1 异常的变量名1){
  // 程序代码
}catch(异常类型2 异常的变量名2){
  // 程序代码
}catch(异常类型2 异常的变量名2){
  // 程序代码
}

4.2 throw/throws 关键字

  • throws 用在函数上,后面跟的是异常类,可以跟多个;而 throw 用在函数内,后面跟的 是异常对象。
  • throws 表示出现异常的一种可能性,并不一定会发生这些异常;throw 则是抛出了异常, 执行throw则一定抛出了某种异常对象。
  • 两者都是消极处理异常的方式,只是抛出或者可能抛出异常,但是不会由函数去处理异常,真正的处理异常由函数的上层调用处理。
  • throws 用来声明异常,让调用者只知道该功能可能出现的问题,可以给出预先的处理方 式;throw抛出具体的问题对象,执行到throw,功能就已经结束了,跳转到调用者,并 将具体的问题对象抛给调用者。也就是说 throw 语句独立存在时,下面不要定义其他语 句,因为执行不到。

事例:

public static void main(String[] args) {  
    String s = "abc";  
    if(s.equals("abc")) {  
      throw new NumberFormatException();  
    } else {  
      System.out.println(s);  
    }  
}  
int div(int a,int b) throws Exception{ 
    return a/b;}

一个方法可以声明抛出多个异常,多个异常之间用逗号隔开。

4.3 finally关键字

  • finally 关键字用来创建在 try 代码块后面执行的代码块。
  • 无论是否发生异常,finally 代码块中的代码总会被执行。在 finally 代码块中,可以运行资源释放等。
  • finally 代码块出现在 catch 代码块最后

语法如下:

try{
  // 程序代码
}catch(异常类型1 异常的变量名1){
  // 程序代码
}catch(异常类型2 异常的变量名2){
  // 程序代码
}finally{
  // 程序代码
}

5、 try-catch-finally 的执行顺序

1、如果try中没有异常,则顺序为try→finally,如果try中有异常,则顺序为try→catch→finally。
2、当try中带有return时,会先执行return前的代码,然后暂时保存需要return的信息,再执行finally中的代码,最后再通过return返回之前保存的信息。
3、catch中return与try中一样。
4、当finally中有return的时候,try中的return会失效,在执行完finally的return之后,就不会再执行try中的return。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!