起源: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 开发手册(嵩山版)》最新公布,速速下载!
感觉不错,别忘了顺手点赞 + 转发哦!