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

23次阅读

共计 2056 个字符,预计需要花费 6 分钟才能阅读完成。

异样

在 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

正文完
 0