美文网首页Java
Java异常抛出和捕获

Java异常抛出和捕获

作者: 丿星纟彖彳亍 | 来源:发表于2020-09-17 11:06 被阅读0次

Java中把非正常情况分为两种,异常(Exception)和错误(Error)。


异常.png
  • Error:一般是指与虚拟机相关的问题(虚拟机错误、线程死锁等),这种错误无法回复或不可能捕获
  • Exception:强制性要求用户必须处理
  • RuntimeException:非检查异常,是Exception的子类,由用户选择是否进行处理
  • 自定义异常:继承自Exception类,可以使用父类的大量的方法,也可自己编写方法来处理特定的事件。
    自定义异常示例:
class MyException extends Exception {
    public MyException(String message) {
        super(message);
    }
}

public class DefinedException {
    public static void main(String[] args) {
        try {
            throw new MyException("\n自定义异常类!");
        } catch(MyException e) {
            System.out.println(e);
        }
    }
}

1、 异常抛出

1.1 throws关键字

使用throws将异常进行抛出,throws声明的方法表示该方法不处理异常,而由系统自动将所捕获的异常信息抛给上级调用方法。抛出的异常由上级调用者处理,上级调用者可以进行处理或抛出异常,上级调用者可以抛出更广泛的异常。

如果main方法也不知道如何处理异常就也可以使用throws抛出异常,那么该异常就会交给JVM处理。JVM将打印异常的跟踪栈信息,并中止程序运行。

  • 示例
public class throwsDemo {
    public static void main(String[] args) {

        int[] a = new int[5];
        try {
            setZero(a,10);
        } catch(ArrayIndexOutOfBoundsException ex) {
            System.out.println("数组越界错误!");
            System.out.println("异常:"+ex);
        }
        System.out.println("main()方法结束。");
    }
    private static void setZero(int[] a,int index) throws ArrayIndexOutOfBoundsException {
        a[index] = 0;
    }
}

1.2 throw关键字

除了使用throws抛出异常外也可以使用throw自行抛出异常。throw语句可以单独使用, throw语句抛出的不是异常类,而是一个异常实例,而且每次只能抛出一个异常实例。

  • 示例
 public class ExceptionDemo {
      public static void main(String[] args) {
          int[] a = new int[5];
          try {
              setZero(a,10);
          } catch(ArrayIndexOutOfBoundsException e) {
             System.out.println("异常:"+e);
         }
         System.out.println("main()方法结束!");
     }

     public static void setZero(int[] a,int index) throws ArrayIndexOutOfBoundsException {
         System.out.println("setZero方法开始:");
         try {
             a[index] = 0;
         } catch(ArrayIndexOutOfBoundsException ex) {
             throw ex;
         } finally {
             System.out.println("setZero方法结束。");
         }
     }
}

对应抛出的异常实例,既可以显式捕获该异常,也可完全不理会该异常,把该异常交给该方法调用者处理。

2、 异常捕获

而对于Exception我们乐意使用try...catch进行捕获。try...catch不允许存在单独的try或者catch块,可存在多个catch块。try块中存放业务功能代码,catch块中存放异常处理代码。对于捕获的异常一般可以使用printStackTrace()方法追踪输出至标准错误流。

try...catch后可以添加finally,使用finally可以保证系统退出,finally块中代码绝对执行,捕获异常需要先补货小异常,否则小异常将无法被捕获。

  • 示例
public class DealException {
    public static void main(String args[]) {

        try {  //要检查的程序语句
            int a[] = new int[5];
            a[10] = 7;//出现异常
        } catch(ArrayIndexOutOfBoundsException ex) {//异常发生时的处理语句
            System.out.println("超出数组范围!");
            ex.printStackTrace();//显示异常的堆栈跟踪信息
       } catch(ArithmeticException ex) {//在异常捕捉的过程中要进行两个判断,第一是try程序块是否有异常产生,第二是产生的异常是否和catch()括号内想要捕捉的异常相同。
             //可以在一个try语句后跟上多个异常处理catch语句,来处理多种不同类型的异常。
             System.out.println("算术运算异常");
             ex.printStackTrace();
        } finally{  //这个代码块一定会被执行
            System.out.println("*****");
        }
        System.out.println("异常处理结束!");
    }
}

参考文档:

相关文章

  • 一文读懂 JAVA 异常处理

    JAVA 异常类型结构 Error 和 Exeption 受查异常和非受查异常 异常的抛出与捕获 直接抛出异常 封...

  • Java异常抛出和捕获

    Java中把非正常情况分为两种,异常(Exception)和错误(Error)。 Error:一般是指与虚拟机相关...

  • 03/13牛客刷题总结

    1.java中的异常处理包括声明异常、抛出异常、捕获异常和处理异常四个环节。 throw用于抛出异常 throws...

  • java基础知识精华总结(二)

    1.异常类 JAVA中除了RunTimeException 类,其他异常均须捕获或抛出。 以上就是 java 基础...

  • Dart语言 4 异常和类

    异常 Dart代码可以抛出并捕获异常。如果未捕获异常,则会引发程序终止 与Java相比,Dart的所有异常都是未经...

  • 06 JVM 是如何处理异常的

    在 JAVA 中,异常处理的方式主要是抛出异常和捕获异常。这两大要素共同实现程序控制流的非正常转移。 抛出异常可以...

  • Dart - 异常

    Dart 代码可以抛出和捕获异常。异常表示一些未知的错误情况,如果异常没有捕获则会被抛出从而导致抛出异常的代码终止...

  • flutter【6】dart语言--异常

    异常 和java不同,dart中的异常都是非检查异常,方法可以不声明可能抛出的异常,也不要求捕获任何异常。 dar...

  • php捕获异常和抛出异常

    捕获异常的场景 通常使用在查询数据库,调用第三方接口,支付,队列,容易出现问题等场景下,出现问题时方便确认问题。 ...

  • 异常2||捕获和抛出异常

    package expection; public class Test {public static void ...

网友评论

    本文标题:Java异常抛出和捕获

    本文链接:https://www.haomeiwen.com/subject/naflyktx.html