乐趣区

关于java:java-异常

一. 异样

  • 概念

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

退出移动版