JavaSE 55 异常机制 → 捕获和抛出异常
2021/7/11 11:06:52
本文主要是介绍JavaSE 55 异常机制 → 捕获和抛出异常,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
9.2 捕获和抛出异常
- 抛出异常
- 捕获异常
- 异常处理的五个关键字
- try //监视区域,先做监视观察 才能去捕获
- catch //捕获异常
- finally //无论怎么样 最终都要去做的事(善后工作)
- throw //抛出异常(非常确定抛出的是什么异常,只是没有做异常的声明)
- throws //在方法头上 书写(意味着该方法可能会抛出这些异常!这叫做异常的声明)
如果该方法在方法体内 完成了对其中一个异常的处理,那么这个被处理的异常!就可以不用写在 方法头上了!因为该异常不需要向外抛出,该方法自己已经解决了!
9.2.1 举例说明
正常 a/b 肯定会 提示你 异常。
那么 我们怎么 去捕获这个异常,并且获得一些 信息呢?
- 首先 要监视它的所有行为!用 try 来监视!
- 用 catch 去捕获 它 异常的地方!这个异常的地方我们可以自己定义时什么异常,比如说 ArithmeticException 算术异常。
catch(ArithmeticException e) //意思就是 说 当 我监视你整体的行为中,如果出现了 算术异常,那么我就将这个异常捕获下来!- finally:就是做善后工作,出不出现异常,都要执行!所以可有可无。
package Exception; public class Test { public static void main(String[] args) { int a = 1; int b = 0; try {//try 作为监视区域,把需要监视的东西放在这里 System.out.println(a/b); }catch (ArithmeticException e) { System.out.println("出现异常!变量b不能为0,分母不能为0!"); }finally { System.out.println("无论出不出现异常,我都得执行!"); } } }
9.2.2 当我们不知道 需要捕获什么异常的时候怎么办呢?
可以使用 Throwable 这个最大的 异常类型 进行捕获!
- 如果你知道你捕获的肯定是异常 也可以用 Exception
- 如果你知道你不活的肯定是错误 也可以用 Error
package Exception; public class Test { public static void main(String[] args) { int a = 1; int b = 0; try {//try 作为监视区域,把需要监视的东西放在这里 System.out.println(a/b); }catch (ArithmeticException e) { System.out.println("出现异常!变量b不能为0,分母不能为0!"); }finally { System.out.println("无论出不出现异常,我都得执行!"); } try{ new Test().a(); }catch(Throwable e) { System.out.println("栈溢出"); } } public void a() { b(); } public void b(){ a(); } }
- 如何判断是 异常 还是 错误 ??
可以通过 层次 捕获(捕获优先级) ,多次 判断,来确定是 异常 还是 错误!
Throwable > Exception > Error (捕获优先级)
例如:捕获栈溢出 是 error 还是 exception
package Exception; public class Test { public static void main(String[] args) { int a = 1; int b = 0; try {//try 作为监视区域,把需要监视的东西放在这里 System.out.println(a/b); }catch (ArithmeticException e) { System.out.println("出现异常!变量b不能为0,分母不能为0!"); }finally { System.out.println("无论出不出现异常,我都得执行!"); } //层次捕获 从低到高,如果从高到低,那么直接就捕获结束了! try{ new Test().a(); }catch(Error e) { System.out.println("error"); }catch(Exception e) { System.out.println("exception"); }catch(Throwable e) { System.out.println("栈溢出"); } } public void a() { b(); } public void b(){ a(); } }
事实证明,栈溢出 属于 error 错误 范畴,是 一个很严重的 错误!并非 异常 可比!
- IDEA 自动包含代码快捷键
Ctrl+Alt+T 直接就会 让你选择 用什么结构 包含这行代码。
9.2.3 捕获到后的 e 对象
e 是捕获到后该异常后,给你提供的 该异常类型的对象,这个对象有很多的方法!是Java 为你提供的,只是为了方便 你 开发程序,所以 Java 为你提供了 这么一个东西!
9.2.4 主动抛出异常(throw/throws)
throw / throws 常常用于 方法中!而并非 随便挑选出来的某个代码块中。
9.2.4.1 throw
throw 只能抛出一个异常,并且不会自动做 异常的声明,所谓异常的声明,所谓异常的声明就是用 throws 在 方法头部 那里 告诉外部 我这个方法可能会抛出哪些异常!
package Exception; public class Throw { public static void main(String[] args) { new Throw().f(2,0); } public int f(int a,int b) { if( b == 0) { throw new ArithmeticException();//抛出一个 算术异常对象 } int ret = 0; //int ret = a / b; return ret; } }
一旦抛出了异常,你就会发现 我们需要 catch 抓捕下来 并且 进行处理!
9.2.4.2 throws
throws 作为 方法 可能抛出 异常的声明!
简单了解下就行,就是 为 可能抛出的异常 做声明!而 方法体内,要在 特定的情况下,抛出这些异常,以便于 我们进行 捕获 和 处理!
这篇关于JavaSE 55 异常机制 → 捕获和抛出异常的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26消息中间件源码剖析教程
- 2024-11-26JAVA语音识别项目资料的收集与应用
- 2024-11-26Java语音识别项目资料:入门级教程与实战指南
- 2024-11-26SpringAI:Java 开发的智能新利器
- 2024-11-26Java云原生资料:新手入门教程与实战指南
- 2024-11-26JAVA云原生资料入门教程
- 2024-11-26Mybatis官方生成器资料详解与应用教程
- 2024-11-26Mybatis一级缓存资料详解与实战教程
- 2024-11-26Mybatis一级缓存资料详解:新手快速入门
- 2024-11-26SpringBoot3+JDK17搭建后端资料详尽教程