045.JAVA异常处理_抛出异常和自定义异常类


博主的 Github 地址


1. 抛出异常相关关键字

  • throw 关键字
  • throws 关键字

1.1. throw 关键字

1.1.1. 执行语法
  • 运用于方法内部, 抛出一个具体的异常对象. 然后终止方法, 类似 return.

    throw new SomeException("Reason of Exception");
  • 这个抛出的异常可以在 catch 中截取并获取其中的信息.

1.1.2. 应用场景
  • 一般来说, 当一个方法出现异常的时候, 此时用 return 难以定义返回的内容,
    因此可用 throw 返回一个异常对象, 在 catch 代码块中继续向上抛出异常.
    所以必须先在 try 代码块中对该方法进行调用, 才能 catch 到异常.

  • return 是返回一个值, throw 是返回一个错误, 返回给方法的调用者.


1.2. throws 关键字

  • 运用于方法声明, 用于表示当前方法不处理异常, 而是提醒方法调用者来处理异常.

  • 当抛出受检验异常 java.lang.Exception 的时候, 如果该方法不能自行处理,
    则需要将该异常通过 throws 向上抛出给调用者处理.

    //因为除数为0这种异常并非编码人员导致
    //是使用该方法的人所导致, 因此不需要编码人员处理
    public int divide(int num1, int num2) throws Exception{
      if(num2 == 0){
        throw new Exception("除数不能为零!");
      }
      //TODO...
    }
  • 如果每个方法都放弃处理异常, 都直接通过 throws 声明抛出,
    最后异常会抛到 main 方法, 若 main 方法也不进行处理,
    就会继续抛出给 JVM, JVM 底层的处理机制就是打印异常的跟踪栈信息.
    runtime 异常就是默认这种处理方式.

  • throws 可以同时抛出多个异常, 只需要在声明的参数中添加即可.


2. 自定义异常类

2.1. 需求原因

JAVA 中存在不同的异常类, 分别表示某一种具体的异常情况,
但在开发过程中总会有异常情况是 SUN 没有定义的,
此时我们根据自己业务的异常情况来定义异常类.

2.2. 定义方式

在开发过程中根据业务的异常情况进行定义异常类,
有以下两种方式进行异常类定义:

  • 自定义一个受检查的异常类:
    自定义类, 并继承于 java.lang.Exception

  • 自定义一个运行时期的异常类:
    自定义类, 并继承于 java.lang.RuntimeException

2.3. 定义语法

public class LogicException extends Exception{
    //这个UID直接通过系统提示产生
    private static final long serialVersionUID = 1L;

    //可以通过快捷键通过父类去定义构造方法
    //以下列举3个常用的构造方法
    public LogicException(){
        //无参构造器
        super();
    }

    /**
    * @param message 表示当前异常的原因/信息
    * @param cause 当前异常的根本原因
    */

    public LogicException(String message){
        //带一个参数的构造器
        super(message);
    }

    public LogicException(String message, Throwable cause){
        //带两个参数的构造器
        super(message, cause);
    }

}

2.4. 使用方式

try{
    //TODO...
}catch(Exception e){
    throw new LogicException("INFO of Exception:" + e.getMessage(), e);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值