异样

在Java等面向对象的编程语言中,异样自身是一个类
产生异样就是创立异样对象并抛出了一个异样对象。
Java中解决形式为中断解决

异样的产生过程:

二、异样的解决

java解决异样的五个关键字:try, catch, finally, throw, throws

2.1抛出异样throw

作用:

应用throw关键字在指定的办法中抛出指定的异样

应用格局:

 throw new xxxException("异样产生的起因");

留神:
1.throw关键字必须写在办法的外部
2.throw关键字后边new的对象必须是Exception或者Exception的子类
3.throw关键字抛出指定的异样对象,就必须解决这个异样对象

throw关键字后边创立的是RuntimeException或者RuntimeException的子类对象,咱们能够不解决,默认交给JVM解决throw关键字后边创立的是编译异样,咱们就必须解决这个异样,要么throws,要么try...catch...

2.2申明异样throws

作用:
当办法外部抛出异样对象的时候,那么咱们就必须解决这个异样对象,
能够应用throws关键字解决异样对象,把锅抛给JVM解决 --> 中断解决

应用格局:

修饰符 返回值类型 办法名(参数列表) throws AAAException{    throw new AAAException("产生起因");}

留神:

1.throws必须写在办法申明处

2.throws前面申明的异样必须是Exception或者Exception的子类

3.办法外部如果抛出多个异样,throws前面也必须申明多个异样,
如果抛出的多个异样对象有父子类关系,间接申明父类

4.调用了一个申明异样的办法,就必须解决申明异样,
要么持续应用throws申明抛出,最终交给JVM
要么try...catch...本人解决异样

2.4捕捉异样try...catch

格局:

try {    可能产生异样的代码}catch(定义异样的变量,用来接管try中抛出的异样对象) {    异样的解决逻辑,之后是如何解决异样对象    个别工作中,会把异样的信息记录到一个日志中}...catch(异样类名 变量名) {}

留神:
1.能够抛出多个异样对象,能够应用多个catch
2.try中产生异样,执行catch,之后继续执行try...catch之后的代码
如果try中没有产生异样,就不会进入catch,执行完try间接执行后续代码

try...catch与throw的区别:
try...catch能够执行后续程序
throw则是中断程序

2.5finally代码块

肯定要执行的代码
无论异样产生不产生,都须要执行
而且呈现程序跳转,局部代码会执行不到

格局:

    try{        ...    }catch() {        ...    }    ...    catch() {        }finally {        //无论是否异样均会执行的代码    }

留神:
1.finally必须和try一起应用
2.finally个别用于资源开释,程序最初均要资源开释

三、异样注意事项

1.多个异样别离解决


还能够执行后续代码

2.多个异样,一次捕捉(try),屡次解决(catch)

catch里边定义的异样变量,如果有父子类关系,那么子类的异样变量必须写在上边,否则报错(与多态常识相干)


对于try外面产生的异样,他会依据产生的异样和catch外面的进行匹配(怎么匹配,依照catch块从上往下匹配),
当它匹配某一个catch块的时候,他就间接进入到这个catch块外面去了,前面在再有catch块的话,它不做任何解决,间接跳过去,全副疏忽掉。

3.多个异样一次捕捉一次解决


catch中定义的变量能够接管try中的所有异样对象。

运行时异样被抛能够不捕捉也不解决,给JVM(中断程序)

4、finally中最好不要蕴含return,否则程序会提前退出,返回值不是try或catch中保留的返回值。

有return语句的话,永远返回finally中的后果

 public static int demo4() {        int i = 0;        try {            return i;        } finally {            i = 12;            System.out.println("finally trumps return.");            return i;        }    }    //输入后果    finally trumps return.    12  

5.子父类异样

①如果父类抛出多个异样,子类重写父类办法时,抛出
和父类雷同的异样
或者父类异样的子类
或者不抛出异样
②父类办法没有抛出异样,子类重写时也不能够抛出异样,只能捕捉解决,不能申明抛出

(父类异样什么样,子类异样就什么样)

经典面试题!!!!!!

    public static int demo5() {        try {            return printX();        }        finally {            System.out.println("finally trumps return... sort of");        }    }    public static int printX() {        System.out.println("X");        return 0;    }        //输入后果    X     finally trumps return... sort of     0