導航:首頁 > 編程語言 > java介面變數finall

java介面變數finall

發布時間:2023-06-14 00:13:38

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語言如何進行異常處理,關鍵字:throws,throw,try,catch,finally分別代表什麼意義

package com.fml.resource;
import javax.swing.Icon;
import javax.swing.JOptionPane;
public class CaiShuZi4JOptionPane {
/**
* @param args
*/
public static void main(String[] args) {
Icon icon = null;
boolean bl = false;
int put = 0;
int c = (int) (((Math.random())*100)+1); //獲取一個1-100的隨機數
System.out.println("你獲取的隨機數是:"+c); //列印你的隨機數字

String str1 = (String) JOptionPane.showInputDialog(null,"請輸入你的猜測數字(1-100): ","猜數字游戲",JOptionPane.PLAIN_MESSAGE,icon,null,"在這輸入"); //第一次輸入你的猜測數字

if(str1==null){
JOptionPane.showMessageDialog(null, "你已經取消了本次游戲"); //如果你點取消那麼本次游戲結束
}else{
bl = num(str1); //判斷是輸入的是不是數字或者是整數
if(true==bl){ //如果是數字的話進入與隨機數比較的程序
System.out.println("你輸入的數字是:"+str1); //列印你輸入的數字
put = Integer.valueOf(str1);

for(int i = 4;i > 0;i--){ //i是你可以猜測的次數
if(put==c){
JOptionPane.showMessageDialog(null, "恭喜你猜對了,正確答案是:"+c+"。"); //如果你猜對了就直接結束循環
break;
}else if(put>c){ //如果輸大了就讓你再次從新輸入
str1 = (String) JOptionPane.showInputDialog(null,"你的輸入過大。你還有"+i+"次機會,請重新輸入: ","猜數字游戲",JOptionPane.PLAIN_MESSAGE,icon,null,"在這輸入");
if(str1==null){
JOptionPane.showMessageDialog(null, "你已經取消了本次輸入");
break;
}else{
bl =num(str1);
if(true==bl){
put = Integer.valueOf(str1);
}else{
JOptionPane.showMessageDialog(null, "你的輸入不正確,請重新輸入");
}
}
}else if(put<c){ //如果你輸小了也讓你從新輸入
str1 = (String) JOptionPane.showInputDialog(null,"你的輸入過小。你還有"+i+"次機會,請重新輸入: ","猜數字游戲",JOptionPane.PLAIN_MESSAGE,icon,null,"在這輸入");
if(str1==null){
JOptionPane.showMessageDialog(null, "你已經取消了本次輸入");
break;
}else{
bl =num(str1);
if(true==bl){
put = Integer.valueOf(str1);
}else{
JOptionPane.showMessageDialog(null, "你的輸入不正確,請重新輸入");
}
}
}
}


}else if(bl==false){ //這個 是你第一次如果填寫的不是數字的話也會結束本次游戲
JOptionPane.showMessageDialog(null, "請您下次按要求填寫。本次游戲結束");
}
if(true==bl && c!=put){ //如果你i次都沒猜對,那麼就直接告訴你這個數十什麼
JOptionPane.showMessageDialog(null, "很遺憾你沒能猜對,這個數字是:"+c+".");
}

}

}

public static boolean num(String value){ //一個靜態方法,判斷你輸入的是不是數字
try {
Integer.parseInt(value);
return true;
} catch (Exception e) {
return false;
}

}
}

你先看看我的實例,最下面的一個就是捕獲異常和進行處理的方法

在整個JAVA的異常處理中,實際上也是按照面向對象的方式進行處理,處理的步驟如下:

1、一旦產生異常,將會產生一個異常類的實例化對象。

2、在try語句中對這個異常對象進行捕獲。

3、產生的異常對象與catch語句中的各個異常類型進行匹配,如果匹配成功,則執行catch語句中的代碼

Try{


}catch(…){

} finally{

……

}

這個finally如果沒有中途退出最後是一定會執行到的。

throws是用在主類前面的,是讓他的父類來處理這個異常。不在此類中處理

Ⅳ 關於JAVA中finally的問題....

首先finally 結構使代碼總會執行,而不管有無異常發生
其次try, catch, finally中fianlly的throw/return的級別最高,

舉例來說
public class Finally{
public static void main(String[] args)
{
Finally e=new Finally();
System.out.println(e.tryThis());
}

public void thooo() throws Exception {
throw new Exception();
}

public int tryThis()
{
try{
System.out.println("1");
thooo();
return 1;
}catch(Exception ex){
System.out.println("2");
return 2;
}finally{
System.out.println("4");
return 3;
}
}
}
上面這個程序輸出的結果是
1
2
4
3

看到么?try和catch的return根本沒有作用,因為finally的代碼優先順序最高!

不過像以上你的應用是不合理的,通常在finally語句中是進行資源的清除工作。如關閉打開的文件和通訊句柄,或者資料庫鏈接等。
如果finally裡面沒有return或者exception,那麼你的catch語句的exception 或者 return 語句將被如期執行了。

哎~~~10分好累

Ⅳ java中的finally怎麼使用

try {
語句塊:可能拋出異常的語句
} catch (Exception e) {
捕獲異常
}
finally{
無論是拋出了異常還是沒有拋出異內常都要執行容的語句塊
}

Ⅵ 試解釋Java與Finally的意義及用法

一、 finally:java的一種異常處理機制。
finally是對Java 異常處理模型的最佳補充。finally 結構使代碼總會執行,而不管有無異常發生。使用 finally 可以維護對象的內部狀態,並可以清理非內存資源。特別是在關閉資料庫連接這方面,如果程序員把資料庫連接的close()方法放到finally中,就會大大降低程序出錯的幾率。
二、在java中的finally關鍵一般與try一起使用,在程序進入try塊之後,無論程序是因為異常而中止或其它方式返回終止的,finally塊的內容一定會被執行
寫個例子來說明下:
[java] view plainprint?
<pre class="java" name="code">package com.teedry.base;

public class TryAndFinallyTest {

public static void main(String[] args) throws Exception{
try{
int a = testFinally(2);
System.out.println("異常返回的結果a:"+a);
}catch(Exception e){
int b = testFinally(1);
System.out.println("正常返回的結果b:"+b);
}
int b = testFinally(3);
System.out.println("break返回的結果:"+b);

b = testFinally(4);
System.out.println("return返回的結果:"+b);

}

static int testFinally(int i) throws Exception{
int flag = i;
try{//一旦進去try范圍無論程序是拋出異常或其它中斷情況,finally的內容都會被執行
switch(i){
case 1:++i;break;//程序 正常結束
case 2:throw new Exception("測試下異常情況");
case 3:break;
default :return -1;
}
}finally{
System.out.println("finally coming when i="+flag);
}
return i;
}
}
</pre><br>
<pre></pre>
<p>執行結果如下:</p>
<p>finally coming when i=2<br>
finally coming when i=1<br>
正常返回的結果b:2<br>
finally coming when i=3<br>
break返回的結果:3<br>
finally coming when i=4<br>
return返回的結果:-1</p>
<p> </p>
<p>結果說明無論上述什麼情況,finally塊總會被執行。 </p>

二 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");
}

Ⅶ java為什麼需要finally

無論是否出現異常不也要執行嗎?這句話是有問題的,有些異常如果不處理,也就不會繼續下去了。即程序從catch里改變控制流,不會執行後面的語句。加了finally,可以保證即使因為異常,後面的代碼不會被執行,但是finally裡面的語句還是會執行,這樣可以釋放一些申請的資源~或者做一些其他工具,比如作profiling統計等。

你可以在catch裡面加個return來模擬類似情況,看看後面的語句會不會執行?
看看finally子常式裡面的語句會不會執行,以及他們的執行順序...

Ⅷ java中的「try - catch -finally」結構中的「finally」有哪些用途

可以這么理解來
try塊中的內容是在無自異常發生時執行到結束
catch塊中的內容,是在try塊中內容發生catch所聲明的異常時,跳轉到catch塊執行
finally塊則是無論是否發生異常,都會執行finally塊的內容
所以,代碼邏輯中有需要無論發生什麼都必須執行的代碼,則可以放在finally塊中
例如:最常見的就是把關閉connection、釋放資源等的代碼放在finally塊中

閱讀全文

與java介面變數finall相關的資料

熱點內容
省內圓通快遞寄文件夾需要多少錢 瀏覽:740
iphone程序加密 瀏覽:884
win10文件夾調整文件行高 瀏覽:681
創意手繪教程 瀏覽:754
微信刪除帳號信息 瀏覽:596
mysql操作類文件 瀏覽:649
繞過xp密碼 瀏覽:158
大眾速騰專用app有哪些 瀏覽:455
arpa首先將計算機網路劃分為 瀏覽:617
蘋果系統開機音樂 瀏覽:875
windows8顯示隱藏文件 瀏覽:603
ipad2可以升級到92嗎 瀏覽:857
如何打開ps保存的文件 瀏覽:744
幼兒編程教育有哪些 瀏覽:453
汽車發外地用什麼app 瀏覽:810
網路如何贊美女人漂亮 瀏覽:143
如何把桌面文件放到excel裡面 瀏覽:363
照片文件名是怎麼查的 瀏覽:876
c怎麼在cmd模式下顯示文件 瀏覽:325
手機怎麼把文件夾的圖片移到相冊 瀏覽:440

友情鏈接