Java异常



异常的分类

  1. 异常分为两大类,运行时异常和编译时异常.
  2. 运行时异常,编译器检查不出来。一般是指编程时的逻辑错误,是程序员应该避免其出现的异常。java.lang.RuntimeException类及它的子类都是运行时异常
  3. 对于运行时异常,可以不作处理,因为这类异常很普遍,若全处理可能会对程序的可读性和运行效率产生影响
  4. 编译异常是指在编译期间,就必须处理的异常,否则代码不能通过编译。

常见的编译异常

  • SQLException//操作数据库时,查询表可能发生异常
  • IOException//操作文件时,发生的异常
  • FileNotFoundException //当操作一个不存在的文件时,发生异常
  • ClassNotFoundException//加载类,而该类不存在时,异常
  • EOFExceptionI/操作文件,到文件末尾,发生异常
  • lllegalArguementException//参数异常

常见运行异常

  • NullPointerException //空指针异常
  • ArraylndexOutOfBoundsException //数组越界异常
  • ClassCastException //类型转换异常
  • NumberFormatException //数字格式化异常
  • ArithmeticException //算术异常

异常处理关键字

  1. 如果异常发生了,则异常发生后面的代码不会执行,直接进入到catch块
  2. 如果异常没有发生,则顺序执行try的代码块,不会进入到catch
  3. 如果希望不管是否发生异常,都执行某段代码(比如关闭连接,释放资源等)
    则使用finally{ }

try…catch…finally…

try{
	//可疑代码
}catch(异常){
	//...
}finally{
	//释放资源
} 

1.如果没有出现异常,则执行try块中所有语句,不执行catch块中语句,如果有finally,最后还需要执行finally里面的语句

2.如果出现异常,则try块中异常发生后,剩下的语句不再执行。将执行catch块中的语句

3.如果有finally,最后还需要执行finally里面的语句

多重catch
可以有多个catch语句,捕获不同的异常(进行不同的业务处理),要求父类异常在后,子类异常在前,比如(Exception在后,NullPointerException在前),如果发生异常,只会匹配一个catch,案例演示

try{
}catch(NullPointerExcetpion e){
}catch(Exception e){
}finally{
}

抛出异常
在这里插入图片描述

public static void f3() throws FileNotFoundException {
	FileInputstream fis = new FileInputstream("d: //aa.txt");
}
  1. 这里的异常是一个FileNotFoundException 编译异常
  2. 使用throws ,抛出异常,让调用f3方法的调用者(方法)处理(调用者要么try-catch,要么throws)
  3. throws后面的异常类型可以是方法中产生的异常类型,也可以是它的父类
  4. throws 关键字后也可以是异常列表,即可以抛出多个异常

处理异常细节

  1. 对于编译异常,程序中必须处理,比如try-catch或者throws
  2. 对于运行时异常,程序中如果没有处理,默认就是throws的方式处理
  3. 子类重写父类的方法时,对抛出异常的规定:子类重写的方法,所抛出的异常类型要么和父类抛出的异常一致,要么为父类抛出的异常的类型的子类型
  4. 在throws过程中,如果有方法try-catch,就相当于处理异常,就可以不必throws

自定义异常

  1. 定义类:自定义异常类名(程序员自己写)继承Exception或RuntimeException
  2. 如果继承Exception,属于编译异常
  3. 如果继承RuntimeException,属于运行异常(一般来说,继承RuntimeException)
//1.一般情况下,我们自定义异常是继承 RuntimeException
//2.即把自定义异常做成运行时异常,好处时,我们可以使用默认的处理机制
//3.即比较方便
class AgeException extends RuntimeException {  //继承RuntimeException
	public AgeException(String message) {//构造器
		super(message);
	}
}


public class customException {
	public static void main(String[] args) {
		int age = 180;
		//要求范围在18-120之间,否则抛出一个自定义异常
		if(! (age >= 18 && age <= 120)) {
			//这里我们可以通过构造器,设置信息
			throw new AgeException("年龄需要在18~120之间"); //自定义异常
		}
	System.out.println("你的年龄范围正确。");
	}
}

throws 和 throw的区别
在这里插入图片描述


什么是异常

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

异常体系图

在这里插入图片描述
在这里插入图片描述

异常的分类

在这里插入图片描述

常见运行异常

RuntimeException以及RuntimeException的子类属于运行时异常
Exception以及Exception子类(除了RuntimeException)都属于检查时异常
在这里插入图片描述

空指针异常

在这里插入图片描述

所有对象在没有赋值的时候使用,都会出现这个异常
在这里插入图片描述
在这里插入图片描述

数组越界异常

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

类型转换异常

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

格式化异常

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

算术异常

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

异常的产生

在这里插入图片描述

异常的传递

在这里插入图片描述

演示异常的产生与传递

异常的产生
在这里插入图片描述
在这里插入图片描述
异常的传递
在这里插入图片描述
在这里插入图片描述

编译异常

在这里插入图片描述

异常处理关键字

在这里插入图片描述

try…catch…

在这里插入图片描述

try{…可能发生异常代码}
catch{…捕获异常,并处理异常}

有三种情况
1、程序正常,没有发生异常
2、发生异常,并捕获
3、发生异常,不能捕获
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

发生异常,并捕获 :
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

发生异常,不能捕获:
在这里插入图片描述
在这里插入图片描述

try…catch…finally

在这里插入图片描述
发生异常,可以捕获,执行finally

在这里插入图片描述
在这里插入图片描述

发生异常,不能捕获,执行finally
在这里插入图片描述
在这里插入图片描述

final有一种情况是不会执行的
在这里插入图片描述
在这里插入图片描述
但是,如果程序如果有异常,还是会执行finally
在这里插入图片描述

多重catch

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
结果1:
在这里插入图片描述
结果2:
在这里插入图片描述
结果3:
在这里插入图片描述
在这里插入图片描述

try…finally…

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
因此我们可以在main方法里捕获这个异常
在这里插入图片描述

在这里插入图片描述

小测试

1
在这里插入图片描述
2
在这里插入图片描述
3
在这里插入图片描述
4
在这里插入图片描述
在这里插入图片描述
5
在这里插入图片描述

在这里插入图片描述

总结异常处理

在这里插入图片描述

在这里插入图片描述

抛出异常

在这里插入图片描述
在这里插入图片描述

编译异常才需要处理
在这里插入图片描述
运行异常不需要处理
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
有两种处理方式
1、处理异常
在这里插入图片描述

2、调用者也加上throws
在这里插入图片描述
在这里插入图片描述

处理异常细节

在这里插入图片描述

自定义异常

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
1、继承Exception或Exception的子类
在这里插入图片描述

2、添加构造方法
ctrl + shift + s
在这里插入图片描述
在这里插入图片描述
使用自定义异常
在这里插入图片描述
在这里插入图片描述

throws 和throw的区别

在这里插入图片描述
在这里插入图片描述

父类与子类的抛出异常关系

在这里插入图片描述

编译异常

在这里插入图片描述
在这里插入图片描述
不抛
在这里插入图片描述
抛个一样或者更小的

在这里插入图片描述

运行异常

运行异常就随便了
在这里插入图片描述
在这里插入图片描述

总结

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值