Java中final,finalize和finally的區別
Java中final,finalize和finally的區別
final
final關鍵字可以用於類,方法,變數前,用來表示該關鍵字修飾的類,方法,變數具有不可變的特性。
(1)final關鍵字用於基本資料型別前:這時表明該關鍵字修飾的變數是一個常量,在定義後該變數的值就不能被修改。
(2)final關鍵字用於方法宣告前:這時意味著該方法時最終方法,只能被呼叫,不能被覆蓋,但是可以被過載。
(3)final關鍵字用於類名前:此時該類被稱為最終類,該類不能被其他類繼承。
對於(1):
對於(2):
對於(3):
finalize
finalize方法來自於java.lang.Object,用於回收資源。
可以為任何一個類新增finalize方法。finalize方法將在垃圾回收器清除物件之前呼叫。
在實際應用中,不要依賴使用該方法回收任何短缺的資源,這是因為很難知道這個方法什麼時候被呼叫。
<span style="font-size:14px;">class People{
final void output(String name){
System.out.println(name);
}
}
class Stu extends People{
final void output(String name,int id){//可以被過載
System.out.println(name);
}
public void finalize() throws Throwable{
super.finalize();
System.out.println("finalize method was called!");
}
}
public class Main {
public static void main(String[] args){
}
}</span>
finally
當程式碼丟擲一個異常時,就會終止方法中剩餘程式碼的處理,並退出這個方法的執行。假如我們開啟了一個檔案,但在處理檔案過程中發生異常,這時檔案還沒有被關閉,此時就會產生資源回收問題。對此,java提供了一種好的解決方案,那就是finally子句,finally子句中的語句是一定會被執行的,所以我們只要把前面說的檔案關閉的語句放在finally子句中無論在讀寫檔案中是否遇到異常退出,檔案關閉語句都會執行,保證了資源的合理回收。
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
public class Finally {
void fileWith(){
InputStream in = null;
try {
in = new FileInputStream("wang.txt");
//其他操作
} catch (FileNotFoundException e) {
e.printStackTrace();
}finally{
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
相關文章
- Java中final、finally、finalize的區別Java
- Java中final,finally,finalize的區別Java
- 【Java面試題系列】:Java中final finally finalize的區別Java面試題
- final、finally、finalize()的區別(skycto JEEditor)
- final:finalize:finally:
- final、finally、finalize的理解
- 徹底區分final.finalize,finally
- 【java】final、finally、finallize的區別Java
- 異常-面試題之final,finally和finalize的區別,如果在finally之前有return面試題
- final,finalize,finally的不同之處
- final、finally、finalize的詳細分析
- 『Java 語法基礎』final、finalize 和 finally 的不同之處Java
- final,finally,finallize的區別
- final和finalize
- 看完這篇 final、finally 和 finalize 和麵試官扯皮就沒問題了
- final修飾和static final修飾的區別
- java 中equals和==的區別Java
- java中==和equlas區別Java
- Java中 equals() 方法和 == 的區別Java
- Java中Vector和ArrayList的區別Java
- java中的static和final關鍵字Java
- JAVA 中interface 和 abstract 區別Java
- java中size()和length區別Java
- 閒說: Java 中Comparable 和 Comparator 的區別Java
- java中的Static、final、Static final各種用法Java
- java中Scanner類nextLine()和next()的區別和使Java
- 【Java】equals 和 == 的區別Java
- JAVA中字串比較equals()和equalsIgnoreCase()的區別Java字串
- 【Java面試】Spring中 BeanFactory和FactoryBean的區別Java面試SpringBean
- Java中抽象類和介面的區別Java抽象
- Java中異常分類和Throw和Throws的區別Java
- Flutter 知識梳理 (Dart) - Dart 中 static, final, const 區別FlutterDart
- java yield()和sleep()的區別Java
- 探究final在java中的作用Java
- 深入探究Java中equals()和==的區別是什麼Java
- 【Java面試】Mybatis中#{}和${}的區別是什麼?Java面試MyBatis
- Java中(==)與equals的區別Java
- JavaScript中for in 和for of的區別JavaScript
- Js中for in 和for of的區別JS