一.异样
概念
程序在执行过程中,呈现的非正常的状况,最终会导致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不能独自应用。