java异常处理

1.异常继承体系

异常有很多一个个的类,包含一些继承关系。

  • Throwable:java中所有异常和错误的根类
    • Error:错误类,不是我们能处理的。
    • Exception:异常类,描述程序中的异常
      • Runtime:运行时异常

异常的分类:

  • 运行时异常(RuntimeException)
    • 程序可以正常编译,异常的产生是发生在程序运行过程中。
  • 非运行时异常(None-RuntimeException)、编译时异常
    • 程序无法编译

对程序的影响:

  • 运行时异常:运行过程中遇到未经处理的异常,程序会被终止
  • 非运行时异常:遇到未经处理的异常(unhandled),无法通过编译

2.异常处理

异常处理使用try-catch-finally
基础语法:

try{
	//可能会出现异常的代码
}catch(异常类 异常对象){
	//捕获指定类型的异常
}finally{
	//这里的代码始终会执行
}

  • try不能单独存在,必须跟catch和finally至少一个,或者都有
  • try是主体,不能没有try,只有其他两个
  • 如果try中的代码出现异常,从异常开始的位置以后的代码都不执行(try中)
  • 一个try可以跟多个catch,可以在不同的catch中做不同的处理
    • 如果多个catch捕获的异常,彼此之间没有关系,那么catch的先后顺序无所谓
    • 如果多个catch捕获的异常,是有继承关系存在的,那么必须使子类异常在前,父类异常在后
    • 如果try中代码有多处异常,且每个异常的处理方式都一样,那么可以捕获他们的父类异常
  • 分组异常捕获
    • 可以将多种异常放到一个分组,进行统一的捕获和处理
    • 将多个异常用|进行连接

3.throw和throws

throws:

  • 用在方法声明部分,表示一个方法有一个异常
  • 此时这个异常在此不用处理,交给方法调用处处理
  • 规范:只要某个方法有未经处理的异常,最好将throws加上
    throw:
  • 程序中,我们捕获到的都是一个个异常对象
  • 实例化一个异常对象,对程序没有什么影响
  • 如果一个异常对象需要影响到程序,那么就将这个异常对象抛出

4.自定义异常

为什么要自定义异常?
系统给我们提供了很多异常类,但是这些异常类也是有限的,不能满足我们的需求。当我们需要抛出的异常类,已经超出了系统给我们提供的异常类描述范围,此时我们就要自定义异常

如何自定义异常类?
继承自Exception或RuntimeException,创建一个异常子类

  • 继承自Exception类的是编译时异常
  • 继承自RuntimeException类的是运行时异常

规范:自定义异常,命名必须以Exception做结尾

案例1:

try{
	int num = 10/0;
}catch(ArithmeticException e){
	throw new ArithmeticException("除数为0");
}finally{

}

案例2:

class MyException extends RuntimeException{
	public MyException(String message){
		//message是异常的信息提示,可以在控制台看到
		super(message);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值