Java异常显示声明和不显示声明区别
来源:互联网 发布:以色列首都 知乎 编辑:程序博客网 时间:2024/06/05 14:13
从根部Throwable开始分为两大类:Error和Exception。Error是程序无法处理的错误,比如OutOfMemoryError、ThreadDeath等。这些异常发生时,Java虚拟机(JVM)一般会选择线程终止。Exception是程序本身可以处理的异常,这种异常分两大类:非运行时异常(发生在编译阶段,又称checkException)和运行时异常(发生在程序运行过程中,又叫uncheckException)。非运行时异常一般就是指一些没有遵守Java语言规范的代码,容易看的出来,并且容易解决的异常,运行时异常是那些在程序运行过程中产生的异常,具有不确定性,如空指针异常等,造成空指针的原因很多,所以运行时异常具有不确定性,往往难以排查,还有就是程序中存在的逻辑错误,光从一段代码中看不出问题,需要纵观全局才能发现的错误,也会造成运行时异常。
1、如果我在程序中声明了某个异常,则抛出异常的时候,不会显示出处,直接抛出。2、如果我没有在程序中声明,那么程序会同时抛出异常的出处。异常出处为上层调用者所声明异常,如果上层调用者没有声明会追溯到main。这是为什么?还有,当我没有显式声明的时候,系统会怎么办?
当前方法如果声明了相应的异常处理器则直接抛出,但是如果没有声明,则会找到它的调用者,如果调用者也没有做相应的处理,则会一直往前找,直到找到main方法,最后抛出异常!此处我们简单总结下异常处理的过程:1、在可能出错的方法加上try/catch块语句,来调用异常处理器。2、当异常发生时,直接跳到相应的异常处理器catch中,如果有则抛出异常,执行该catch块中的语句,如果没有,则找到它的调用者,直到main方法。3、如果有finally块,则执行finally块中的语句。
注意:
1、一个try可对应多个catch。2、有try必须至少有一个catch或者finally。3、finally块不是必须的,可有可无,如何有finally块即使catch中有return,执行完return之后也会执行finally块。4、一般情况下,当异常发生时,会执行catch块中的语句,特殊情况:当main方法中抛出异常时,如果程序声明了该异常处理器,则执行相应的catch块中的语句,如果程序没有声明相应的异常处理器,则不执行catch块中的语句,直接抛出异常!那么,这个异常来源于哪儿?既然main中有try/catch语句(虽然不是对应的异常处理器),为什么没有抛出,说明main方法中的try/catch块根本就没有捕捉到异常,那么系统怎么处理?其实是这样的,这种情况下,异常被直接丢给JVM,而JVM的处理方式就是:直接中断你的程序!就是这么简单。
- Java异常显示声明和不显示声明区别
- java面向对象-异常概述-异常声明throws-多异常处理-throw和throws区别
- 【声明】有关于博文中图片不显示问题的声明
- Java中定义和声明的区别
- explicit显示声明一个函数
- 声明和定义区别
- 声明和定义区别
- 声明和定义区别
- java类中显示声明字段和方法的极限个数
- Java中抛出RuntimeException为什么不用显示声明
- js中var声明和不加var的区别
- 关于Jquery中声明变量 加$和不加$区别
- 异常声明
- Java声明和定义
- c#自定义类型的转换方式operator,以及implicit(隐式)和explicit (显示)声明的区别
- c#自定义类型的转换方式operator,以及implicit(隐式)和explicit (显示)声明的区别
- javascript var声明变量与不声明的区别
- JAVA之旅(十)——异常的概述,Try-Catch,异常声明Throws,多异常处理,自定义异常,Throw和Throws的区别
- Java多线程(待完善)
- Python 序列
- MSM897x camera flow
- cocos2d-x中缓存总结
- struts2的s:iterator嵌套遍历
- Java异常显示声明和不显示声明区别
- UVa 1401 - Remember the Word(Trie + DP)
- linux下文件和权限的详解
- Linux:C/Socket多路复用select(转)
- linux 系统编程-学习笔记1
- 乡土中国
- MySql常用命令收集(持续更新)
- linux中开启samba服务实现文件共享
- 微信密码忘了怎么办