java中的异常(个人小结)

1. 什么是异常?

在程序编写中,出现异常在所难免。因为导致异常的原因不同,所以异常的种类也是复杂多样。比如数组越界、参数不合法等等。异常讲究前因后果,处理异常须对症下药,专病专治。

2. 代码中的异常

Java中所有的异常、错误的基类都是Throwable类。Throwable分为Exception(异常)和Error(错误),

2.1 Throwable常用的方法

Constructor(构造):
Throwable(); //Throwable类对象中,存储的异常或者错误信息为null。Throwable(String message); //Throwable类对象中,存储的异常或者错误信息为message。
Method(成员):
String getMessage(); //获取Throwable对象中存储的异常或者错误信息。
String toString(); //返回当前异常或者错误的简要描述
void printStackTrace(); //【红色字体】展示错误的前因后果

2.2 Exception和Error区别

Exception 异常,可以处置
Error 错误,不可处置,只能避免

3.异常的处理

异常的处理有两种:捕获、抛出

3.1 捕获异常

3.1.1 格式:

try - catch结构

try {
	//可能出现异常的代码
} catch ( 对应的异常对象) {
	//处理方式
}
//可有多个catch
3.1.2 捕获异常代码
public class Demo3 {
	public static void main(String[] args) {
		test(10, 2, null);
	}
	public static void test(int num1, int num2, int[] arr) {
		int ret = 0;	
		try {
		//此处可能会出现除数为0的异常
			ret = num1 / num2;
			System.out.println("测试代码");
			arr[0] = 10;
		} catch (ArithmeticException e) {
			e.printStackTrace();
		} catch (NullPointerException e) {
			e.printStackTrace();
		}
		System.out.println("ret:" + ret);
	}
}
3.1.3 问题总结
1.码中从异常发生位置开始,之后的代码都不在运行。
2.中有多个异常,可以使用多个catch块进行捕获操作,分门别类处理。
3.当前情况下,只能展示异常情况,后期可以将异常情况做成log日志文件。
  • 异常被捕获之后代码可以正常运行。

3.2 抛出异常

3.2.1 格式

throw 在方法内抛出异常
throws 在方法声明位置,告知调用者当前方法有哪些异常抛出,声明的异常需要生成对应的文档注释。

3.2.2 代码
public static void test(int num1, int num2, int[] arr) throws ArithmeticException, NullPointerException {
		// 参数合法性判断
		/*if (0 == num2 || null == arr) {
			System.out.println("Input Parameter is Invalid!");
			return;
		}*/
		// 抛出异常方式来处理当前的参数合法性判断
		if (0 == num2) {
			// 有可能会导致算术异常
			throw new ArithmeticException("算术异常");
		}
		
		if (null == arr) {
			// 存在数组操作空指针异常
			throw new NullPointerException("数组空指针异常");
		}
		
		System.out.println(num1 / num2);
		arr[0] = 10;
	}
}
3.2.3 抛出异常总结
	1.个代码块内,有且只能抛出一个异常
	2.throw位置开始,之后的代码不在运行
	3.码中存在使用throw抛出异常,在方法的声明位置必须告知调用者这里有什么异常

3.3 抛出和捕获的对比

  1. 捕获之后,代码可以正常运行,要保证处理之后的异常不会再导致其他问题。如:用户密码错误,不能采用捕获异常。
  2. 抛出可解决很多问题,并且可增强代码健壮性。但到用户层面,不能将错误信息直接显示给用户。
  3. 用户密码错误情况:
    (1)捕获异常
    (2)通过异常处理,catch将错误抛出
    (3)给予用户友好提示

3.4 注意

不能直接使用Exception捕获或抛出异常,须针对具体的异常类型有具体的处理方式,做到对症下药。
正常情况下,只要不是带有自定义异常的方法,通常情况下需要处理的异常,代码中都有会有声明告知。如果未处理异常,代码报错。

4. 异常种类

4.1 RuntimeException

运行时异常:
JVM在运行的过程中可以非检查异常
例如:
ArrayIndexOutOfBoundException
NullPointerException
StringIndexOutOfBoundException
ArithmeticException

这些异常在代码中如果出现,不需要代码中强制进行捕获或者抛出处理。

4.2 自定义异常

代码运行的过程中存在一定的生活化
例如:
用户名密码错误
NoGirlFriendException (没有女朋友异常)
自定义异常格式:
class 自定义异常类名 extends Exception {
// No Fields Constructor
// String Field Constructor
}
自定义异常类名:
必须Exception结尾!!!

发布了5 篇原创文章 · 获赞 1 · 访问量 248

猜你喜欢

转载自blog.csdn.net/qq_41986648/article/details/104465466