Java中的异常?(十二)

什么是异常

程序运行过程中出现的非正常的情况既是异常.

在这里插入图片描述
异常的分类

Throwable:

Java语言中错误或是异常的父类,位于 java.lang包中

(1) 常见的构造方法: 
	a. Throwable():无参数的构造方法 
	b. Throwable(String message):带有字符串异常信息的有参数构造方法 
(2) 常见的功能方法: 
	a. String getMessage():获取字符串类型的异常信息  
	b. void printStackTrace():打印输出调用过程中产生的栈详细信息 

Error:

Error是Throwable的子类,代表错误

(1) 特点:Error通常紧靠程序本身无法恢复的严重错误.
	例如:jvm内存不足或是方法调用过程出现了栈溢出
	     java.lang.StackOverflowError(栈溢出) 
(2) 处理态度:程序中一旦出现Error的结果,通常无法利用程序本身进行恢复

Exception:

Exceptio是Throwable的子类,代表异常.

(1) RuntimeException:运行时异常、 未检查异常 
	a. 概念:直接或是间接继承RuntimeException的异常称为运行时异 常(RuntimeException本身和其子类) 
	b. 特点:编译器在编译过程不检测此类异常,编译通过,运行过程中报错 
	c. 处理态度:运行时一般可以避免, 此类异常可以处理也可以不处理,不处理可以通过严谨代码进行避免
(2) 非RuntimeException:非运行时异常、已检查异常 
	a. 概念:和RuntimeException没有任何继承关系的异常称为非运行时异常 
	b. 特点:编译器在编译过程检测此类异常,编译报错
常见异常 异常翻译
ArrayIndexOutOfBoundsException 数组下标越界
StringIndexOutOfBoundsException 字符串下标越界
IndexOutOfBoundsException 下标越界
NullPointerException 空指针异常
ClassCastException 类型转换异常

异常的产生原因

自动产生异常:

(1) 产生原因:程序运行过程中,遇到错误代码,自动产生异常 
(2) 结果:程序中一旦出现异常,程序不能继续执行之后的代码, 则程序会被终止 
(3) 例如:空指针异常、类型转换异常等异常可能都会在运行过程中自动产生

手动产生异常:

(1) 关键字:throw 
(2) 语法:throw new 异常类名("异常 信息"); 
(3) 位置:定义在方法内部 
(4) 结果:作用效果类似于于return语句,终止当前函数、方法

异常的处理

消极处理异常:

(1) 关键字:throws 
(2) 位置:在方法的声明处 
(3) 语法: 
		修饰符 返回值类型 方法名(形参列表)throws 异常类名1,异常类名2{
		 		// 方法实现部分 
		} 
(4) 结果:消极处理异常只是推卸责任,最终将异常抛给jvm,导致程序因异常而被终止 
(5) 意义:非运行时异常虽然没有解决问 题,但是可以让非运行时编译通过 
(6) 注意:利用父类型异常处理子类型的异常,体现多态

积极处理异常:

(1) 关键字:try...catch 
(2) 位置:只能定义在方法内部
(3) 语法: try{
			 // 可能出现异常的语句 
		   }catch(异常类名 e){ 
		   	 // 异常出现执行的语句 
		   } 
(4) 注意:只有当try中出现异常时,才执行对应的catch中代码 
(5) try...catch结构的细节: 
	a. 一个try后面可以跟多个catch,从上往下依次进行匹配,直到匹配成功 
	b. 利用多态技术,通过父类型的catch处理子类型的异常;
	   而且如果既有父类型的catch也有子类型的catch;
	   则必须将定义子类型的catch放于其父类的前面 
(6) finally的应用: 
	a. 语法:try{
				// 可能出现异常的语句 
			 }catch(异常类名 e){ 
			 	// 异常出现时执行的代码 
			 }finally{ 
			 	// 不管有没有异常都必须执行 
			 	} 
	b. 注意:实际开发时,通常不会将return定义在finally,finally中通常用于关闭资源

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_60768515/article/details/124066046