Java异常机制


前言

异常是程序在”编译“或者”执行“的过程中可能出现的问题

Java中的异常类均以Throwable为父类,而Throwable又派生出Error类和Exception类这两大子类。


在这里插入图片描述

  • Error类及其子类,代表了JVM自身的异常。这一类异常发生时,无法通过程序来修正。最可靠的方式就是尽快地停止JVM的运行。
  • Exception类及其子类,代表程序运行中发生了意料之外的事情。这些意外的事情可以被Java异常处理机制处理。而Exception类及其子类又可以划分为两大类:
  • RuntimeException及其子类:这一类异常其实是程序设计的错误通过修正程序设计是可以避免的。例如,数组越界异常、数值异常等。
  • 非RuntimeException及其子类:这一类异常的发生通常由外部因素导致,是不可预知和避免的。例如,IO异常、类型寻找异常等

一、处理异常

  • throws声明抛出异常

​ 有些时候我们需要把异常抛出,在适当的地方去处理异常。这个时候就可以使用throws抛出异常,把异常交给方法的调用者处理

如果一个方法没有捕获到一个检查性异常,那么该方法必须使用 throws 关键字来声明。throws 关键字放在方法签名的尾部。

也可以使用 throw 关键字抛出一个异常,无论它是新实例化的还是刚捕获到的。
一个方法可以声明抛出多个异常,多个异常之间用逗号隔开。

import java.io.*;
public class className
{
  public void deposit(double amount) throws RemoteException
  {
    // Method implementation
    throw new RemoteException();
  }
  //Remainder of class definition
}
  • try…catch抓取异常

我们可以对可能出现异常的代码提前做好准备。这个时候就可以使用到try…catch了。

使用 try 和 catch 关键字可以捕获异常。try/catch 代码块放在异常可能发生的地方。

try/catch代码块中的代码称为保护代码,使用 try/catch 的语法如下:

try{
        //可能出现异常的代码
    }catch(异常类型 标识符){
        //对异常做相应的处理
    }

Catch 语句包含要捕获异常类型的声明。当保护代码块中发生一个异常时,try 后面的 catch 块就会被检查。

如果发生的异常包含在 catch 块中,异常会被传递到该 catch 块,这和传递一个参数到方法是一样。

二、自定义异常

  • 所有异常都必须是 Throwable 的子类。
  • 如果希望写一个检查性异常类,则需要继承 Exception 类。
  • 如果你想写一个运行时异常类,那么需要继承 RuntimeException 类。

我们也可以自定义异常类。如果要定义运行时异常只要继承RuntimeException,定义构造方法即可。如果是定义编译时异常改成继承Exception。

//自定义运行时异常
public class MyRuntimeException extends RuntimeException {
    public MyRuntimeException() {
    }

    public MyRuntimeException(String message) {
        super(message);
    }
}
//自定义编译时异常
public class TooSmallException extends Exception {
    public TooSmallException() {
    }

    public TooSmallException(String message) {
        super(message);
    }
}

参考资料
https://zhuanlan.zhihu.com/p/257417149


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值