编程自学指南:java程序设计开发,Java 中 throw 和 throws 详解,区分 throw 和 throws 的作用,使用 throws 声明方法可能抛出的异常

Java 中 throw 和 throws 详解课件

一、课程信息

学习目标

  1. 清晰区分 throw 和 throws 的作用。
  2. 掌握 throw 语句手动抛出异常的方法。
  3. 学会使用 throws 声明方法可能抛出的异常。
  4. 能够在实际编程中正确运用 throw 和 throws 处理异常。

二、课程导入

生活场景引入

  • 想象你是一名厨师,在做菜过程中发现食材变质了。你有两个选择:一是自己处理,比如扔掉变质食材并重新准备;二是把这个问题告知餐厅经理,让经理来处理。在 Java 里,throw 就像是厨师自己发现问题并抛出问题,而 throws 则如同厨师告知经理这个问题可能会出现。
  • 提问学生生活中类似的问题传递场景,引导他们思考在编程里如何处理异常情况。

三、异常处理基础回顾

异常定义

异常是程序运行过程中出现的不正常情况,会干扰程序的正常执行流程。

异常分类

  • 受检查异常(Checked Exception):编译器会检查这类异常,要求程序必须处理,如 IOException
  • 运行时异常(Runtime Exception):编译器不会强制要求处理,如 NullPointerException

异常处理机制

  • try-catch 块:用于捕获和处理异常。
  • finally 块:无论是否发生异常,其中的代码都会执行,常用于资源释放。

示例代码:

public class ExceptionReview {
    public static void main(String[] args) {
        try {
            int result = 10 / 0; // 会抛出 ArithmeticException
        } catch (ArithmeticException e) {
            System.out.println("捕获到算术异常:" + e.getMessage());
        } finally {
            System.out.println("finally 块执行");
        }
    }
}

四、throw 关键字详解

定义

throw 用于在方法内部手动抛出一个异常对象。

语法

throw new ExceptionType("异常信息");

示例代码

public class ThrowExample {
    public static void checkAge(int age) {
        if (age < 0) {
            throw new IllegalArgumentException("年龄不能为负数");
        }
        System.out.println("年龄合法:" + age);
    }

    public static void main(String[] args) {
        try {
            checkAge(-5);
        } catch (IllegalArgumentException e) {
            System.out.println("捕获到异常:" + e.getMessage());
        }
    }
}

代码解释

  • 在 checkAge 方法中,当传入的年龄为负数时,使用 throw 手动抛出一个 IllegalArgumentException 异常。
  • 在 main 方法中,使用 try-catch 块捕获并处理该异常。

注意事项

  • throw 后面必须跟一个异常对象。
  • 抛出异常后,程序会立即停止当前方法的执行,跳转到相应的异常处理代码处。

五、throws 关键字详解

定义

throws 用于在方法声明中指定该方法可能抛出的异常类型。

语法

public void methodName() throws ExceptionType1, ExceptionType2 {
    // 方法体
}

示例代码

import java.io.FileReader;
import java.io.IOException;

public class ThrowsExample {
    public static void readFile() throws IOException {
        FileReader reader = new FileReader("nonexistent.txt");
        // 读取文件操作
        reader.close();
    }

    public static void main(String[] args) {
        try {
            readFile();
        } catch (IOException e) {
            System.out.println("捕获到文件读取异常:" + e.getMessage());
        }
    }
}

代码解释

  • readFile 方法使用 throws 声明可能会抛出 IOException
  • 在 main 方法中调用 readFile 方法时,需要使用 try-catch 块捕获并处理该异常。

注意事项

  • throws 后面可以跟多个异常类型,用逗号分隔。
  • 当方法抛出受检查异常时,调用该方法的代码必须处理这些异常,要么使用 try-catch 块捕获,要么继续使用 throws 声明抛出。

六、throw 和 throws 的综合应用

示例代码

import java.io.FileReader;
import java.io.IOException;

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

public class CombinedExample {
    public static void processFile() throws CustomException {
        try {
            FileReader reader = new FileReader("nonexistent.txt");
            // 模拟文件处理
            if (Math.random() < 0.5) {
                throw new CustomException("文件处理过程中出现自定义异常");
            }
            reader.close();
        } catch (IOException e) {
            throw new CustomException("文件读取异常:" + e.getMessage());
        }
    }

    public static void main(String[] args) {
        try {
            processFile();
        } catch (CustomException e) {
            System.out.println("捕获到自定义异常:" + e.getMessage());
        }
    }
}

代码解释

  • 定义了一个自定义异常 CustomException
  • processFile 方法使用 throws 声明可能会抛出 CustomException
  • 在 processFile 方法内部,使用 throw 手动抛出 CustomException,既可以在满足特定条件时抛出,也可以在捕获到其他异常后包装成自定义异常抛出。

实际应用场景

  • 数据验证:在数据输入时,使用 throw 抛出异常提示数据不合法。
  • 资源操作:在文件读取、网络连接等操作中,使用 throws 声明可能出现的异常。

七、课堂练习

练习一

编写一个方法 divide,用于计算两个整数的商。如果除数为 0,使用 throw 抛出 ArithmeticException

练习二

编写一个方法 openFile,用于打开指定文件。使用 throws 声明可能会抛出的 IOException,并在 main 方法中调用该方法并处理异常。

八、课程总结

知识回顾

  • throw 用于手动抛出异常,在方法内部使用。
  • throws 用于声明方法可能抛出的异常,在方法声明处使用。

常见问题解答

  • 解答学生在课堂练习和学习过程中遇到的问题。

口诀总结

  • “throw 抛出异常忙,方法里面显锋芒。throws 声明在前方,调用之处要妥当。异常处理不慌张,程序稳定有保障。”

九、课后作业

作业一

编写一个方法 registerUser,用于用户注册。如果用户名已存在,使用 throw 抛出 IllegalArgumentException;如果密码长度小于 6 位,也抛出该异常。

作业二

分析一个已有的 Java 项目,找出其中使用 throw 和 throws 的地方,并说明其作用和处理方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

zl515035644

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

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

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

打赏作者

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

抵扣说明:

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

余额充值