在java中finally
Ⅰ java中,finally在try語句塊中的return前執行還是後執行
1、不管有木有出現異常,finally塊中代碼都會執行;
2、當try和catch中有return時,finally仍然會執行;
3、finally是在return後面的表達式運算後執行的(此時並沒有返回運算後的值,而是先把要返回的值保存起來,管finally中的代碼怎麼樣,返回的值都不會改變,任然是之前保存的值),所以函數返回值是在finally執行前確定的;
4、finally中最好不要包含return,否則程序會提前退出,返回值不是try或catch中保存的返回值。
Ⅱ java為什麼需要finally
無論是否出現異常不也要執行嗎?這句話是有問題的,有些異常如果不處理,也就不會繼續下去了。即程序從catch里改變控制流,不會執行後面的語句。加了finally,可以保證即使因為異常,後面的代碼不會被執行,但是finally裡面的語句還是會執行,這樣可以釋放一些申請的資源~或者做一些其他工具,比如作profiling統計等。
你可以在catch裡面加個return來模擬類似情況,看看後面的語句會不會執行?
看看finally子常式裡面的語句會不會執行,以及他們的執行順序...
Ⅲ finally在java的用法
try的范圍內存在exception的話,就會在exception的位置跳到exception哪裡,然後執行完exception之後就馬上進入finally。
假如exception范圍內存在return這些的也會執行finally
假如try范圍內不存在exception的話,就執行完try范圍內代碼之後進入finally執行,finally代碼
其實,一般finally寫的代碼就是流的關閉語句,
假如還是不明白,試一下運行我下面寫的幾個代碼就知道的了。假如try不存在exception的話:
try{
System.out.println("try");
}catch(Exception e)
{
System.out.println("Exception");
}
finally{
System.out.println("Finally");
}
假如try中存在exception的:
try{
String demo = null;
demo.split(";");
System.out.println("try");
}catch(Exception e)
{
System.out.println("Exception");
}
finally{
System.out.println("Finally");
}
假如try中存在exception,然後exception中存在跳出語句的:
try{
String demo = null;
demo.split(";");
System.out.println("try");
}catch(Exception e)
{
System.out.println("Exception");
return;
}
finally{
System.out.println("Finally");
}
假如try中不存在exception,但是try中存在跳出語句的:
try{
System.out.println("try");
return;
}catch(Exception e)
{
System.out.println("Exception");
}
finally{
System.out.println("Finally");
}
走過那4個方法你就懂得呢
Ⅳ 試解釋Java與Finally的意義及用法
是想知道finally的用處吧.我給你舉幾個例子.
當我們在程序中需要與文件,與資料庫進行操作的時候.這時候finally關鍵字就是大顯身手的時刻了.比如:當打開一個文件後,在程序操作的過程中可能發生了某種異常,這時候程序就會把異常向外拋出,造成程序的中斷執行,因此我們已經無法對文件進行關閉.當在try的結束位置加上finally,可以把文件關閉的操作放在finally語句塊中.這樣無論發生不發生異常,finally中的代碼都會被執行,這就避免了文件可能沒有被關閉的情況.
try
{
//可能發生異常的代碼
}catch(Exception e)
{
//捕獲異常
}finally
{
//必要的操作,無論異常是否發生,都會被執行
}
尤其是在操作資料庫的時候,如果不用finally,那麼一旦發生異常,連接就無法關閉,會造成資料庫的連接資源耗盡.
這就是Java 中finally的作用.
Ⅳ java中的「try - catch -finally」結構中的「finally」有哪些用途
可以這么理解
try塊中的內容是在無異常發生時執行到結束
catch塊中的內容,是在try塊中內容發生catch所聲明的異常時,跳轉到catch塊執行
finally塊則是無論是否發生異常,都會執行finally塊的內容
所以,代碼邏輯中有需要無論發生什麼都必須執行的代碼,則可以放在finally塊中
例如:最常見的就是把關閉connection、釋放資源等的代碼放在finally塊中
Ⅵ java中final,finally和finalize的區別
1. final
在java中,final可以用來修飾類,方法和變數(成員變數或局部變數)。下面將對其詳細介紹。
1.1 修飾類
當用final修飾類的時,表明該類不能被其他類所繼承。當我們需要讓一個類永遠不被繼承,此時就可以用final修飾,但要注意:
final類中所有的成員方法都會隱式的定義為final方法。
1.2 修飾方法
使用final方法的原因主要有兩個:
(1) 把方法鎖定,以防止繼承類對其進行更改。
(2) 效率,在早期的java版本中,會將final方法轉為內嵌調用。但若方法過於龐大,可能在性能上不會有多大提升。因此在最近版本中,不需要final方法進行這些優化了。
final方法意味著「最後的、最終的」含義,即此方法不能被重寫。
注意:若父類中final方法的訪問許可權為private,將導致子類中不能直接繼承該方法,因此,此時可以在子類中定義相同方法名的函數,此時不會與重寫final的矛盾,而是在子類中重新地定義了新方法。
1.3 修飾變數
final成員變數表示常量,只能被賦值一次,賦值後其值不再改變。類似於C++中的const。
當final修飾一個基本數據類型時,表示該基本數據類型的值一旦在初始化後便不能發生變化;如果final修飾一個引用類型時,則在對其初始化之後便不能再讓其指向其他對象了,但該引用所指向的對象的內容是可以發生變化的。本質上是一回事,因為引用的值是一個地址,final要求值,即地址的值不發生變化。
final修飾一個成員變數(屬性),必須要顯示初始化。這里有兩種初始化方式,一種是在變數聲明的時候初始化;第二種方法是在聲明變數的時候不賦初值,但是要在這個變數所在的類的所有的構造函數中對這個變數賦初值。
當函數的參數類型聲明為final時,說明該參數是只讀型的。即你可以讀取使用該參數,但是無法改變該參數的值。
2. finally
finally作為異常處理的一部分,它只能用在try/catch語句中,並且附帶一個語句塊,表示這段語句最終一定會被執行(不管有沒有拋出異常),經常被用在需要釋放資源的情況下。(×)(這句話其實存在一定的問題)
很多人都認為finally語句塊一定會執行,但真的是這樣么?答案是否定的,例如下面這個例子:
只有與finally對應的try語句塊得到執行的情況下,finally語句塊才會執行。以上兩種情況在執行try語句塊之前已經返回或拋出異常,所以try對應的finally語句並沒有執行。
3. finalize
finalize()是在java.lang.Object里定義的,也就是說每一個對象都有這么個方法。這個方法在gc啟動,該對象被回收的時候被調用。其實gc可以回收大部分的對象(凡是new出來的對象,gc都能搞定,一般情況下我們又不會用new以外的方式去創建對象),所以一般是不需要程序員去實現finalize的。
特殊情況下,需要程序員實現finalize,當對象被回收的時候釋放一些資源,比如:一個socket鏈接,在對象初始化時創建,整個生命周期內有效,那麼就需要實現finalize,關閉這個鏈接。
使用finalize還需要注意一個事,調用super.finalize();
一個對象的finalize()方法只會被調用一次,而且finalize()被調用不意味著gc會立即回收該對象,所以有可能調用finalize()後,該對象又不需要被回收了,然後到了真正要被回收的時候,因為前面調用過一次,所以不會調用finalize(),產生問題。 所以,推薦不要使用finalize()方法,它跟析構函數不一樣。
Ⅶ java中final和finally的區別
final—修飾符(關鍵字)如果一個類被聲明為final,意味著它不能再派生出新的子類,不能作為父類被繼承。因此一個類不能既被聲明為 abstract的,又被聲明為final的。將變數或方法聲明為final,可以保證它們在使用中不被改變。被聲明為final的變數必須在聲明時給定初值,而在以後的引用中只能讀取,不可修改。被聲明為final的方法也同樣只能使用,不能重載。
finally—在異常處理時提供 finally 塊來執行任何清除操作。如果拋出一個異常,那麼相匹配的 catch 子句就會執行,然後控制就會進入 finally 塊(如果有的話)
Ⅷ java finally什麼時候執行
只要代碼進入了try
finally無論代碼是否出現異常都會被執行
涉及到 return 和 finally 的執行順序
在 return 之前,finally 會被執行,但是值得注意的是,finally 中的代碼不會對返回值造成影響
- 主功能-重定向功能重定向-普通模式重定向-完整模式
- 附加1-去廣告功能
- 去廣告-原始模式去廣告-單列普通
去廣告-單列居中去廣告-雙列居中 - 附加2-Favicon功能
- 附加3-編號功能
- 附加4-下劃線
- 聯系作者,提建議,尋求幫助,腳本定製點我
保存
Ⅸ java中的return和finally誰先執行
finally先執行.
可以形象的說,方法在順序化的一直往下走,
走著走著,發現了Rerurn(並未執行),它知道它快活不下去了,臨死前.他就去找Finally,讓Finally把事情做完.
這種情況在Debug的時候比較明顯,走到Return所在行,就進Finally,然後在回到Rerurn,做返回