亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

try catch finally

標簽:
Java

直接看代码:

代码一:

public class Test {	public static void main(String[] args) {		System.out.println(new Test().test());	}	static int test() {		int x = 1;		try {			return x;		} finally {			++x;		}	}}

结果:

1

这说明了什么问题?

finally块里面的代码总是在try块return之后执行?我们将代码稍作修改

代码二:

public class Test {	public static void main(String[] args) {		System.out.println(new Test().test());	}	static int test() {		int x = 1;		try {			return x;		} finally {			System.out.println("finally 块执行了...");		}	}}

结果:

finally 块执行了...1

此时finally块好像又是在return之前执行的,我们继续修改代码

代码三:

public class Test {	public static void main(String[] args) {		System.out.println(new Test().test());	}	static int test() {		int x = 1;		try {			return x;		} finally {			++x;			return x;		}	}}

结果:

2

发现此时返回的是2!!!,那么finally块中的代码到底是在return之前执行呢还是在之后和执行呢?其实两者都不是,

确切的说应该在return返回中执行,可以这样理解,在try块中的代码return之后,会将return的值存储到数据栈中,此时

并未完全返回,然后去执行finally块,在代码一中,执行finally快的时候,数据栈中已经存储了return的值为1,即使

++x也不能改变返回值了,而代码二中,尽管数据栈中已经存储了return的值为1,但是在执行finally块的时候又return了一次,

直接覆盖了数据栈中的1变为了++x,即2。

因此做以总结,finally块是在try块还未完全return的时候执行的!!执行完finally块之后才会完全返回。

點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消