异常处理


异常类型


在这里插入图片描述
受检异常和非受检异常
非受检异常在IDEA和eclipse中不会提醒,它们是可能会发生也可能不会发生的异常
非受检异常即使不处理也不会影响代码的执行


try-catch


try-catch的基本格式

try{

}catch(异常对象 对象名称){

}catch(异常对象 对象名称){

}
try{

}catch(异常对象1 | 异常对象2 对象名称){

}
try{

}catch(异常对象12的父类 对象名称){

}
try{

}catch(异常对象 对象名称){

}finally{

}

finally是必然执行的异常统一处理出口
无论是否发生异常,finally都必然执行


经典问题


经典问题:finally部分的语句什么时候会执行,什么时候不会执行?

int a = 10;
int b = 0;
try{
	System.out.println(a/b);
}catch(NumberFormatEception e){
	System.out.println("分母不可以为0");
}finally{
	System.out.println("执行完毕");
}

控制台的输出为执行完毕
只要没有内存溢出,计算机停电,程序终止等问题,finally内的语句一定会被执行,即使没有捕获到分母为0的异常,程序崩溃也是如此

int a = 10;
try{
	return a;
}catch(Eception e){
	return 0;
}finally{
	a = 20;
}

main方法内打印a的值,控制台的输出为10
因为a是基本数据类型,return只是将a的值复制了一份返回,即使finally在方法结束前必然会执行也无法影响到a的值,因为return的a是10这个值的复制

Person p = new Person();
p.age = 18;
try{
	return p.age;
}catch(Eception e){
	return 0;
}finally{
	p.age = 28;
}

main方法内打印p.age的值,控制台的输出为28
p是引用数据类型,p在创建时,栈中只存储了p的引用地址,因为finally必然会在return前执行,因此堆内存中的age被改为了28,返回的自然也是28

int a = 10;
try{
	System.exit(0);
}catch(Eception e){
	return 0;
}finally{
	System.out.println("执行完毕");
}

控制台没有输出
System.exit();这个方法强制终止程序,程序被终止时,finally内的语句不再执行


throws,throw


thorws关键字
如果异常是因为传入的参数而产生的,则应该将异常抛出

throw关键字
当传参不合理,又没有合适的异常名称可以描述时考虑使用

RuntimeException e = new RuntimeException("输入不合理");
throw e;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值