Java基础学习第十四节——异常的处理

程序的异常:

在程序运行过程中,意外发生的情况,背离我们程序本身的意图的表现,都可以理解为异常

Throwable:包含Error、Exception两个子类

在这里插入图片描述

异常处理:抛出异常和捕捉异常
在这里插入图片描述

在这里插入图片描述

try块后可接零个或多个catch块,如果没有catch块,则必须跟一个finally块
Exception对象中printStackTrace()方法可以指定出错的位置,输出位置随机
Exception不能放在第一行
catch:不能出现同类型异常
finally:无论怎样都会执行的代码,如果多个catch异常中出现return,那么只会执行finally里面的return
System.exit(1);终止程序运行

throw和throws:可以通过throws声明将要抛出何种类型的异常,通过throw将产生的异常抛出

throws声明定义时可以接多个异常类型

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
* 通过throws抛出异常时,针对可能出现的多种异常情况,解决方案:
* 1、throws后面接多个异常类型,中间用逗号分离
* 2、在throws后面直接接Exception

throw用来抛出一个异常

例如:throw new IOException();

throw抛出的只能够是可抛出类Throwable或者子类的实例对象
两种方法

在这里插入图片描述

  • throw抛出异常对象的处理方案
  • 1、通过try…catch包含throw语句—自己抛自己处理
  • 2、通过throws在方法声明处抛出这个异常的类型—谁调用谁处理,调用者可以自己处理,也可以继续上抛
    此时可以抛出与throws对象相同的类型或者是其父类
    方案一:
    在这里插入图片描述

方案二:

在这里插入图片描述

在这里插入图片描述

非检查异常不一定要处理异常,编译器不会强制要求处理,检查异常必须处理

Throwable是Exception的父类

自定义异常类:

通过继承异常类,写出自己的异常,在程序中抛出并处理
例如:

package com.imooc.test;

public class HotelAgeException extends Exception {
		public HotelAgeException() {
			super("18岁以下,80岁以上的住客必须由亲友陪同");
		}
}
public class TryDemoFour {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try {
			testAge();
		} catch (HotelAgeException e) {
			System.out.println(e.getMessage());
			System.out.println("酒店前台工作人员不允许办理入住登记");
		}catch(Exception e) {
			e.printStackTrace();
		}
	}
	}

异常链

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

throws的使用规则:当子类重写父类抛出异常的方法时,声明的异常必须是父类方法所声明异常的同类或子类

异常总结

1.处理运行时异常时,采用合理的逻辑去规避异常并同时使用try-catch处理

2.在多重catch块后面,可以加一个catch(Exception e)来处理可能发生的未捕捉到的异常

3.对于不确定的代码,也可以加上try-catch,处理潜在的异常

4.尽量去处理异常,切忌只是简单打印异常

5.具体如何处理异常,要根据不同的业务需求和异常类型来决定

6.尽量添加finally语句去释放被占用的资源