关于java:java学习笔记7异常

异样

在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

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理