finally必然执行
try{}
catch{}
finally{}
先是执行try中的代码,如果遇上异常则之执行catch中代码,而finally是必然执行的,除了以下几点finally不执行:
- 1、电脑突然停电,电脑死机,硬件设备坏了
- 2、在try或者catch中有终止程序运行的的代码,例如:System.exit(0);退出程序运行
finally修改try或者catch中return的结果
- 1、前面返回的是对象的引用,然后finally修改的是对象的变量值,此时结果return 的是28。因为return的是对象引用,引用储存在栈当中,在return p;执行过程中会保存当前需要return的值,在这里是p(也就是对象引用),并且return途中会执行finally里的代码,然后修改了p.age的值等于28,这个p.age储存在堆当中,并没有对return 的返回值造成影响,所以p.age成功被修改了
- 2、return 的是一个基本数据类型,那么由于基本数据类型是储存在栈当中,所以在try{return a}时,return会保存这个return的值也就是a=10;然后在执行finally a=20;虽然此时a变成了20,但是我们return的值是之前保存的那个a=10,所以最后a=10;