子类异常和父类异常捕获的关系

本文探讨了Java中自定义异常类ExampleA及其继承自ExampleA的ExampleB类的实现细节,重点介绍了构造函数的使用及异常处理流程,包括如何确保正确地调用父类构造函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

class ExampleA extends Exception{
	private String a=null;
	//这里必须加上无参的构造函数,因为自己定义了有参的构造函数,则会覆盖原来无参构造函数
	//但是子类构造对象时候会先调用父类的构造函数,其中会默认先调用super方法,该方法是调用父类的无参构造函数,若没有定义就会报错
	public ExampleA(){}//所以必须写出无参的构造函数,写了有参就要写无参,除非程序不再调用无参的,否则调用就会报错
	public ExampleA(String a){
		this.a=a;
	}
}

//当构造对象时候就会默认调用super方法,先调用父类的无参构造函数,super默认调用的

class ExampleB extends ExampleA{
	private String b=null;
	public ExampleB(String b){
		this.b=b;
	}
}


//最后的输出仅仅只是Example
public class Test7 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		//这里抛出一个ExampleB类对象的一个异常
		try{
			throw new ExampleB("b");
		//这里先catch该父类ExampleA中异常
		}catch(ExampleA e){
			//若捕获到就输出EXampleA
			System.out.println("ExampleA");
		//这里数ExampleA的父类,但是这里捕获不到异常new ExampleB(“b”)异常了,因为异常已经被子类ExampleA捕获走了,除非子类捕获不到的异常才会执行捕获
		//但是如果先catch父类的异常,子类的异常就会失效,不会执行
		}catch(Exception e){
			//所以该catch语句就不会执行了,即不会再输出”Example“
			System.out.println("Example");
		}
	}

}

### Java 中异常类的继承层次结构 在 Java 编程语言中,所有的异常都派生自 `Throwable` 类。从这个基类衍生出了两个主要分支:`Error` `Exception`。 #### Error 类 `Error` 表示严重的错误情况,通常是由于虚拟机内部问题或其他不可恢复的情况引起的。应用程序不应该尝试捕获这些类型的对象,因为它们通常表明存在严重的问题,使得继续运行变得不可能或不安全[^1]。 #### Exception 类 `Exception` 是指程序正常操作过程中可能出现的一些意外状况。它又分为受检(checked)未受检(unchecked)两种类型: - **Checked Exceptions**: 这些是在编译期被强制要求处理的异常;如果某个方法可能会抛出这种类型的异常,则该方法要么自己处理掉此异常,要么声明要由调用者来负责处理。 - **Unchecked Exceptions (RuntimeException)**: 它们是从 RuntimeException 或其子类扩展而来的异常。这类异常代表的是编程逻辑上的缺陷,比如数组越界访问、空指针引用等,在编写代码时应该尽量避免发生,并且不需要显式地去捕捉它们。 对于具体的异常类而言,许多常见的内置异常都是直接或者间接地继承自这两个顶级类别之一。例如: - IOException 继承自 Exception; - NullPointerException 继承自 RuntimeException; - SQLException 也属于 Checked Exception 的范畴。 下面是一个简单的图解表示法展示部分常见异常之间的关系: ``` Throwable / \ / \ Error Exception | RuntimeException ... NullPointerException ``` 此外,开发者也可以定义自己的自定义异常类,通过让新创建的类继承现有的异常类来实现这一点。这允许程序员能够更加精确地标记特定的应用场景下的失败情形[^2]。 ```java // 自定义异常的一个例 public class MyCustomException extends Exception { public MyCustomException(String message) { super(message); } } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值