起源:www.iteye.com/blog/yangshen998-1311682
代码
public class ExceptionTypeTest { public void doSomething()throws ArithmeticException{ System.out.println(); } public static void main(){ ExceptionTypeTest ett = new ExceptionTypeTest(); ett.doSomething(); } }
问题1:下面的程序是否编译通过?并阐明理由。
解答:能编译通过。剖析:依照个别常理,定义doSomething办法是定义了ArithmeticException异样,在main办法外面调用了该办法。
那么该当持续抛出或者捕捉一下。然而ArithmeticException异样是继承RuntimeException运行时异样。
Java外面异样分为两大类:checkedexception(查看异样)和unchecked exception(未查看异样),对于未查看异样也叫RuntimeException(运行时异样),对于运行时异样,java编译器不要求你肯定要把它捕捉或者肯定要持续抛出,然而对checkedexception(查看异样)要求你必须要在办法外面或者捕捉或者持续抛出。
问题2:下面的程序将ArithmeticException改为IOException是否编译通过?并阐明理由。
解答:不能编译通过。剖析:IOException extends Exception 是属于checked exception,必须进行解决,或者必须捕捉或者必须抛出。
总结:java中异样分为两类:checked exception(查看异样)和unchecked exception(未查看异样),对于未查看异样也叫RuntimeException(运行时异样).
对未查看的异样(unchecked exception )的几种解决形式:
- 捕捉
- 持续抛出
- 不解决
对查看的异样(checked exception,除了RuntimeException,其余的异样都是checked exception )的几种解决形式:
- 持续抛出,消极的办法,始终能够抛到java虚拟机来解决
- 用try...catch捕捉
留神,对于查看的异样必须解决,或者必须捕捉或者必须抛出
异样解决(Exception)
1.异样:
程序再运行期间产生的不失常事件,它会打断指令的失常流程。异样都是产生在程序的运行期,编译呈现的问题叫语法错误。
2.异样的解决机制:
1)当程序再运行过程中呈现了异样,JVM主动创立一个该类型的异样对象。同时把这个异样对象交给运行时零碎。(抛出异样)
2)运行时零碎承受到一个异样对象时,它会再产生异样的代码左近查找相应的解决形式。
3)异样的解决形式有两种:
- 捕捉并解决:在异样的代码左近显示用try/catch进行解决(不合理),运行时零碎捕捉后会查问相应的catch解决块,再catch解决块中对该异样进行解决。
- 查看产生异样的办法是否有向上申明异样,有向上申明,向下级查询处理语句,如果没有向上申明,JVM中断程序的运行并解决。用throws向外申明(正当的解决办法)
3.异样的分类:
- java.lang.Throwable
- Error谬误:JVM外部的重大问题。无奈复原。程序人员不必解决。
- Exception异样:一般的问题。通过正当的解决,程序还能够回到失常执行流程。要求编程人员要进行解决。
- RuntimeException:也叫非受检异样(unchecked exception).这类异样是编程人员的逻辑问题。应该承担责任。Java编译器不进行强制要求解决。也就是说,这类异样再程序中,能够进行解决,也能够不解决。
- 非RuntimeException:也叫受检异样(checked exception).这类异样是由一些内部的偶尔因素所引起的。Java编译器强制要求解决。也就是说,程序必须进行对这类异样进行解决。
4.常见异样:
1)非受检的:
NullPointerException,ClassCastException,ArrayIndexsOutOfBoundsException,ArithmeticException(算术异样,除0溢出)
2)受检:
Exception,FileNotFoundException,IOException,SQLException.
5.异样解决的两种形式:
1).显示用try/catch进行解决(不合理)
try{//可能会出现异常的代码段;}catch(异样类型1 变量名){ //解决制订类型的异样//对该类型异样的解决代码段;e.printStackTrace();}catch(){}[finally{//无论是否产生异样都要执行的代码段;//常常用来清理资源}]
2).向上申明:用throws关键字,向外申明(正当的解决办法)
- 申明本办法可能会抛出的异样列表。
- ...办法名(参数列表) throws 异样类型1,异样类型2
- 向上申明是通知本办法的调用者,在应用本办法时,应该对这些异样进行解决。
6.手动抛出一个异样:当程序逻辑不合乎冀望时,要停止前面代码的执行时。
在办法的代码段中,能够应用throw关键字手动抛出一个异样。
留神:如果手动抛出的是受检异样,那么本办法必须进行解决(应该采纳向上申明这个异样);如果手动抛出的是非受检异样,那么能够进行解决,也能够不解决。
7.自定义异样:当须要一些跟特定业务相干的异样信息类时。
能够继承继承Exception来定义一个受检异样。也能够继承自RuntimeException或其子类来定义一个非受检异样。
8.异样概括:
一个图两种解决形式.
9.异样实际:
察看抛出的异样的名字和行号很重要。
应该捕捉和解决那些已知如何解决的异样,传递那些不知如何解决的异样。
尽量减少try语句块的体积。
for(int i=1;i<=1000;i++){try{...}catch(...)}
不合理
尽量减少try-catch语句的嵌套。
在catch块代码段中,应该打印除该异样的堆栈跟踪信息以不便调试。
应用 throws关键字来申明办法可能会抛出的异样
throws能够申明办法可能会抛出一个或多个异样,异样之间用','隔开
- 如果申明的可能会抛出的异样是非受检的,该办法的调用者能够解决也能够不解决。
- 如果申明的可能会抛出的异样是受检的,该办法的调用者必须进行解决。
用throw关键字来手动抛出一个异样,如果手动抛出的异样是一个受检异样,那么必须进行解决
解决形式有两种:
- 显示用try/catch进行解决(不合理)
- 用throws向外申明(正当的解决办法)
应捕捉和解决那些已知如何解决的异样,而传递那些不知如何解决的异样。
近期热文举荐:
1.1,000+ 道 Java面试题及答案整顿(2022最新版)
2.劲爆!Java 协程要来了。。。
3.Spring Boot 2.x 教程,太全了!
4.别再写满屏的爆爆爆炸类了,试试装璜器模式,这才是优雅的形式!!
5.《Java开发手册(嵩山版)》最新公布,速速下载!
感觉不错,别忘了顺手点赞+转发哦!