起源: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)异样的解决形式有两种:

  1. 捕捉并解决:在异样的代码左近显示用try/catch进行解决(不合理),运行时零碎捕捉后会查问相应的catch解决块,再catch解决块中对该异样进行解决。
  1. 查看产生异样的办法是否有向上申明异样,有向上申明,向下级查询处理语句,如果没有向上申明,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关键字来手动抛出一个异样,如果手动抛出的异样是一个受检异样,那么必须进行解决

解决形式有两种:

  1. 显示用try/catch进行解决(不合理)
  1. 用throws向外申明(正当的解决办法)

应捕捉和解决那些已知如何解决的异样,而传递那些不知如何解决的异样。

近期热文举荐:

1.1,000+ 道 Java面试题及答案整顿(2022最新版)

2.劲爆!Java 协程要来了。。。

3.Spring Boot 2.x 教程,太全了!

4.别再写满屏的爆爆爆炸类了,试试装璜器模式,这才是优雅的形式!!

5.《Java开发手册(嵩山版)》最新公布,速速下载!

感觉不错,别忘了顺手点赞+转发哦!