【Java 基础】异常与处理




前言

该文章总结了Java中的异常与处理。

一、概念

程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常

简单来说,异常就是不正常。

二、Java中异常结构

Throwable 类是 Java 语言中所有错误或异常的超类

如图所示,在Java中,Throwable 类是 Java 语言中所有错误或异常的超类。

同时他也提供了很多方法,用于查看堆栈信息。

1.错误类(Error)

Error 是 Throwable 的子类,用于指示合理的应用程序不应该试图捕获的严重问题。大多数这样的错误都是异常条件。虽然 ThreadDeath 错误是一个“正规”的条件,但它也是 Error 的子类,因为大多数应用程序都不应该试图捕获它。

出现以Error结尾的就都是错误(除唯一的ThreadDeath外),如:IOError(严重的 I/O 错误)

出现Error结尾的严重错误,我们一般我们获取不了,也处理不了,所以只要简单了解即可。

2.异常类(Exception)

Exception 类及其子类是 Throwable 的一种形式,它指出了合理的应用程序想要捕获的条件。

出现以Exception结尾的异常,都是异常类。这个异常是我们可以处理的。

Exception分为两种, 运行时异常非运行时异常

2.1 运行时异常(RuntimeException)

RuntimeException 是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类。

运行时异常的子类不需要捕捉异常,只不过在编译时没有报错。但是当运行时发生异常时,还是会出现异常信息。可以进行try-catch捕获或throws抛出。

如下代码:编译期没有报错,但是运行时会发生空指针异常。

    public static void main(String[] args){
        String s = null;
        System.out.println(s.length());
    }

其他常见运行时异常:

异常 描述
ArithmeticException 当出现异常的运算条件时,抛出此异常。
ArrayStoreException 试图将错误类型的对象存储到一个对象数组时抛出的异常。
ClassCastException 当试图将对象强制转换为不是实例的子类时,抛出该异常。
IllegalArgumentException 抛出的异常表明向方法传递了一个不合法或不正确的参数。
IndexOutOfBoundsException 指示某排序索引(例如对数组、字符串或向量的排序)超出范围时抛出。
NullPointerException 当应用程序试图在需要对象的地方使用 null 时,抛出该异常。
2.1 非运行时异常

Exception类下,除了运行时异常(RuntimeException),其他异常都是非运行时异常,需要手动try-catch捕获或throws抛出,不然编译器会报错。

如下代码:编译期会报错,需要手动try-catch或throws抛出。

    public static void main(String[] args){
        File file = new File("1");
        boolean newFile = file.createNewFile();
    }

其他常见非运行时异常:

异常 描述
ClassNotFoundException 当应用程序试图使用以下方法通过字符串名加载类时,抛出该异常:
NoSuchFieldException 类不包含指定名称的字段时产生的信号。
NoSuchMethodException 无法找到某一特定方法时,抛出该异常。
IOException 当发生某种 I/O 异常时,抛出此异常。
FileNotFoundException 当试图打开指定路径名表示的文件失败时,抛出此异常。

三、Java中的异常处理

1.捕获(try-catch)

try-catch捕获格式:
如果有多个异常,就多方几个catch语句即可

try{
    可能发生异常的代码
}catch(捕获的异常类型  变量名){
    处理异常的代码

捕获空指针:

    public static void main(String[] args){
        try{
            String s = null;
            System.out.println(s.length());
        } catch (NullPointerException e) {
            System.out.println("空指针异常了");
            e.printStackTrace();
        }
    }

2.抛出(throws)

throws

格式:

throws 异常类型

实例:在方法上抛出,抛出IOException异常。

    public static void main(String[] args) throws IOException {
        File file = new File("1");
        boolean newFile = file.createNewFile();
    } 
throw

格式:创建并抛出一个异常。

方法() throws 抛出的异常类型{
    if(异常发生){
        throw new 异常类型();
    }

实例:

    public static void main(String[] args) throws Exception {
        if (true) {
            throw new Exception("发生了异常");
        }
    }

相关

【Java 基础】目录

发布了109 篇原创文章 · 获赞 127 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_44034328/article/details/104106703