王海鱼 发表于 2022-8-27 16:36:35

java异常处理

捕获和抛出异常

异常处理的五大关键字:try,catch,finally,throw,throws

目录

[*]捕获和抛出异常

[*]1.捕获异常
[*]2.抛出异常
[*]throw与throws
[*]3.两种处理方式的区别
[*]4.自定义异常

[*]如何自定义异常:
[*]自定义异常在实际应用中的经验总结



1.捕获异常

用法:
​                                try{可能会出现异常的代码
​                                 } catch(Exception e)//catch后面跟想要捕获的异常类型
​                                                                        {异常的处理逻辑}
idea快捷键:ctrl+alt+t
eclipse快捷键alt+shift+z
代码示例:
public class Test1 {
    public static void main(String[] args) {
      int a=1;
      int b=0;
      
      try {
            //快捷键ctrl+ait+t选择try
            System.out.println(a/b);
      } catch (ArithmeticException e) {
            System.out.println("算术异常");;
      } finally {
            System.out.println("无论程序是否捕获到异常都会被执行");
      }
    }
}输出:
算术异常
无论程序是否捕获到异常都会被执行2.抛出异常

​                通过throws关键字声明抛出这个异常,交给方法的调用者去处理,在这里main方法的调用者是JVM,即交给JVM去处理。
throw与throws

throws:   跟在方法声明后面,后面跟的是异常类名
throw:    用在方法体内,后面跟的是异常类对象名
throws:   throws表示有出现异常的可能性,并不一定出现这些异常
throw:    throw则是抛出了异常,执行throw一定出现了某种异常
throws:   表示抛出异常,由该方法的调用者来处理
throw:    表示抛出异常,由该方法体内的语句来处理
throws:后面可以跟多个异常。用逗号(,)隔开
throw:只能抛出一个异常对象名
代码示例:
public class Demo02 {
    //throws后面可以跟多个异常。用逗号(,)隔开
    public static void main(String[] args) throws Exception {
            Demo02 d=new Demo02();
            d.division(5.0,0.0);
    }
    public void division(double x,double y) throws ArithmeticException{//throws后面跟异常类
      double num=x/y;
      if (y==0) {
            throw new ArithmeticException("算术异常");//后面跟异常对象名
      } else {
            System.out.println(num);

      }
    }

    }输出:
Exception in thread "main" java.lang.ArithmeticException: 算术异常
        at com.exception.Demo02.division(Demo02.java:11)
        at com.exception.Demo02.main(Demo02.java:6)可以看到当if成立时,会抛出异常,也就是throw才会执行。而当没异常的时候则不会执行!
3.两种处理方式的区别


[*]抛出异常:如果程序出现了异常,没有办法将具体的异常打印出来,不做任何处理;程序中断。
[*]捕获异常:如果程序出现了异常,就能够详细的打印是什么原因导致了异常并且能够做出相应的处理,能够显示详细的日志,程序不中断。

4.自定义异常

在java中除了,java中给我们定义的异常之外,我们还可以自定义异常。
如何自定义异常:

在进行程序开发的过程中,自定义异常遵循以下四个步骤:
1.首先创建自定义异常类,语法格式:自定义异常类名 extends Exception。
2.在方法中通过关键字throw抛出异常对象。
3.若是在当前抛出异常的方法中处理异常,可以用try-catch语句捕获并处理;若不是,在方法的声明处通过关键字throws指明要抛出给方法调用的异常。
4.在出现异常方法的调用中捕获并理异常。
eg:定义一个大于10就会从抛出的异常
//自定义异常类
public class CustomizeException extends Exception{
    private int a;

    public CustomizeException(int a) {
      this.a = a;
    }
    //toString:异常的打印信息
    @Override
    public String toString() {
      return "CustomizeException{"+a+'}';
    }
}然后书写一个测试类,里面放可能会存在异常的方法
package com.exception;

public class TestCustomizeException {
    //定义一个可能会存在异常的方法
    static void test(int a) throws CustomizeException {
      System.out.println("传递的参数为"+a);
      if (a>10){
            throw new CustomizeException(a);
      }
      System.out.println("ok");
    }

    public static void main(String[] args) {
      try {
            test(11);
      } catch (CustomizeException e) {
            System.out.println("CustomizeException=>"+e);;
      }
    }
}输出:
传递的参数为11
CustomizeException=>CustomizeException{11}这就是自定义异常
自定义异常在实际应用中的经验总结


[*]在处理运行时异常的时候,采用逻辑去合理规避同同时辅助try-catch处理
[*]在多重catch块后面,可以加一个catch(Exception)来处理可能会被遗漏的异常
[*]对于不确定的代码,也可以加上try-catch处理潜在的异常
[*]尽量去处理异常,而不是只调用PrintStackTrace()去打印输出
[*]具体如何处理异常,要根据不同的业务需求和异常类型去决定
[*]尽量添加finally语句块去释放占用的资源

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: java异常处理