白骑士的Java教学Java核心类库 4.3 异常处理机制

        欢迎来到Java核心类库的学习篇!在前面的章节中,我们探讨了Java中字符串处理和常用数据结构的相关知识。在本节中,我们将深入了解Java的异常处理机制。异常处理是Java编程中非常重要的一部分,它能够帮助我们捕获和处理程序运行过程中出现的错误,从而提高程序的健壮性和稳定性。通过学习异常处理机制,你将掌握如何编写更为健壮的Java程序,预防和解决运行时错误。

什么是异常

        在Java中,异常是程序在运行过程中出现的非正常情况,它们通常是由程序错误或不当操作引起的。Java使用异常对象来表示和处理这些异常情况。当异常发生时,Java会生成一个异常对象,并且将其提交到Java运行时系统,运行时系统寻找适当的处理器来处理该异常。

异常的分类

        Java异常分为两类:检查异常(Checked Exceptions)和运行时异常(Runtime Exceptions)。

检查异常

        检查异常是程序编译时必须处理的异常,通常是由外部因素引起的,如文件未找到、网络连接失败等。这些异常必须通过‘try-catch‘块显式处理,或者通过‘throws‘关键字声明抛出。

        示例:

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;


public class Main {
    public static void main(String[] args) {
        try {
            File file = new File("example.txt");
            Scanner scanner = new Scanner(file);
            while (scanner.hasNextLine()) {
                System.out.println(scanner.nextLine());
            }

            scanner.close();
        } 

        catch (FileNotFoundException e) {
            System.out.println("File not found: " + e.getMessage());
        }
    }
}

运行时异常

        运行时异常是在程序运行时发生的异常,通常是由程序逻辑错误引起的,如数组下标越界、空指针异常等。运行时异常是非强制性的,编译时不要求显式处理,但在运行时可能会导致程序崩溃。

        示例:

public class Main {
    public static void main(String[] args) {
        int[] array = {1, 2, 3};

        try {
            System.out.println(array[3]);
        } 

        catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("Array index out of bounds: " + e.getMessage());
        }
    }
}

异常的层次结构

        Java中的异常层次结构从‘Throwable‘类开始,分为‘Error‘和‘Exception‘两个分支。‘Exception‘又进一步分为检查异常和运行时异常。

java.lang.Throwable
    |-java.lang.Error
    |-java.lang.Exception
        |-java.lang.RuntimeException
  • ‘Throwable‘:所有异常和错误的超类。
  • ‘Error‘:严重的错误,通常是系统级别的问题,如内存不足、栈溢出等,程序一般无法恢复。
  • ‘Exception‘:程序中可处理的异常。
  • ‘RuntimeException‘:未检查异常,是‘Exception‘的子类。

使用try-catch块处理异常

        ‘try-catch‘块是Java中处理异常的基本结构。‘try‘块包含可能引发异常的代码,‘catch‘块用于捕获并处理异常。

        示例:

public class Main {
    public static void main(String[] args) {
        try {
            int result = 10 / 0;
        } 

        catch (ArithmeticException e) {
            System.out.println("ArithmeticException: " + e.getMessage());
        }
    }
}

多个catch块

        一个‘try‘块可以有多个‘catch‘块,分别捕获不同类型的异常。

        示例:

public class Main {
    public static void main(String[] args) {
        try {
            int[] array = new int[5];
            array[10] = 50;
        } 

        catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("ArrayIndexOutOfBoundsException: " + e.getMessage());
        } 

        catch (Exception e) {
            System.out.println("Exception: " + e.getMessage());
        }
    }
}

使用finally块

        ‘finally‘块用于在‘try-catch‘结构中执行一些清理操作,如关闭资源。无论是否发生异常,‘finally‘块中的代码都会执行。

        示例:

public class Main {
    public static void main(String[] args) {
        try {
            int result = 10 / 0;
        } 

        catch (ArithmeticException e) {
            System.out.println("ArithmeticException: " + e.getMessage());
        } 

        finally {
            System.out.println("This is the finally block.");
        }
    }
}

        输出:

ArithmeticException: / by zero
This is the finally block.

使用throws关键字

        ‘throws‘关键字用于在方法声明中指明该方法可能抛出的异常类型。调用该方法的代码必须处理这些异常,或者进一步声明抛出。

        示例:

public class Main {
    public static void main(String[] args) {
        try {
            readFile();
        } 

        catch (FileNotFoundException e) {
            System.out.println("File not found: " + e.getMessage());
        }
    }

    public static void readFile() throws FileNotFoundException {
        File file = new File("example.txt");
        Scanner scanner = new Scanner(file);
        while (scanner.hasNextLine()) {
            System.out.println(scanner.nextLine());
        }
        scanner.close();
    }
}

自定义异常

        Java允许我们自定义异常类,通过继承‘Exception‘类或其子类来实现。

        示例:

public class Main {
    public static void main(String[] args) {
        try {
            validateAge(15);
        } 

        catch (InvalidAgeException e) {
            System.out.println("Invalid age: " + e.getMessage());
        }
    }

    public static void validateAge(int age) throws InvalidAgeException {
        if (age < 18) {
            throw new InvalidAgeException("Age must be 18 or older.");
        }
    }
}


class InvalidAgeException extends Exception {
    public InvalidAgeException(String message) {
        super(message);
    }
}

总结

        在本篇博客中,我们详细介绍了Java的异常处理机制。从异常的基本概念、分类、层次结构,到‘try-catch‘块、‘finally‘块、‘throws‘关键字的使用,以及自定义异常的创建,通过这些知识的学习,你将能够编写更为健壮和可靠的Java程序。异常处理是Java编程中非常重要的部分,掌握这些技巧能够帮助你更好地处理程序运行过程中出现的各种错误和异常情况。在接下来的学习中,我们将继续探讨Java核心类库中的其他重要内容,帮助你全面掌握Java编程技能。祝你学习愉快,不断进步!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白骑士所长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值