java异常处理04_自定义异常

1.自定义异常格式

在程序中,可能会遇到任何标准异常类都没有充分的描述清楚的问题,这种情况下可以创建自己的异常类。

java中所有的异常类,都是继承Throwable,或者继承Throwable的子类。这样该异常才可以被throw抛出,因为异常体系具备一个可抛性,即可以使用throw 关键字。

自定义的类应该包含两个构造器:一个是默认的构造器,另一个是带有详细信息的构造器。

自定义异常格式:

class 自定义异常名 extends Exception或RuntimeException {
	public 自定义异常名() {
		// 默认调用父类无参构造方法
	}
	public 自定义异常名(String msg) {
		// 调用父类具有异常信息的构造方法
		super(msg);
	}
}

2.自定义异常使用

在 Person 类的有参数构造方法中,进行年龄范围的判断,若年龄为负数或大于130岁,则抛出

AgeOutOfBoundsException异常。

【示例】自定义异常使用案例

// 自定义异常类
class AgeOutOfBoundsException extends Exception {
	// 无参构造方法
	public AgeOutOfBoundsException() {}
	// 有参构造方法
	public AgeOutOfBoundsException(String msg) {
		super(msg);
	}
}
// Person类
class Person {
	int age;
	public Person(int age) throws AgeOutOfBoundsException {
		// 判断年龄是否合法
		if(age < 0 || age >= 130) {
			throw new AgeOutOfBoundsException("年龄数值非法异常");
		}
		// 进行属性赋值
		this.age = age;
	}
}
// 测试类
public class MyException {
	public static void main(String[] args) {
		try {
			// 初始化对象,可能会抛出AgeOutOfBoundsException异常
			Person p = new Person(140);
			System.out.println("age:" + p.age);
		} catch (AgeOutOfBoundsException e) {
			// 获取异常信息
			System.out.println("msg:" + e.getMessage());
			// 输出堆栈异常
			e.printStackTrace();
		}
	}
}

自定义异常继承于Exception或继承RuntimeException的区别?

  • 继承Exception属于非运行时异常,如果没有对其异常进行捕获处理(try-catch),那么必须在方法上声明异常(throws),以便告知调用者进行捕获。

  • 继承RuntimeException属于运行时异常,方法上不需要声明异常(throws ),调用者也可以不捕获异常(try-catch)。代码一旦抛出异常,那么程序就会挂掉,并有JVM把异常信息显示到日志窗口上,让调用者看到异常并修改代码。

ps:如需最新的免费文档资料和教学视频,请添加QQ群(627407545)领取。

发布了92 篇原创文章 · 获赞 0 · 访问量 2620

猜你喜欢

转载自blog.csdn.net/zhoujunfeng121/article/details/104662474