【java基础】java异常,捕获与抛出
java异常,捕获与抛出
1、概念:
在java里,所有的异常都有一个共同的祖先Throwable(可抛出)。 Throwable:有两个重要的子类:Exception(异常)和Error(错误)。 Error:是程序无法处理的错误,表示运行应用程序中较严重的问题。 Exception:是程序本身可以处理的异常。
2、处理异常机制
在java中,异常处理机制为:抛出异常,捕捉异常。 抛出异常:当一个方法出现错误引发异常时,方法创建异常对象并交付运行时系统,异常对象中包含了异常类型和异常出现时的程序状态等异常信息。运行时系统负责寻找处置异常的代码并执行。 捕获异常:在方法抛出异常之后,运行时系统将转为寻找合适的异常处理器。潜在的异常处理器是异常发生时依次存留在调用栈中的方法的集合。当异常处理器所能处理的异常类型与方法抛出的异常类型相符时,即为合适的异常处理器。运行时系统从发生异常的方法开始,依次调用栈中的方法,直至找到含有合适异常处理器的方法并执行。当运行时系统遍历调用栈而未找到合适的异常处理器,则运行时系统终止。同时,意味着java程序的终止。运行时异常会自动抛出。
3、捕获异常:try catch和finally
3.1 try- catch
try{// 可能会发生异常的程序代码 } catch(Type1 id1) {// 捕获并处置try抛出的异常类型Type1 } catch (Type2 id2) {// 捕获并处置try抛出的异常类型Type2 }
public class ExceptionTest {public static void main(String[] args) {int ret = 0;try {int num1 = 20;int num2 = 0;System.out.println(num1 + "/" +num2 + "=" +"你猜我运行吗?");ret = num1 / num2;} catch (Exception e) {System.out.println("程序异常,除数不能为0");}System.out.println("ret:" + ret);} }
3.2 try catch finally语句
try{// 可能会发生异常的程序代码 } catch (type1 id1) {// 捕获并处理try抛出的异常类型type1 } catch (type2 id2) {// 捕获并处理try抛出的异常类型type2 } finally {// 无论是否发生异常,都会执行的语句块 }
public class ExceptionTest {public static void main(String[] args) {int ret = 0;try {int num1 = 20;int num2 = 0;System.out.println(num1 + "/" +num2 + "=" +"你猜我运行吗?");ret = num1 / num2;} catch (Exception e) {System.out.println("程序异常,除数不能为0");} finally {System.out.println("ret:" + ret);}} }
3.3 小结
try块: 用于捕获异常。其后可接零个或多个catch块,如果没有catch块,则必须跟一个finally块。 catch块:用于处理try捕获到的异常。 finally块:无论是否捕获或处理异常,finally块里的语句都会被执行。当在try块或catch块中遇到return语句时,finally语句将在方法返回之前被执行。在以下4中特殊情况下,finally块不会被执行:1)在finally语句块中发生了异常2)在前面的代码中用了System.exit()退出程序3)程序所在的线程死亡4)关闭CPU执行顺序:1)当try没有捕获到异常时:try语句块语句逐一执行,程序跳过catch语句块,执行finally和其后语句。2)当try捕获到异常时:catch里没有处理此异常的情况,此异常会抛给JVM处理,finally还会执行,但是后边语句不会执行。3)当try捕获到异常,catch里有处理此异常的情况,catch里会依次找到匹配的语句,后边的catch不会执行,而try中出现异常之后的语句也不会执行,之后执行finally语句。
4、抛出异常
4.1 throws抛出异常
throws语句用在方法定义时声明该方法要抛出的异常类型,如果抛出的是Exception异常类型,则该方法被声明为抛出所有的异常。多个异常用逗号隔开。 methodName throws Exception1, Exception2,... ExceptionN{}
4.2 throw抛出异常
throw总是出现在函数体中,用来抛出一个Throwable类型的异常。 程序会在throw语句后立即终止,他后边的语句执行不到,然后在包含它的所有try块从里向外寻找含有与其匹配的catch子句的try块。
5、自定义异常
// 创建自定义异常类 public class MyExceptionTest extends Exception{String message;public MyExceptionTest(String ErrorMessage) {message = ErrorMessage;}@Overridepublic String getMessage() {return message;} }
throw和throws使用 public class ThrowTest {public static void main(String[] args) {int a = 3, b = -1;try {int result = division(a, b);} catch (MyExceptionTest e) {System.out.println(e.getMessage());} catch (ArithmeticException e) {System.out.println("除数不能为0");} catch (Exception e) {System.out.println("程序发生了其他异常");}}static int division(int x, int y) throws MyExceptionTest {if (y < 0) {throw new MyExceptionTest("除数不能是负数");}return x/y;} }
【java基础】java异常,捕获与抛出相关推荐
- oracle异常抛出,ORACLE 存储过程异常捕获并抛出
for tab_name in tables loop execute immediate 'drop table '||tab_name; --此处可能会报错 end loop; 当前情况是,循环表 ...
- ORACLE 存储过程异常捕获并抛出
ORACLE 存储过程异常捕获并抛出 参考文章: (1)ORACLE 存储过程异常捕获并抛出 (2)https://www.cnblogs.com/wdw31210/p/7009731.html 备忘 ...
- Python异常捕获和抛出-对方不想和你说话并向你抛出了一个异常
文章目录 异常信息 捕获异常 多重异常处理 抛出异常 内置异常类型 自定义异常类型 异常信息 Python使用异常类来管理异常信息.当发生异常的时候,程序会抛出一个异常信息,自动根据代码的层次查找异常 ...
- java 异常捕获抛出_JAVA异常处理捕获与抛出原理解析
JAVA 异常 当代码运行出现错误导致程序终止运行或出现错误情况的状况,就是异常.异常不是指语法错误,即不属于编译错误,只有运行的程序才会有异常. 这个时候,JAVA 就提供了优秀的处理方法:异常处理 ...
- java 异常 不抛,java中不捕获或抛出的异常
java中不捕获或抛出的异常 发布时间:2020-06-25 14:29:16 来源:亿速云 阅读:137 作者:Leah 这期内容当中小编将会给大家带来有关java中不捕获或抛出的异常,文章内容丰富 ...
- Java基础知识——异常Throwable和Exception
Java基础知识--异常Throwable和Exception Java设置了异常,旨在鼓励将方法中可能出现的异常告知给使用此方法的程序员(你和我!).当然了,这种方法是比较优雅的,让我们确切的知道是 ...
- 【CXY】JAVA基础 之 异常
讲述: 1.五个关键字 1.try:尝试捕获异常,具体的下面讲述 2.catch:当try捕获到异常了,系统会自动生成一个异常信息,这个异常信息就给catch,形象的说我抓住了这个异常. 3.thro ...
- Java基础:异常机制
最近开始了找工作的面试,在面试过程中,面试官问了关于Java当中的异常处理机制,一直以来,无论写代码还是看书,自己对异常处理这一块就没有很好的重视过,对它的认知也仅仅停留在通过Try-catch去进行 ...
- 【Java基础】异常
Java中什么是Exception? 所有的异常都是通过Throwable衍生出来的.Throwable把错误进 一步划分为 java.lang.Exception 和 java.lang.Error ...
最新文章
- 比特币现金之城——北昆士兰
- margin折叠问题
- Ubuntu下安装Pycharm及相关设置
- 一个实际的sonar代码检查的配置文件
- MySQL修改字符集
- 栈、队列 java代码实现
- LeetCode之快乐数
- linux安装python3和pip3
- 北斗导航 | RTCM 3.3学习(10403.3)
- GeoLite2-City.mmdb 下载方法
- 腾讯成立技术委员会,地位高于 6 大事业群
- pandas分组分析:GroupBy和pandas交叉分析:pivot_table/crosstab【学习记录】
- 一个简单的拼音输入法,实现常用汉字的输入
- Java中的经典算法之冒泡排序(Bubble Sort)
- html5服务器推送消息的各种解决办法,WEB服务器推送消息的各种解决办法
- `算法竞赛题解` LeetCode.6115 统计理想数组的数目
- 怎么把dns服务器改成自动,怎么把dns改成自动获取
- 解决:Uncaught DOMException: Blocked a frame with origin “xxx“ from accessing a cross-origin frame.
- 电子签章怎么操作_电子签章合同是否有效
- 2、 用企业微信卖水果,每月500万GMV,复购翻了1.5倍
热门文章
- 三国志战略版:官渡之战_新阵容解读_孙策
- java 点阵打印机_Linux上点阵打印机的Java打印质量
- 计算机与人类关系的英语作文,计算机的英语作文
- 佳德智诚电商:拼多多货物拒收后要如何退款?
- android设备绑定微软,Android 7.1.1 手机如何登录微软账号
- RAID概念-磁盘阵列
- P5:用统一的NLP框架建模推荐系统问题
- html导航栏圆角,怎么实现css圆角?
- vim etc mysql my.cnf_初始化配置文件的使用:/etc/my.cnf
- 让人们久等了的TCP BBR v2 0快要出炉了