运行时异常和受检查异常的区别
java程序设计语言提供了三种可抛出结构:受检查时异常(checked exception),运行时(run-time exception)和错误 (error)
java异常:受检查时异常和运行时异常(非编译时异常)
首先介绍一下我们常见的集中描述:受检查时异常,编译异常,非运行时异常 描述可以理解为同一个意思,
运行时异常,非编译时异常,非受检查时异常 等同 // 非受检查的可抛出结构:运行时异常(或者说是非编译时异常)和错误(error)
不要把可抛出结构和可抛出异常混着理解:error和exception类都是继承Throwable类
RunTimeException继承Exception
在决定使用受检的异常或者未受检的异常时,主要的原则是:如果期望调用者能够使当地恢复,对于这种情况就应该使用受检查时异常。
有两种未受检查的可抛出结构:运行时异常和错误,在行为上两者等同的:他们都是补虚药也不应该被捕获的可抛出结构。如果程序抛出未收件的异常或者错误,往往就属于不可恢复的情形,继续执行下去有害无益。如果程序没有捕获到这样的可抛出结构,讲会导致当前线程停止,并出现适当的错误消息。
运行时异常:RunTimeException
受检查异常:Exception
编译时异常要么加throws 要么加try.....catch,不像运行时异常一样可以什么都不加,因为运行时异常只有运行到他的时候才能发现的错误,在编译期跟正常代码一样所以不会强制加这些,但是编译时异常在你编译的时候已经发现了有可能的错误情况会强制你添加异常处理(要么交给虚拟机或者线程,要么自己处理)
各举例子
运行时异常:
package my;import javax.management.RuntimeErrorException;public class test {
public static void main(String[] args) {System.out.println("a");pp();System.out.println("b");
}public static void pp() throws RuntimeException {throw new RuntimeException("sa");}
}
main函数里面可以pp()函数不用try...catch....但是会把错误直接抛给main函数main函数所在线程将会终止,如果main函数也写throws RuntimeException 那么将错误抛给虚拟机,虚拟机终止 ,所以都只输出 a 和异常 sa
修改代码:
package my;import javax.management.RuntimeErrorException;public class test {
public static void main(String[] args) {System.out.println("a");try{pp(); }catch(RunTimeException e){}System.out.println("b");
}public static void pp() throws RuntimeException {throw new RuntimeException("sa");}
}
此时pp()函数的异常已被main函数自己处理,则只会报错下边也会执行
运行结果:
a b 为什么没有sa那时因为已被捕获但是在catch里面没有被输出
受检查异常:
package my;import javax.management.RuntimeErrorException;public class test {public static void main(String[] args)throws Exception {System.out.println("a");pp();System.out.println("b");}public static void pp() throws Exception {throw new Exception("sa");}
}
运行结果:
a sa
修改代码:
package my;import javax.management.RuntimeErrorException;public class test {public static void main(String[] args) {System.out.println("a");try {pp();} catch (Exception e) {}System.out.println("b");}public static void pp() throws Exception {throw new Exception("sa");}
}
运行结果:a b 此时sa不输出是因为在mai函数中已经捕获但是没输出
..
运行时异常和受检查异常的区别相关推荐
- Java检查异常、非检查异常、运行时异常、非运行时异常的区别
Java检查异常.非检查异常.运行时异常.非运行时异常的区别 参考文章: (1)Java检查异常.非检查异常.运行时异常.非运行时异常的区别 (2)https://www.cnblogs.com/ou ...
- Java基础之《受检查异常和不受检查异常》
1.最近重温了<java编程思想(第四版)>的异常章节. Java中的异常分为受检查的异常和不受检查的异常. (1)受检查的异常:这种在编译时被强制检查的异常称为"受检查的异常& ...
- [原创]如果软件在网络磁盘中或移动磁盘中运行时需要解决 exception C0000006 异常问题
[原创]如果软件在网络磁盘中或移动磁盘中运行时需要解决 exception C0000006 异常问题 参考文章: (1)[原创]如果软件在网络磁盘中或移动磁盘中运行时需要解决 exception C ...
- 检查异常和非检查异常 有空你去学一下检查异常和非检查异常
https://blog.csdn.net/weixin_39220472/article/details/81056647 Java检查异常和非检查异常,运行时异常和非运行时异常的区别 灰太狼_cx ...
- 动态库、静态库、运行时库、引入库之间的区别
动态库.静态库.运行时库.引入库之间的区别 杂集.捡对口味的看看吧. 转自:http://lingualspark.blog.sohu.com/94785899.html 运行时库:Unix中一个典型 ...
- java授查 非授查异常_java检查异常与非检查异常
Java的可检测异常和非检测异常泾渭分明.可检测异常经编译器验证,对于声明抛出异常的任何方法,编译器将强制执行处理或声明规则. 非检测异常不遵循处理或声明规则.在产生此类异常时,不一定非要采取任何适当 ...
- java的未检查异常有哪些_Java:检查异常与未检查异常
一.异常的介绍 Throwable 是 Java 中所有错误和异常的超类.Java 虚拟机仅抛出属于此类(或其子类之一)的实例对象,或者是 throw 语句也可以抛出该对象.同样,catch 子句中的 ...
- JVM运行时常量池跟静态常量池区别
2019独角兽企业重金招聘Python工程师标准>>> 最近学习了JVM原理,遇到了运行时常量池的区域定义,他是属于JVM运行时内存模型方法区中的一部分,总体分布如下图: 如下图:整 ...
- java受检异常与运行时异常
正确运用异常处理机制,有助于提高程序的健壮性. 所谓程序的健壮性,就是指程序在多数情况下能够正常运行,返回预期的正确结果:如果偶尔遇到异常情况,程序也能采取周到的解决措施. 受检查异常表示程序可以处理 ...
最新文章
- 多面体的顶点方向以及分解定理以及多胞形凸组合
- View及ViewGroup的事件分发及传递(二)
- 查看linux服务器下接设备,linux下如何查看设备信息_网站服务器运行维护
- 7添加静态路由 hat red_win7系统使用dos命令添加静态路由的操作方法
- [MEGA DEAL]完整的Java编程训练营(94%折扣)
- 最高效的进(线)程间通信机制--eventfd
- python转换为c代码_bash 转换为C代码
- GitHub项目:自然语言处理领域的相关干货整理
- 暴跌1300亿,机械茅也扛不住了
- IDEA离线使用本地maven仓库
- 让数据分析更easy的选择—贪心科技AI商业数据分析课程深度测评
- iOS 下载和播放 M3U8
- Pandas-数据结构-DataFrame(二):DF的属性【形状/shape、行索引/index、列索引/columns、查看值/values、转置/T、head.()、tail.()】
- 图解互联网云脑的前世今生与未来,十幅进化示意图
- python2.7实现简单日记本,兼容windows和linux
- MybatisPlus字段名为mysql保留关键字处理
- Python第一课:print()函数、变量与赋值
- Windows环境导入导出Oracle的DMP包文件
- excel2016打开空白解决方法
- easyUI折叠表格-默认展开操作-去除扩展符号(+)-清除滚轮--实例加效果图