Finally語句塊的運行

一、finally語句塊是否一定運行?

Java中異常捕獲機制try...catch...finally塊中的finally語句是不是一定會被運行?非常多人都說不是。當然他們的回答是正確的,經過試驗。至少下面有兩種情況下finally語句是不會被運行的:

(1)異常捕獲機制finally塊與try和catch塊是關聯的。既然是關聯的假設try...catch...finally語句邏輯上達不到沒有被運行,如在try語句之前就返回了,這樣finally語句就不會運行,這也說明了finally語句被運行的必要而非充分條件是:對應的try...catch...finally語句一定被運行到。

(2)在try塊中有System.exit(0);這種語句,System.exit(0);是終止Java虛擬機JVM的。連JVM都停止了。所以都結束了,當然finally語句也不會被運行到。


二、finally語句塊是否一定會運行,遇到return怎么辦?

public class FinallyTest1 {public void  test(){try{System.out.println("Try statement block……");return ;}catch(Exception e){System.out.println("Exception statement block……");}finally{System.out.println("在try語句塊中return你再強大,也影響不了我finally語句塊的繼續運行,嘿嘿……");}}public static void main(String[] args) {FinallyTest1 t=new FinallyTest1();t.test();}
}/*運行結果:Try statement block……在try語句塊中return你再強大,也影響不了我finally語句塊的繼續運行,嘿嘿……總結:finally語句塊的運行不會受到try語句塊中的return的影響。

*/


三、finally語句塊不受return語句的影響。哪finally語句塊究竟是在return之前還是之后運行?

public class FinallyTest2 {private int test(){	int a=520;try{return a+=1314000;}catch(Exception e){System.out.println();}finally{System.out.println("Finally運行,a值為:"+a);a=0;System.out.println("小鬧了一下(a=0),嘿嘿!

"); } return 250; } public static void main(String[] args) { FinallyTest2 t=new FinallyTest2(); System.out.println("方法返回(return) :"+t.test()); } } /* 運行結果: Finally運行,a值為:1314520 小鬧一下(a=0),嘿嘿。 方法返回(return) :1314520 總結: 在try語句塊中運行到了return時,并非馬上返回而是把return要返回的值計算出來先保存到內存中, 然后去運行finally語句塊。然后再返回之前保存要return的值。

*/



四、在返回之前運行在finally塊中的語句,哪finally塊中也return會怎么樣呢?

public class FinallyTest3 {//@SuppressWarnings 批注同意您選擇性地取消特定代碼段(即,類或方法)中的警告。@SuppressWarnings("finally")	private int test(){	try{return 520;}catch(Exception e){System.out.println();}finally{return 5820;	//此處return語句會產生警告}}public static void main(String[] args) {FinallyTest3 t=new FinallyTest3();System.out.println("方法返回(return) :"+t.test());}
}
/*
執行結果:方法返回(return) :5820總結:假設try和finally都有return 語句。則返回值以最后一個return語句的值作為返回,前面的一個被默認的犧牲啦。
*/



本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/281301.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/281301.shtml
英文地址,請注明出處:http://en.pswp.cn/news/281301.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

vue-cli 3.0 跨域請求代理

官方文檔中指明,跨域請求可以通過配置vue.config.js中的devServer.proxy選項來進行配置。 這個選項配置的本質實際上就是http-proxy-middleware中間件的用法,和Webpack-dev-server的proxy一樣。 vue-cli 3.0中介紹了兩種常見的用法: modul…

小米人員架構調整:組建中國區,王川任總裁

12月13日上午,小米內部發布人員調整公開信,信中傳達了兩個重要內容:將銷售與服務部改組為中國區,任命集團高級副總裁王川兼任中國區總裁。 在今年9月份,也就是小米上市前夕,雷軍在一封內部信中宣布對公司組…

在 .NET 7上使用 WASM 和 WASI

WebAssembly(WASM)和WebAssembly System Interface(WASI)為開發人員開辟了新的世界。.NET 開發人員在 Blazor WebAssembly 發布時熟悉了 WASM。Blazor WebAssembly 在瀏覽器中基于 WebAssembly 的 .NET 運行時上運行客戶端。WASI通…

Java基礎 五 方法

方法 1.1 方法概述 在我們的日常生活中,方法可以理解為要做某件事情,而采取的解決辦法。 如:小明同學在路邊準備坐車來學校學習。這就面臨著一件事情(坐車到學校這件事情)需要解決,解決辦法呢&#xf…

django rest framework 過濾 lim分頁

一.過濾 1.首先引用diango 自帶的過濾配置 2.導入模塊 from django_filters.rest_framework import DjangoFilterBackend from django_filters import rest_framework as filters 3.一種簡單的過濾: class BookView(ModelViewSet):queryset Book.objects.all()serializer_clas…

MySQL用戶及權限管理

MySQL用戶及權限管理查看用戶及權限查看用戶及作用域(使用范圍)查看用戶權限創建用戶及授權字段參數用戶管理使用命令提示符登錄MySQL mysql -h localhost -u root -p查看用戶及權限 mysql中的用戶信息和權限等都存儲在一個名為mysql的數據庫中。其中主…

附近有什么?8款可以查周邊的App

如今科技發達的時代,手機的功能不僅僅只是能通訊聊天,而是逐漸的走進了人們的生活中。因為有了APP,我們的生活才更豐富,并且有很多是我們生活中不可缺少的軟件,而這些軟件便是根據手機中的GPS定位系統而來的。簡單來說…

MyEclipse小問題與漢字處理

今天在使用MyEclipse時,遇到工作目錄報錯(如上圖),解決方法如下:找到對應工作區(查看工作區的方法為:單擊File → Switch Workspace 即可)依次打開 .metadata文件夾 → .plugins文件夾 → org.eclipse.core.runtime文件夾 → .set…

關系數據庫設計及優化原則

一直以來就想總結一下自己這么多年來在關系數據庫上積累的經驗。奈何自己是一個比較懶的人一直不想動手去寫。扎克伯格曾說過:“想做一件事的話,最好的辦法就是先開始”。索性就先寫一點東西,這些東西不會太長,自然也不會包括太多…

java B2B2C springmvc mybatis電子商務平臺源碼-消息隊列之RocketMQ

RocketMQ出自阿里公司的開源產品,用 Java 語言實現,在設計時參考了 Kafka,并做出了自己的一些改進,消息可靠性上比 Kafka 更好。RocketMQ在阿里集團被廣泛應用在訂單,交易,充值,流計算&#xff…

VSCode同步設置

2022/4/1 更新 剛剛發現還有人在看這篇文章,這里更新一下,VSCode 從1.48版本開始已經內置了同步功能,可以不用再使用Settings Sync插件了。 點擊左下角的用戶或者設置的 Sign in to Sync Setting,使用GitHub或者Microsoft賬戶登…

配置三臺服務器組成的ELK集群(二)

上一篇里主要是介紹了ES和ES-Head的安裝過程,這一篇繼續介紹ELK集群的其他核心組件安裝過程。 五、安裝Logstash: 本案的Logstash安裝在10.113.130.117上;燃鵝,Logstash也可以利用多臺組成集群,如果未來單臺處理不過來…

Discuz X3.2源碼解析 discuz_application類(轉自百度)

discuz_application在/source/class/discuz/discuz_application.php中。 discuz_application繼承自抽象類discuz_base discuz_application主要實現對運行環境、配置、輸入、輸出、數據庫、設置、用戶、session、移動模塊、計劃任務、手機預覽等方面的初始化。 instance()函數來…

.NET性能優化-是時候換個序列化協議了

計算機單機性能一直受到摩爾定律的約束,隨著移動互聯網的興趣,單機性能不足的瓶頸越來越明顯,制約著整個行業的發展。不過我們雖然不能無止境的縱向擴容系統,但是我們可以分布式、橫向的擴容系統,這聽起來非常的美好&a…

Kubernetes-基于Helm安裝部署高可用的Redis

1、Redis簡介 Redis是一個開放源代碼(BSD許可證)的代理,其在內存中存儲數據,可以代理數據庫、緩存和消息。它支持字符串、散列、列表、集合和位圖等數據結構。Redis 是一個高性能的key-value數據庫, 它在很大程度改進了…

Vue 深度監聽和初始綁定

vue的監聽屬性普通方式無法監聽對象內部屬性的改變,并且初始化時不會監聽數據對象。 vue為監聽屬性提供了一種對象方法 watch: {option.size: {// handler為默認執行的方法handler (newValue, oldValue) {this.size newValue},// 立即執行handler方法…

markdown流程圖畫法小結

markdown流程圖畫法小結markdown畫圖流程圖 最簡單的流程圖為例mermaid! graph TD A --> B //在沒有(),[].{}等括號的情況之下,圖標默認名字就是字母 A --> C C --> D B --> D 給圖標添加名字,改變只有矩陣圖形,在箭頭上添加文字…

hihocoder 1689 - 推斷大小關系(圖論+二分)

題目鏈接 https://vjudge.net/problem/HihoCoder-1689有N個整數A1, A2, ... AN&#xff0c;現在我們知道M條關于這N個整數的信息。每條信息是&#xff1a;Ai < Aj 或者 Ai Aj 小Hi希望你能從第一條信息開始依次逐條處理這些信息。一旦能推斷出A1和AN的大小關系就立即停止。…

32歲京東畢業程序員,走投無路當了外企外包,閑得心里發慌,到點下班渾身不自在!...

??當一位京東程序員進入外企當外包會怎么樣&#xff1f;順利躺平&#xff0c;實現wlb&#xff08;工作生活平衡&#xff09;嗎&#xff1f;未必&#xff0c;因為人是一種很奇怪的動物。這位網友說&#xff1a;32歲京東畢業程序員&#xff0c;找了幾個月工作一直沒有合適的&am…

SpringBoot+Shiro學習(四):Realm授權

上一節我們講了自定義Realm中的認證&#xff08;doGetAuthenticationInfo&#xff09;&#xff0c;這節我們繼續講另一個方法doGetAuthorizationInfo授權 授權流程 流程如下&#xff1a; 首先調用Subject.isPermitted/hasRole接口&#xff0c;其會委托給SecurityManager&#x…