try catch語(yǔ)句return返回值的原理是啥
public class Test {
public static void main(String[] args) {
????Test t = new Test();
????int result = t.xx();
????System.out.println("運(yùn)行完畢,返回的值為:"+result);
}
????public int xx() {
????????int div = 10;
????????int result = 100;
????????try {
????????????while(div>1) {
????????????div--;
????????????result = result+100/div;
????????}
????????System.out.println("程序正常運(yùn)行,輸出結(jié)果:"+result);
????????return result = 10;
????????}catch(Exception e) {
????????????e.printStackTrace();
????????????System.out.println("循環(huán)拋出異常");
????????}
????????finally {
????????????System.out.println("fianlly執(zhí)行了");
????????}
????????return result = 20;
????}
}
代碼如上,評(píng)論里有人說(shuō)try? catch的語(yǔ)句只要執(zhí)行了return,那么語(yǔ)句塊結(jié)束,但是視頻里老師說(shuō)try? catch語(yǔ)句塊結(jié)束之后不是會(huì)繼續(xù)往下運(yùn)行嗎,那么我這里try語(yǔ)句中return返回了10,然后語(yǔ)句塊結(jié)束,執(zhí)行return result = 20;? 最后main函數(shù)里接收到的值不應(yīng)該是20嗎?但是運(yùn)行之后main函數(shù)里的值是10,這是為什么,到底誰(shuí)說(shuō)的對(duì)。還有:
public int xx() {
int div = 10;
int result = 100;
try {
while(div>0) {
div--;
result = result+100/div;
}
System.out.println("程序正常運(yùn)行,輸出結(jié)果:"+result);
return result = 10;
}catch(Exception e) {
e.printStackTrace();
System.out.println("循環(huán)拋出異常");
return result = 1;
}
finally {
System.out.println("fianlly執(zhí)行了");
}
return result = 20;
}
寫成這樣return result = 20; 就會(huì)報(bào)錯(cuò),為什么啊,之前在try里寫了return,不是可以正常運(yùn)行嗎?怎么在catch里面寫就報(bào)錯(cuò)呢,求解?。。。。。。。。。?!
2019-03-26
個(gè)人的理解是不報(bào)錯(cuò)的時(shí)候,程序只執(zhí)行到catch之前,報(bào)錯(cuò)后執(zhí)行catch后面的程序,result被重新賦值為20,所以返回到main函數(shù)的值為20
2019-03-26
當(dāng)div>0時(shí),div取1時(shí)成立,div--后div=0,所以程序會(huì)報(bào)錯(cuò)
2017-11-10
而且還有,我的try里面return了值,語(yǔ)句塊不是應(yīng)該結(jié)束嗎?但是finally還是執(zhí)行了,感覺熱評(píng)說(shuō)的不對(duì)啊。