回复
Java异常中finally的使用
jkfox
发布于 2020-9-16 15:54
浏览
0收藏
finally:
(1).必然执行的异常统一处理出口
(2).无论是否发生异常.finally必然执行,适合存放释放资源,后续处理的代码.
总之就是,大部分的情况下,finally一定会执行,但是也有不先执行finally执行的特例=>
(1)finally里发生异常.程序不会执行(finally第一句产生异常后续的不会执行)
(2).程序所在线程死亡或关闭了cpu,也就是说外界不可抗力的因素造成的电脑突然关机,停电等.
下面看一下两个finally一定会执行后的不同结果:
…首先先描述一下执行的过程,如果try中有return时,再返回阶段时,会去先执行finaly里的程序.
(1)finally执行后数值改变
public static void main(String[] args){
Person p = show();
System.out.println("年龄是"+p.age);
}
public static Person show(){
Person person = new Person();
try{
//这里赋予person的年龄是18
person.age=18;
return person;
}catch(Exception e){
}finally{
//finally里改变person的年龄
person.age=38;
}
return person;
}
输出的结果是;
年龄是38
(2)finally执行后数值没有改变
public static void main(String[] args){
int ageNum = show();
System.out.println("年龄是"+ageNum);
}
public static int show(){
int age;
try{
age = 18;
return age;
}catch(Exception e){
}finally{
age = 38;
}
return age;
}
输出结果是:
年龄是18
…>其实在这两个案例中,finally都执行了,第一个是引用类型的数值,引用的是地址.而第二个是非引用数据类型.
…>在程序编译后,会被编译成字节码.class文件,当被打包成一个文件后,这个文件就是独立的,引用的外部数值就会在打包前进行数据备份.
所以.
(1)程序中在return时,将person.age备份,这里备份的是一个地址,当finally数值改变后,备份的数据仍旧是一个地址,通过地址查找到的数值就是已经改变掉数值.
(2)程序中在return时,备份的是一个数值,之后从备份中查找数据还是那个数值,没有改变.
作者:QwoYko.
来源:CSDN
分类
已于2020-9-16 16:22:43修改
赞
收藏
回复
相关推荐