Java异常和异常处理

异常分类

异常:程序不正常的行为或者状态
int a = 5/0;
数组越界访问
读取文件,结果该文件不存在

异常处理:

  • 程序返回到安全状态 允许用户保存结果,并以适当方式关闭程序

Throwable:所有错误的祖先
Error:系统内部错误或者资源耗尽
Exception:程序有关的异常

  • RuntimeException:程序自身错误
    5/0,空指针,数组越界
  • 非RuntimeException:外界相关错误
    打开一个不存在文件
    加载一个不存在的类

Unchecked Exception:(编译器不会辅助检查的,需要程序员自己管)
Checked Exception(非RuntimeException):(编译器会辅助检查的)

异常处理

  • 允许用户及时保存结果
  • 抓住异常,分析异常内容
  • 控制程序返回到安全状态

try-catch-finally: 一种保护代码正常运行的机制
结构:

try//正常业务逻辑代码
	catch//当try发生异常,将执行catch代码,若无异常,跳过
	catch
	catch
finally//当try或者catch执行结束后,必须要执行finally
//try必须有,cathch、finally至少有一个

一个异常只能进入一个catch块
catch块的异常匹配时从上而下进行匹配的
小异常在前,大异常在后

try结构中,如果有finally块,finally 肯定会被执行
try-catch-finally每个模块里面也会发生异常,所有可以在内部继续写一个完整的try结构

使用throws来声明异常——不处理
调用带有throws异常(checked exception)的方法,要么处理这些异常,或者再次向外throws,直到main函数为止

public int divide(int x, int y) throws ArithmeticException
{
	int result = x/y;
	return x/y/
}
//未声明除数不为0, 可能发生异常,直接throws,此时main函数仍然可以执行。
//如果调用有异常的程序而不声明,则main函数无法执行。
  • 一个方法如果被覆盖,那么覆盖它的方法必须抛出相同的异常,或者异常的子类
  • 如果父类的方法抛出多个异常,那么重写的子类方法必须抛出那些异常的子集,也就是不能抛出新的异常,也就是说重写方法时,子类方法抛出的异常不能超过父类方法的异常范围

自定义异常

  • 自定义异常,需要继承Exception类或其子类
    继承自Exception,就变成Checked Exception
    继承自RuntimeException,就变成Unchecked Exceptio

  • 自定义重点在构造函数
    调用父类Exception的message构造函数
    可以自定义自己的成员变量

  • 在程序中采用throw主动抛出异常

public static void testException() throws MyException {
	throw new MyException();
	}
//在方法内部程序中,抛出异常采用throw关键字,在方法头部声明中,声明异常采用throws关键字
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值