JavaSE:异常相关

异常体系

JDK 中定义了很多异常类,这些类对应了各种各样可能出现的异常事件,所有异常对象都是派生于Throwable类的一个实例。如果内置的异常类不能够满足需要,还可以创建自己的异常类。
Thorwable类(表示可抛出)是所有异常和错误的超类,两个直接子类为Error和Exception,分别表示错误和异常。

Thorwable

Throwable类是所有异常或错误的超类,它有两个子类:Error和Exception,分别表示错误和异常。其中异常Exception又分为运行时异常(RuntimeException)编译时异常
Error和运行时异常,因为程序在编译时不检查异常,所以又称为不检查异常(Unchecked Exception)。
编译时异常,因为程序在编译时异常可以被检查出,所以又称为可检查异常(Checked Exception)
Throwable常用方法介绍:
方法名 描述

public String getMessage()返回此throwable的详细消息字符串。
public String toString()返回此 throwable 的简短描述
public void printStackTrace()打印异常的堆栈的跟踪信息

Error:

Error类是java所有错误类的父类,描述了java运行时系统内部错误和资源耗尽错误。这类错误是我们无法控制的,同时也是非常罕见的错误,表明系统JVM已经处于不可恢复的崩溃状态中,它是由JVM产生和抛出的。
所以错误是很难处理的,一般的开发人员(当然不是你)是无法处理这些错误的,我们在编程中,可以不去处理这类错误。

Exception:

Exception类所有异常类的父类,其子类对应了各种各样可能出现的异常事件。Error是程序无法处理的错误,但是Exception是程序本身可以处理的异常,在程序中应当尽可能去处理这些异常。
Exception又分为两大类:
1、RuntimeException运行时异常
2、CheckedException编译时异常

运行时异常:

RuntimeException 及其子类,属于运行时异常,因为程序编译时异常不能被检查出,所以又称为不检查异常(UnCheckedException)。
常见的运行时异常:
NullPointerException 空指针异常;ClassCastException 类强制转化异常;IndexOutOfBoundsException 数组下标越界异常; ArithmeticException 算数异常;

编译时异常:

Exception及其子类,称为编译时异常。因为程序编译时异常可以被检查出,所以又称为可检查异常(CheckedException)。

异常的处理:

自定义异常:
/**
 * 年龄越界异常类
 */
public class AgeOutOfBoundsException extends Exception {
	public AgeOutOfBoundsException() {
		super();
	}
	//需声明一个无参和有参构造方法。
	public AgeOutOfBoundsException(String message) {
		super(message);
	}
}
throw抛出异常:

使用throw关键字抛出一个异常对象,该异常对象中包含了异常的描述信息。

//判断数组索引是否越界
if(index < 0 || index >= arr.length) {
	throw new ArrayIndexOutOfBoundsException(index);
}
声明异常(throws):

当方法体中出现了异常,而此时我们在方法体中又不能处理该异常,那么我们可以把方法体中出现的异常使用。
语法:[修饰符] 返回值类型 方法名(形参列表) throws 异常类1, 异常类2, 异常类3, … {
     // 方法体
    }

注意事项:

1)声明异常(throws),就是消极处理异常的方式。当方法体中出现的异常我们不能处理的时候,可以把该异常声明在方法上面,交给方法的调用者来解决。

2)如果方法体中抛出了多个异常对象,那么我们应该在方法声明上面throws多个异常类,多个异常类之间以“逗号”分割!

	class ArraysTool {
	// 使用throws关键字声明异常,把可能发生的异常报告给调用者。
	public static int getValue(int[] arr, int index) throws NullPointerException, ArrayIndexOutOfBoundsException {
		// 判断arr是否为null
		if(null == arr) 
			throw new NullPointerException("对象arr为null");
		// 判断索引是否合法
		if(index < 0 || index >= arr.length) 
			throw new ArrayIndexOutOfBoundsException("索引不合法");
	// 返回元素值
		return arr[index];
	}
异常的处理方式之捕捉异常(try…catch…finally)

注意:该方式是积极的处理方式。
1.try…单catch
语法:try {
// 书写可能出现异常的代码
}
catch(异常类 对象) {
// 对try代码块中捕捉到的异常进行处理
}

try…单catch

语法:try {

// 书写可能出现异常的代码

}

catch(异常类 对象) {

// 对try代码块中捕捉到的异常进行处理

}

注意:在控制台“打印堆栈异常信息”未必意味着程序结束!

2.try…多catch

一个try可以对应多个catch,这样就实现了对不同的异常信息做正对性的处理!

语法: try {

// 书写可能出现异常的代码

}

catch(异常类1 对象1) {

// 对try代码块中捕捉到的异常进行处理

}

catch(异常类2 对象2) {

// 对try代码块中捕捉到的异常进行处理

}

注意事项

1)如果遇到多catch的情况,一定要把父类异常的catch放在最后面,因为catch是从上往下依次开始匹配的。

2)多catch情况,如果我们对出现的多个异常做相同的处理,那么还可以这么做:

catch (ArrayIndexOutOfBoundsException | NullPointerException | AgeOutOfBoundsException e){}

关于异常处理的总结
异常的处理方式有哪些???
a)声明异常(throws),消极处理的方式
b)捕捉异常(try…catch…finally),积极处理的方式
5.2哪些异常需要我们处理???
a)编译时异常,我们必须在编译时期就进行处理(必须处理)
b)运行时异常,我们可以在编译时期处理,也可以在编译时期不处理(可以处理,也可以不处理)
5.3什么时候使用声明异常(throws)??? 什么时候使用捕捉异常(try…catch…finally)???
a)当程序发生了异常,但是我们自己又处理不了的时候,可以把该异常声明在方法上,交给调用者来处理该异常。
b)当程序发生了异常,我们自己有能处理该异常的时候,就不要把该异常继续往上声明了,而是主动的来解决这个异常。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值