共计 2146 个字符,预计需要花费 6 分钟才能阅读完成。
一. 异样
-
概念
程序在执行过程中,呈现的非正常的状况,最终会导致 JVM 的不失常进行。谬误并不是异样,而是脱离程序员管制的问题。
-
档次
Exception 类是所有异样类的父亲。
Java 程序通常不捕捉谬误。谬误个别产生在重大故障时,它们在 Java 程序处理的领域之外。
Exception 类和 Error 是 Throwable 类的子类:
Error:严重错误,无奈通过解决的谬误,只能当时防止, 好比绝症。
Exception: 异样,异样产生后程序员能够通过代码的形式纠正,使程序持续运行,是必须要解决的。 -
罕用办法
1.public void printStackTrace():打印谬误输入流,就是打印异样的详细信息。
2.public String getMessage():返回对于产生的异样的详细信息,就是提醒谬误起因。 -
异样分类
编译期间异样 :checked 异样。在编译期间, 就会查看, 如果没有解决异样, 则编译失败。
运行期间异样:runtime 异样。运行时异样是可能被程序员防止的异样,,运行时异样能够在编译时被疏忽。 -
捕捉异样
应用 try 和 catch 关键字能够捕捉异样。try/catch 代码块里放可能异样的代码。它们不能独自应用。
语法:try{编写可能会出现异常的代码}catch(异样类型 e){解决异样的代码}
演示:
try{int i =1 /0;}catch(ArithmeticException e){System.out.println("兄弟,零不能 为被除数"); } System.out.println("路过");
运行输入后果:
兄弟,零不能为被除数 路过
-
多重捕捉块
一个 try 代码块前面追随多个 catch 代码块的状况就叫多重捕捉。
语法:try{编写可能会出现异常的代码}catch(异样类型 e1){解决异样的代码}catch(异样类型 e2){解决异样的代码}catch(异样类型 e3){解决异样的代码}
释:
1. 能够在 try 语句前面加无数个 catch 块。
2. 如果 try 代码中产生异样,异样被抛给第一个 catch 块。
3. 如果抛出异样的数据类型与相仿的异样类型相匹配,它在这里就会被捕捉。
4. 如果不匹配,它会被传递给第二个 catch 块。
5. 如此,直到异样被捕捉或者通过所有的 catch 块。 -
throw/throws
如果须要在程序中自行抛出异样,就是将这个异样对象告知给调用者,则应应用 throw 语句
格局:throw new 异样类名(参数);
能够应用 throw 语句实现如下代码:
public class ThrowDemo {public static void main(String[] args) {int[] arr = {2,4,52,2}; int index = 4; int element = getElement(arr, index); System.out.println(element); System.out.println("了结"); } public static int getElement(int[] arr,int index){【判断索引是否越界】if(index<0 || index>arr.length-1){【判断条件如果满足,办法曾经无奈持续运算。会将异样告知给调用者。此时就用异样来解决。】throw new ArrayIndexOutOfBoundsException("越界了~"); } int element = arr[index]; return element; }
指明此办法执行时,可能会抛出的异样类型。如果一个办法没有捕捉到一个编译期间异样,那么该办法必须应用 throws 关键字来申明并让调用者去解决。throws 要放在办法的尾部。
格局:修饰符 返回值类型 办法名(参数) throws 异样类名 1, 异样类名 2…{}
演示:
public class ThrowsDemo {public static void main(String[] args) throws FileNotFoundException {read("a.txt"); }【此性能有问题会报告给调用者,反之】public static void read(String path) throws FileNotFoundException {if (!path.equals("a.txt")) {throw new FileNotFoundException("木有"); } } }
注:
要是该办法可能有多种异常情况产生,那么在 throws 前面能够写多个异样类,就用逗号隔开。 -
finally
1.finally要创立在 catch 代码块前面执行的代码块。
2. 无论是否产生何事,finally 代码块中的代码总会被执行。
演示:try{int i =1 /0;}catch(ArithmeticException e){throw new ArithmeticException("兄弟,零不能为被除数"); }finally{System.out.println("我不论,我就要执行。"); } System.out.println("路过");
运行输入后果:
【报错异样】Exception in thread "main" java.lang.ArithmeticException: 兄弟,零不能为被除数 我不论,我就要执行。
注:
finally 不能独自应用。