JAVA异常

一、异常的分类

在 Java 中所有异常类型都是内置类 java.lang.Throwable 类的子类,即 Throwable 位于异常类层次结构的顶层。Throwable 类下有两个异常分支 Exception 和 Error。
在这里插入图片描述

Throwable 类是所有异常和错误的超类,下面有 Error 和 Exception 两个子类分别表示错误和异常。

  • Error
    用于指示合理的应用程序不应该试图捕获的严重问题。他们一般由于 Java 运行时由系统显示与运行时系统本身有关的错误,堆栈溢出是这种错误的一例。他们发生在严重故障时,它们在Java程序处理的范畴之外。下面主要讨论Exception。

  • Exception
    是另外一个非常重要的异常子类。它规定的异常是程序本身可以处理的异常。异常和错误的区别是,异常是可以被处理的,而错误是没法处理的。

  • Checked Exception
    可检查的异常,这是编码时非常常用的,所有checked exception都是需要在代码中处理的。它们的发生是可以预测的,正常的一种情况,可以合理的处理。比如IOException,或者一些自定义的异常。除了RuntimeException及其子类以外,都是checked exception。
    举例:IOException、FileNotFoundException

  • Unchecked Exception
    不可检查的异常,运行时异常RuntimeException及其子类及其子类都是无法检查的异常。比如NPE空指针异常,除数为0的算数异常ArithmeticException等等,这种异常是运行时发生,无法预先捕捉处理的。Error也是unchecked exception,也是无法预先处理的。
    举例:NullPointerException、ClassNotFoundException、ArrayIndexOutOfBoundsException

在这里插入图片描述

二、异常的处理

代码中的异常处理其实是对可检查异常的处理。

1、捕获异常
通过try…catch语句块来处理:

e.g.

try
{
   // 程序代码
}catch(Exception1 e1)
{
   //Catch 块1
}
}catch(Exception2 e2)
{
   //Catch 块2
}finally{
	//sth
}

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

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

2、异常传递
另外,也可以在具体位置不处理,直接抛出,通过throws/throw到上层再进行处理,具体的,如果一个方法没有捕获到一个检查性异常,那么该方法必须使用 throws 关键字来声明。throws 关键字放在方法签名的尾部。也可以使用 throw 关键字抛出一个异常,无论它是新实例化的还是刚捕获到的。

下面方法的声明抛出一个 RemoteException 异常:

import java.io.*;
public class className
{
  public void deposit(double amount) throws RemoteException {  //函数上使用throws抛出异常
    // Method implementation
    throw new RemoteException();
  }
  //Remainder of class definition
}

参考博客:https://blog.csdn.net/michaelgo/article/details/82790253

还有这个博客对try catch和finally将的很清晰:https://www.jianshu.com/p/49d2c3975c56

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值