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异常,捕获与抛出相关推荐

  1. oracle异常抛出,ORACLE 存储过程异常捕获并抛出

    for tab_name in tables loop execute immediate 'drop table '||tab_name; --此处可能会报错 end loop; 当前情况是,循环表 ...

  2. ORACLE 存储过程异常捕获并抛出

    ORACLE 存储过程异常捕获并抛出 参考文章: (1)ORACLE 存储过程异常捕获并抛出 (2)https://www.cnblogs.com/wdw31210/p/7009731.html 备忘 ...

  3. Python异常捕获和抛出-对方不想和你说话并向你抛出了一个异常

    文章目录 异常信息 捕获异常 多重异常处理 抛出异常 内置异常类型 自定义异常类型 异常信息 Python使用异常类来管理异常信息.当发生异常的时候,程序会抛出一个异常信息,自动根据代码的层次查找异常 ...

  4. java 异常捕获抛出_JAVA异常处理捕获与抛出原理解析

    JAVA 异常 当代码运行出现错误导致程序终止运行或出现错误情况的状况,就是异常.异常不是指语法错误,即不属于编译错误,只有运行的程序才会有异常. 这个时候,JAVA 就提供了优秀的处理方法:异常处理 ...

  5. java 异常 不抛,java中不捕获或抛出的异常

    java中不捕获或抛出的异常 发布时间:2020-06-25 14:29:16 来源:亿速云 阅读:137 作者:Leah 这期内容当中小编将会给大家带来有关java中不捕获或抛出的异常,文章内容丰富 ...

  6. Java基础知识——异常Throwable和Exception

    Java基础知识--异常Throwable和Exception Java设置了异常,旨在鼓励将方法中可能出现的异常告知给使用此方法的程序员(你和我!).当然了,这种方法是比较优雅的,让我们确切的知道是 ...

  7. 【CXY】JAVA基础 之 异常

    讲述: 1.五个关键字 1.try:尝试捕获异常,具体的下面讲述 2.catch:当try捕获到异常了,系统会自动生成一个异常信息,这个异常信息就给catch,形象的说我抓住了这个异常. 3.thro ...

  8. Java基础:异常机制

    最近开始了找工作的面试,在面试过程中,面试官问了关于Java当中的异常处理机制,一直以来,无论写代码还是看书,自己对异常处理这一块就没有很好的重视过,对它的认知也仅仅停留在通过Try-catch去进行 ...

  9. 【Java基础】异常

    Java中什么是Exception? 所有的异常都是通过Throwable衍生出来的.Throwable把错误进 一步划分为 java.lang.Exception 和 java.lang.Error ...

最新文章

  1. 比特币现金之城——北昆士兰
  2. margin折叠问题
  3. Ubuntu下安装Pycharm及相关设置
  4. 一个实际的sonar代码检查的配置文件
  5. MySQL修改字符集
  6. 栈、队列 java代码实现
  7. LeetCode之快乐数
  8. linux安装python3和pip3
  9. 北斗导航 | RTCM 3.3学习(10403.3)
  10. GeoLite2-City.mmdb 下载方法
  11. 腾讯成立技术委员会,地位高于 6 大事业群
  12. pandas分组分析:GroupBy和pandas交叉分析:pivot_table/crosstab【学习记录】
  13. 一个简单的拼音输入法,实现常用汉字的输入
  14. Java中的经典算法之冒泡排序(Bubble Sort)
  15. html5服务器推送消息的各种解决办法,WEB服务器推送消息的各种解决办法
  16. `算法竞赛题解` LeetCode.6115 统计理想数组的数目
  17. 怎么把dns服务器改成自动,怎么把dns改成自动获取
  18. 解决:Uncaught DOMException: Blocked a frame with origin “xxx“ from accessing a cross-origin frame.
  19. 电子签章怎么操作_电子签章合同是否有效
  20. 2、 用企业微信卖水果,每月500万GMV,复购翻了1.5倍

热门文章

  1. 三国志战略版:官渡之战_新阵容解读_孙策
  2. java 点阵打印机_Linux上点阵打印机的Java打印质量
  3. 计算机与人类关系的英语作文,计算机的英语作文
  4. 佳德智诚电商:拼多多货物拒收后要如何退款?
  5. android设备绑定微软,Android 7.1.1 手机如何登录微软账号
  6. RAID概念-磁盘阵列
  7. P5:用统一的NLP框架建模推荐系统问题
  8. html导航栏圆角,怎么实现css圆角?
  9. vim etc mysql my.cnf_初始化配置文件的使用:/etc/my.cnf
  10. 让人们久等了的TCP BBR v2 0快要出炉了