程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java中Finally症結字

Java中Finally症結字

編輯:關於JAVA

Java中Finally症結字。本站提示廣大學習愛好者:(Java中Finally症結字)文章只能為提供參考,不一定能成為您想要的結果。以下是Java中Finally症結字正文


final:制止多態開關~

潤飾變量:變量不克不及被轉變

潤飾類:類不克不及被繼續

潤飾辦法:辦法不克不及被重寫

finally:用在異常處置的最初一個語句塊

不管能否發生異常都要被履行~~~

Java代碼

public final class FinallyTest { 
public static void main(String[] args) { 
try { 
throw new NullPointerException(); 
} catch (NullPointerException e) { 
System.out.println("法式拋出了異常"); 
} finally { 
System.out.println("履行了finally語句塊"); 
} 
} 
}

Java中finally症結字的應用

與其他說話的模子比擬,finally 症結字是對 Java 異常處置模子的最好彌補。finally 構造使代碼總會履行,而不論有沒有異常產生。應用 finally 可以保護對象的外部狀況,並可以清算非內存資本。 假如沒有 finally,您的代碼就會很隱晦。例如,上面的代碼解釋,在不應用 finally 的情形下您必需若何編寫代碼來釋放非內存資本:

import java.net.*; 
import java.io.*;

class WithoutFinally 
{ 
public void foo() throws IOException 
{ 
//在任一個余暇的端口上創立一個套接字 
ServerSocket ss = new ServerSocket(0); 
try 
{ 
Socket socket = ss.accept(); 
//此處的其他代碼... 
} 
catch (IOException e) 
{ 
ss.close(); //1 
throw e; 
} 
//... 
ss.close(); //2 
} 
}

這段代碼創立了一個套接字,並挪用 accept 辦法。在加入該辦法之前,您必需封閉此套接字,以免資本破綻。為了完成這一義務,我們在 //2 處挪用 close,它是該辦法的最初一條語句。然則,假如 try 塊中產生一個異常會怎樣樣呢?在這類情形下,//2 處的 close 挪用永久不會產生。是以,您必需捕捉這個異常,並在從新收回這個異常之前在 //1 處拔出對 close 的另外一個挪用。如許便可以確保在加入該辦法之前封閉套接字。

如許編寫代碼既費事又易於失足,但在沒有 finally 的情形下這是必弗成少的。不幸的是,在沒有 finally 機制的說話中,法式員便可能忘卻以這類方法組織他們的代碼,從而招致資本破綻。Java 中的 finally 子句處理了這個成績。有了 finally,後面的代碼便可以重寫為以下的情勢:

import java.net.*; 
import java.io.*;
class WithFinally 
{ 
public void foo2() throws IOException 
{ 
//在任一個余暇的端口上創立一個套接字 
ServerSocket ss = new ServerSocket(0); 
try 
{ 
Socket socket = ss.accept(); 
//此處的其他代碼... 
} 
finally 
{ 
ss.close(); 
} 
} 
}

finally 塊確保 close 辦法總被履行,而不論 try 塊內能否收回異常。是以,可以確保在加入該辦法之前總會挪用 close 辦法。如許您便可以確信套接字被封閉而且您沒有洩露資本。在此辦法中不須要再有一個 catch 塊。在第一個示例中供給 catch 塊只是為了封閉套接字,如今這是經由過程 finally 封閉的。假如您確切供給了一個 catch 塊,則 finally 塊中的代碼在 catch 塊完成今後履行。

finally 塊必需與 try 或 try/catch 塊合營應用。另外,弗成能加入 try 塊而不履行其 finally 塊。假如 finally 塊存在,則它總會履行。(不管從那點看,這個陳說都是准確的。有一種辦法可以加入 try 塊而不履行 finally 塊。假如代碼在 try 外部履行一條 System.exit(0); 語句,則運用法式終止而不會履行 finally 履行。另外一方面,假如您在 try 塊履行時代撥失落電源,finally 也不會履行。)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved