finally 與 return的執行順序

一、第一次試驗

    public static void main(String[] args) throws InterruptedException {System.out.println(aaa(null));}private static StringBuilder aaa(Integer i) throws InterruptedException {StringBuilder sb = new StringBuilder();try {i.toString();return sb;} catch (Exception e) {sb.append("1");return sb;}finally {sb.append("2");Thread.sleep(5000);System.out.println("sb:" + sb);}}

結果為

sb:12
12

二、第二次試驗

    public static void main(String[] args) throws InterruptedException {System.out.println(aaa(null));}private static String aaa(Integer i) throws InterruptedException {String a;try {i.toString();a = "1";return a;} catch (Exception e) {a = "2";return a;}finally {a = "3";Thread.sleep(5000);System.out.println("a: " + a);}}

結果為

a: 3
2

三、分析

1、通過線程睡眠可以判斷出 finally 在 return 前執行的

2、return 后面的代碼 會根據所在行先后順序執行, return的是堆里的對象

3、第一個實驗因為修改了堆里的對象所以影響了最終結果

四、驗證

    private static String aaa(Integer i) throws InterruptedException {String a;try {i.toString();a = "1";return a;} catch (Exception e) {a = "2";}finally {a = "3";Thread.sleep(5000);System.out.println("a: " + a);}return a;}

結果為

a: 3
3

結論正確

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

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

相關文章

Git安裝教程

簡介 Git 是目前全球最流行的分布式版本控制系統(Distributed Version Control System, DVCS),核心作用是追蹤文件修改歷史、支持多人協同開發,并能高效管理代碼(或任何文本類文件)的版本迭代。它由 Linux…

Linux安裝RTL8821CE無線網卡驅動

1. 查看網卡芯片$ lspci | grep Net 01:00.0 Network controller: Realtek Semiconductor Co., Ltd. RTL8821CE 802.11ac PCIe Wireless Network Adapter2. 預備配套sudo apt install -y dkms git3. 下載驅動并安裝git clone https://github.com/tomaspinho/rtl8821ce.git cd r…

vue3存儲/獲取本地或會話存儲,封裝存儲工具,結合pina使用存儲

目錄 一、基本用法(原生 API) 1. 存儲數據 2. 獲取數據 3. 刪除數據 二、Vue3 中封裝成工具函數(推薦) 三、以上工具函數在 Vue3 組件中使用 1. 在選項式 API 中使用 2. 在組合式 API(setup 語法糖)…

【Flink】DataStream API:基本轉換算子、聚合算子

目錄基本轉換算子映射(map)過濾(filter)扁平映射聚合算子按鍵分區(keyBy)簡單聚合(sum/min/max/minBy/maxBy)規約聚合(reduce)基本轉換算子 有如下POJO類用來…

從淘寶推薦到微信搜索:查找算法如何支撐億級用戶——動畫可視化

本篇技術博文摘要 🌟 本文通過動畫可視化深入解析數據結構中的核心查找算法,從基礎概念到高階應用,全面覆蓋順序查找、折半查找、分塊查找、B樹/B樹及散列查找的核心原理與實現細節。文章以動態演示為核心工具,直觀展現算法執行過…

圖像正向扭曲反向扭曲

在圖像處理領域,正向扭曲(Forward Warping)和反向扭曲(Backward Warping)是兩種核心的圖像坐標映射與像素重采樣技術,核心區別在于“像素映射的方向”——是從“原始圖像”到“目標圖像”,還是從…

【C語言】 第三課 函數與棧幀機制詳解

1 函數的基本概念 在C語言中,函數是程序的基本執行單元。一個函數的定義包括返回類型、函數名、參數列表和函數體。例如: int add(int x, int y) { // 函數定義int z x y;return z; }在使用函數前,通常需要聲明( declaration&am…

多個大體積PDF文件怎么按數量批量拆分成多個單獨文件

在現代社會中,電子文檔在我們的身邊無所不在,而PDF文件時我們日常接觸非常多的文檔類型之一。PDF由于格式穩定、兼容性好,因此經常被用于各行各業。但是,我們平時在制作或搜集PDF文件時,文件太大,傳輸和分享…

ansible-角色

角色 一、利用角色構造ansible playbook 隨著開發更多的playbook,會發現有很多機會重復利用以前編寫的playbook中的代碼。或許,一個用于為某一應用配置MySQL數據庫的play可以改變用途。通過利用不同的主機名、密碼和用戶來為另一個應用配置MySQL數據庫。…

git命令行打patch

在 Git 里打 patch(補丁)其實就是把某些提交的改動導出來,生成一個 .patch 文件,方便別人用 git apply 或 git am 打進代碼里。🔹 常用方式1. 基于提交導出 patch導出最近一次提交:git format-patch -1 HEA…

文華財經多空提示指標公式 變色K線多空明確指標 文華wh6贏順多空買賣提示指標

XX:240C;YY:MA(C,1);A1:POW(XX,2)/360-POW(YY,2)/260;A5:EMA2(EMA2(A1,20),5),LINETHICK2;A6:A5*0.9999,COLORSTICK;A20:EMA2(EMA2(A5,20),5),LINETHICK2;A60:EMA2(EMA2(A20,20),5),LINETHICK2;支撐:HHV(A5,30),COLORRED;天數:BARSSINCE(A5HHV(A5,0));YL:REF(A5,1)2.79-天數*0.…

記錄一個防重Toast

當我們已經對某個按鈕做了防暴力點擊,但是依然在業務上有些復雜交互的情況,需要我們封裝一個防重Toast。針對這類情況,可以直接使用下面的showDebouncedToastdata class ToastInfo(val id: Any? null,val command: MediaCommandDebouncer.M…

在線測評系統---第n天

主要完成了退出登錄前后的代碼的實現,以及題目列表的查詢1.退出登錄前端引入了全局前置守衛,如果cookie里面沒有token則直接跳轉到login頁面;有則直接跳轉到layout頁面,無需重新登錄后端接收到退出登錄,將token置為無效…

機器學習從入門到精通 - 卷積神經網絡(CNN)實戰:圖像識別模型搭建指南

機器學習從入門到精通 - 卷積神經網絡(CNN)實戰:圖像識別模型搭建指南 各位,是不是覺得那些能認出照片里是貓還是狗、是停車標志還是綠燈的AI酷斃了?今天咱們就擼起袖子,親手搭建一個這樣的圖像識別模型!別擔心不需要你…

python sqlalchemy模型的建立

SQLAlchemy 是一個功能強大的 Python SQL 工具包和對象關系映射(ORM)庫,用于管理和操作關系數據庫。它為 Python 開發者提供了一種用 Python 對象來運行和管理 SQL 數據庫的方式。 目錄 SQLAlchemy 的兩個核心組成部分 SQLAlchemy 的主要功…

Rust中使用RocksDB索引進行高效范圍查詢的實踐指南

在當今海量數據處理場景下,高效的范圍查詢能力成為許多系統的關鍵需求。RocksDB作為一款高性能的嵌入式鍵值存儲引擎,其獨特的LSM樹結構和索引設計為范圍查詢提供了底層支持。本文將深入探討如何在Rust中利用RocksDB的特性來實現高效范圍查詢,從鍵的設計原則到迭代器的工程實…

怎么做到這一點:讓 Agent 可以像人類一樣 邊聽邊想、邊說,而不是“等一句話 → 一次性返回”

要實現“邊聽邊想、邊說”,核心是把整條鏈路做成全雙工、分片流式、可中斷的流水線: ASR 連續吐字 →(短緩沖)→ LLM 連續出 token(可搶斷)→ TTS 連續合成并播放(可打斷/續播)。 下…

Ubuntu 22.04 網絡服務安裝配置

Ubuntu 22.04 網絡服務安裝配置 一鍵安裝所有服務 # 更新系統 sudo apt update# 安裝所有服務 sudo apt install -y openssh-server vsftpd telnetd inetutils-inetd ftp telnet# 啟動所有服務 sudo systemctl start ssh vsftpd inetutils-inetd sudo systemctl enable ssh vsf…

【Unity知識分享】Unity實現全局監聽鍵鼠調用

1、實現該功能前,優先學習Unity接入dll調用Window系統接口教程 【Unity知識分享】Unity接入dll調用Window系統接口 2、初始化動態連接庫后,進行腳本功能實現 2.1 創建腳本KeyBoardHook.h和KeyBoardHook.cpp,實現功能如下 KeyBoardHook.h …

深度學習篇---MNIST:手寫數字數據集

下面我將詳細介紹使用 PyTorch 處理 MNIST 手寫數字數據集的完整流程,包括數據加載、模型定義、訓練和評估,并解釋每一行代碼的含義和注意事項。整個流程可以分為五個主要步驟:準備工作、數據加載與預處理、模型定義、模型訓練和模型評估。# …