java异常的分类和异常处理机制-- 类设计时经常要用到RuntimeException

本文深入解析Java异常处理机制,区分Error、Exception与RuntimeException,探讨异常的分类与处理方式,包括系统异常与普通异常的不同处理策略。

一、 异常的分类

Java 对异常进行了分类,不同类型的异常分别用不同的 Java 类表示,所有异常的根类为 java.lang.Throwable,
Throwable 下面又派生了两个子类:Error 和 Exception。

1. Error 表示应用程序本身无法克服和恢复的一种严重问题。
2. Exception 表示程序还能够克服和恢复的问题,其中又分为系统异常和普通异常,

2.1 系统异常是软件本身缺陷所导致的问题,也就是软件开发人员考虑不周所导致的问题,软件使用者无法克服和恢复这种问题,但在这种问题下还可以让软件系统继续运行或者让软件死掉,例如,数组脚本越界(ArrayIndexOutOfBoundsException),空指针异常(NullPointerException)、类转换异常(ClassCastException);

2.2 普通异常是运行环境的变化或异常所导致的问题,是用户能够克服的问题,例如,网络断线,硬盘空间不够,发生这样的异常后,程序不应该死掉。


二、 异常处理机制

java 为系统异常和普通异常提供了不同的解决方案,编译器强制普通异常必须 try..catch 处理或用 throws 声明继
续抛给上层调用方法处理,所以普通异常也称为 checked 异常,而系统异常可以处理也可以不处理,所以,编译器不
强制用 try..catch 处理或用 throws 声明,所以系统异常也称为 unchecked 异常

 

三、RuntimeException(重点) 系统异常 

在java的异常类体系中,Error和RuntimeException是非检查型异常,其他的都是检查型异常。前面提到的三种都是RuntimeException的子类: ArrayIndexOutOfBoundsException、NullPointerException、ClassCastException。


重点:所有方法都可以在不声明throws的情况下抛出RuntimeException及其子类 。RuntimeException不用try catch捕捉将会导致程序运行中断,若用则不会中断。普通异常必须 try..catch 处理或用 throws。

 

参考文章:

1、java异常机制处理以及5个常见RuntimeException

2、Java中RuntimeException和Exception的区别
 

<think> 根据用户需求,用户希望了解jmu-Java 7-2任务中关于throwthrows的知识点。由于引用内容中提到了7-1题目的异常处理示例,我们可以推断7-2可能也是似的异常处理题目,但重点在throwthrows的使用。 由于没有直接给出7-2的具体题目,我将根据常见Java异常处理中throwthrows的知识点,结合题目可能的要求进行解释。 在Java中,throwthrows都是处理异常的关键字: - throw:用于在方法体内抛出一个具体的异常对象。 - throws:用于方法声明,表示该方法可能抛出的异常,由调用者处理。 通常,在自定义异常的场景中,我们会用到throw主动抛出异常,而throws用于声明方法可能抛出的异常。 参考引用中的7-1题目,它涉及了自定义异常(IllegalScoreException, IllegalNameException)以及系统异常(NoSuchElementException)的处理。在7-2题目中,可能要求我们使用throwthrows来处理异常。 假设7-2题目要求: 1. 定义自定义异常。 2. 在方法中通过throw抛出异常。 3. 在方法声明中使用throws声明异常。 4. 在main方法中捕获处理这些异常。 下面是一个可能的示例代码框架,展示throwthrows的使用: ```java // 自定义异常 class MyCustomException extends Exception { public MyCustomException(String message) { super(message); } } public class Main { // 方法声明中使用throws,表示该方法可能抛出MyCustomException异常 public static void checkValue(int value) throws MyCustomException { if (value < 0) { // 使用throw抛出自定义异常 throw new MyCustomException("Value cannot be negative: " + value); } System.out.println("Value is valid: " + value); } public static void main(String[] args) { try { checkValue(-10); // 调用可能抛出异常的方法 } catch (MyCustomException e) { System.out.println(e); // 捕获并打印异常 } } } ``` 在7-2任务中,可能要求完成似的功能,例如输入校验,当输入不符合要求,抛出自定义异常。 根据引用中7-1的输出样例,我们可以推测7-2可能要求似的输出格式,例如捕获异常并打印。 因此,解决7-2任务的步骤可能包括: 1. 定义题目要求的自定义异常(如果有)。 2. 在需要的方法内部,使用throw关键字在条件满足抛出自定义异常或系统异常。 3. 在方法声明处使用throws关键字声明该方法可能抛出的异常(除了RuntimeException及其子,其他检查异常必须声明)。 4. 在调用该方法的代码处(如main方法)使用try-catch块捕获并处理异常,按照题目要求打印异常信息。 注意:引用中7-1使用了`System.out.println(e);`来打印异常,这会将异常对象的toString()方法结果打印出来,通常包括异常详细信息。 如果题目要求必须使用throwthrows,那么请确保: - 在方法内部通过throw抛出异常对象。 - 在方法签名中通过throws声明异常(检查异常)。 - 在调用方法的地方捕获异常。 如果题目没有提供具体的要求,建议查看题目描述,根据要求实现。 由于我无法获取7-2的具体题目,以上是基于常见题型引用中7-1的推测。 相关问题: 1. 在Java中,throwthrows有什么区别? 2. 如何自定义一个异常? 3. 在Java中,什么是检查型异常(checked exception)非检查型异常(unchecked exception)? 4. 在方法中抛出异常后,程序流程会如何变化? 如果用户能提供7-2的具体题目描述,可以给出更精确的解答。 </think> 基于您查询的“jmu-Java 7-2任务中throw与throws知识点”,结合异常处理核心逻辑引用[^1]的异常处理示例,整理关键内容如下: ### 一、`throw`与`throws`核心区别 | **关键字** | **作用位置** | **功能** | **示例** | |------------|------------------|-------------------------------------|-------------------------------------------| | `throw` | 方法**内部** | 手动抛出异常对象 | `throw new IllegalArgumentException("无效参数")` | | `throws` | 方法**声明处** | 声明可能抛出的异常型(向上传递) | `public void read() throws IOException` | ### 二、7-2任务典型解决方案 ```java // 1. 定义自定义异常(参考引用[^1]) class InvalidInputException extends Exception { public InvalidInputException(String message) { super(message); } } public class Task7_2 { // 2. 使用throws声明异常 public static void processInput(String data) throws InvalidInputException { if (data == null || data.isEmpty()) { // 3. 使用throw抛出具体异常 throw new InvalidInputException("输入不能为空"); } // 业务逻辑... } public static void main(String[] args) { try { processInput("test"); // 调用声明异常的方法 } catch (InvalidInputException e) { // 4. 捕获并打印异常(符合引用[^1]要求) System.out.println(e); // 输出: InvalidInputException: 输入不能为空 } } } ``` ### 三、关键注意事项 1. **自定义异常继承** - 检查异常需继承 `Exception` - 运行异常需继承 `RuntimeException` 2. **异常传递机制** ```mermaid graph LR A[方法内部throw异常] --> B{方法是否声明throws?} B -->|是| C[异常传递给调用者] B -->|否| D[立即终止并报错] ``` 3. **打印异常技巧** - `System.out.println(e)` 输出异常型+消息(如引用[^1]输出`IllegalNameException: ...`) - `e.printStackTrace()` 输出完整堆栈跟踪(调试用) ### 四、典型应用场景 1. **参数校验** ```java if (score < 0 || score > 100) { throw new IllegalScoreException("分数超范围:" + score); // 参考引用[^1] } ``` 2. **资源访问** ```java public void loadConfig() throws FileNotFoundException { File file = new File("config.cfg"); if (!file.exists()) { throw new FileNotFoundException("配置文件缺失"); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值