关于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不能独自应用。

评论

发表回复

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

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