1. 程式人生 > >面試題5:final,finally和finalize的區別

面試題5:final,finally和finalize的區別

問題:

final,finally和finalize的區別

/*final:最終的意思,可以修飾類,成員變數,成員方法
 * 修飾類,類不能被繼承
 * 修飾變數,變數是常量
 * 修飾方法,方法不能被重寫
 * finally:是異常處理的一部分,用於釋放資源。
 * 一般來說,程式碼肯定會執行,特殊情況:在執行到finally之前jvm退出了
 * finalize:是Object類的一個方法,用於垃圾回收
 * 
 * 2:如果catch裡面有return語句,請問finally裡面的程式碼還會執行嗎?
 *   如果會,請問是在return前,還是return後。
 *  面試回答: 會。前。
 * 
 * 準確的說,應該是在中間。

3:try...catch...finally的格式變形
 * A:try...catch...finally
 * B:try...catch
 * C:try...catch...catch...
 * D:try...catch...catch...finally
 * E:try...finally
 * 這種做法的目前是為了釋放資源。

public class FinallyDemo2 {
	public static void main(String[] args) {
		System.out.println(getInt());// 返回30
	}

	public static int getInt() {
		int a = 10;
		try {
			System.out.println(a / 0);// 分母除0丟擲異常
			a = 20;// 不會執行
		} catch (ArithmeticException e) {
			a = 30;
			// System.exit(0);
			return a; // 形成返回路徑return 30,而不是return a
			/*
			 * return a在程式執行到這一步的時候,這裡不是return a而是return 30;這個返回路徑就形成了。
			 * 但是呢,它發現後面還有finally,所以繼續執行finally的內容,a=40 再次回到以前的返回路徑,繼續走return
			 * 30;
			 */
		} finally {
			a = 40;
			System.out.println("a=" + a);// 會輸出40,單此時的a已經不會和上面發生關係了
			// return a;// 如果這樣結果就是40了。
		}
		//其實在下面的兩句程式碼在執行的時候不會執行,如果不寫會報錯,因為不一定會執行catch,就沒有了return 語句
		System.out.println("a=" + a);
		return a;// 返回的是30
	}
}


*/

相關推薦

試題5final,finallyfinalize區別

問題: final,finally和finalize的區別 /*final:最終的意思,可以修飾類,成員變數,成員方法  * 修飾類,類不能被繼承  * 修飾變數,變數是常量  * 修飾方法,方法不能被重寫  * finally:是異常處理的一部分,用於釋放資源。  * 一

試題final,finallyfinalize區別以及如果catch裡面有return語句,請問finally裡面的程式碼還會執行嗎?

/*  * 面試題:  * 1:final,finally和finalize的區別  * final:最終的意思,可以修飾類,成員變數,成員方法  *         修飾類,類不能被繼承  *         修飾變數,變數是常量  *         修飾方法,方法不能

試題5替換空格

計算 style happy off tar inter 因此 長度 內容 // 面試題5:替換空格// 題目:請實現一個函數,把字符串中的每個空格替換成"%20"。例如輸入“We are happy.”,// 則輸出“We%20are%20happy.”。 解題思路: 簡

final,finallyfinalize區別——學習筆記

不能 垃圾回收 一個 try語句 對象 finally 變量 使用 存在 final,finally和finalize的區別 final,finally和finalize的區別 final可以修飾類,不能被繼承 修飾方法,不能被重寫 修飾變量,只能賦值一次 fina

【劍指Offer學習】【試題5 從尾到頭列印連結串列】【思路】

方案一:(後進先出)遍歷連結串列,再從棧頂開始出個輸出結點的值,此時輸出的結點的順序已經反轉過來了。 先推進棧 再依次取出棧頂元素 方案二:遞迴。 判斷連結串列頭結點是否為空 將 next 結點作為下一次的實參 輸出當前棧頂元素。 缺點:當連結串

final,finallyfinalize區別

  final 修飾詞,用來修飾類 方法,變數,被修飾過的類不能被繼承,被修飾過的方法不能被重寫,被修飾過的變數 不能再被賦 值。   Finally 作為異常處理時的關鍵字,它裡面裝有,try catch 後一定會執行的程式碼塊   Fi

【劍指Offer學習】【試題5 從尾到頭列印連結串列】

題目:輸入個連結串列的頭結點,從尾到頭反過來打印出每個結點的值。 public class Test05 { /** * 結點物件 */ public s

return,抽象類與介面,物件序列化機制,thissuper,識別符號,breakcontinue以及return,final,finallyfinalize

               (2)介面中定義的成員變數預設為public static final,只能夠有靜態的不能被修改的資料成員,而且,必須給其賦初值,其所有的成員變數只能被public,abstract這兩個關鍵字修飾。抽象類可以有自己的成員變數,還可以有非抽象的成員方法,抽象類的成員變數預設為de

劍指offer試題5替換空格(Java 實現)

題目: 請實現一個函式,將一個字串中的空格替換成“%20”。例如,當字串為We Are Happy.則經過替換之後的字串為We%20Are%20Happy。 測試用例: 功能測試:輸入的字串包含空格(最前面、中間、最後面、連續多個空格) 邊界測試:輸入的字串沒有空格。

試題5標頭檔案中的ifndef/define/endif有什麼作用?

在一個大的軟體工程裡面,可能會有多個檔案同時包含一個頭檔案,當這些檔案編譯連結成一個可執行檔案時,就會出現大量重定義的錯誤。在標頭檔案中實用#ifndef #define #endif能避免標頭檔案

阿里開發者招聘節 | 試題05 關於epollselect的區別,哪些說法是正確的?

為幫助開發者們提升面試技能、有機會入職阿里,雲棲社群特別製作了這個專輯——阿里巴巴資深技術專家們結合多年的工作、面試經驗總結提煉而

試題思考BS與CS的區別與聯系

地域 補充 for 訪問 多層 技術 機械 explore 管理 簡單的理解: bs是瀏覽器(browser)和服務器(server) cs是靜態客戶端程序(client)和服務器(server) 區別在於,雖然同樣是通過一個程序連接到服務器進行網絡通訊,但是bs結構的

JAVA試題解惑系列 – finalfinallyfinalize區別

這是一道再經典不過的面試題了,我們在各個公司的面試題中幾乎都能看到它的身影。 final、finally和finalize雖然長得像孿生三兄弟一樣,但是它們的含義和用法卻是大相徑庭。 這一次我們就一起來回顧一下這方面的知識。 final關鍵字 我們首先來說說final。它可以用於以下四個地方: 1. 定義變

試題思考java中快速失敗(fail-fast)安全失敗(fail-safe)的區別是什麽?

無效對象 ring list 改變 ava ret fail last 原理 一:快速失敗(fail—fast) 在用叠代器遍歷一個集合對象時,如果遍歷過程中對集合對象的內容進行了修改(增加、刪除、修改),則會拋出Concurrent Modificat

試題思考Cookie Session的區別

服務器端 活動 應用程序 重要 字符串 相關 屬性的方法 回來 serve 面試回答: 1、cookie數據存放在客戶的瀏覽器上,session數據放在服務器上。 2、cookie不是很安全,別人可以分析存放在本地的cookie並進行cookie欺騙,考慮到安全應當使用se

劍指offer 試題41為s的兩個數字vs為s的連續正數序列 c++

題目:輸入一個遞增排序的陣列和一個數字S,在陣列中查詢兩個數,使得他們的和正好是S,如果有多對數字的和等於S,輸出兩個數的乘積最小的。 思路:兩個 指標,start從前往後遍歷,end從後往前遍歷,如果當前前後之和大於s,end--,如果當前前後之和小於s,start++,這樣能找出乘積最小的和

finalfinallyfinalize區別

final:可以修飾類,成員變數,成員方法 修飾類: 類不能被繼承 修飾變數: 變數是常量 修飾方法: 方法不能被重寫 finally:是異常處理的一部分,用於釋放資源。 一般來說,程式碼肯定會執行,特殊情況:在執行到finally之前

試題5——C中的mallocC++中的new有什麼區別

malloc和new有以下區別: (1)new,delete是操作符,只能在C++中使用; (2)malloc,free是函式,可以覆蓋,C,C++中都可以使用; (3)new可以呼叫物件的建構函式,對應的delete呼叫相應的解構函式; (4)malloc僅僅分配記憶體,free僅僅回收記

劍指offer{試題31連續子陣列的最大}

思路: public class test31 { public int findMaxSum(int[] arr) { if(arr.length==0) return 0; int cur = arr[0];