淺析final,finally,finalize 的區(qū)別
1.final
final修飾類,說明這個(gè)類不能被繼承,是以個(gè)頂級類。
final修飾變量,說明這個(gè)變量是常量。
final修飾方法,表示這個(gè)方法不能被重寫,不過可以沖在final方法。
比如有個(gè)基類Person,里面有一個(gè)public final void eat()方法,可以在Person類中重載同名方法,比如public void eat(String name,int age)。假如有一個(gè)子類Student,那么在Student中可以override父類的非final方法,但是不能override final方法。
Person
package test2;
public class Person {
private String name;
private int age;
public final void eat()
{
System.out.println("this is in person class");
}
public void eat(String name,int age)
{
}
}
Student
package test2;
public class Student extends Person {
@Override
public void eat(String name, int age) {
// TODO Auto-generated method stub
super.eat(name, age);
}
}
常見的final方法就是Object類累中的wait()和notify()方法。
2.finally
finally是關(guān)鍵字,在異常處理中,try子句中執(zhí)行需要運(yùn)行的內(nèi)容,catch子句用于捕獲異常,finally子句表示不管是否發(fā)生異常,都會(huì)執(zhí)行。finally可有可無。但是try...catch必須成對出現(xiàn)。
3.finalize()
finalize() 方法名,Object類的方法,Java 技術(shù)允許使用 finalize() 方法在垃圾收集器將對象從內(nèi)存中清除出去之前做必要的清理工作。這個(gè)方法是由垃圾收集器在確定這個(gè)對象沒有被引用時(shí)對這個(gè)對象進(jìn)行調(diào)用。finalize()方法是在垃圾收集器刪除對象之前對這個(gè)對象調(diào)用的子類覆蓋 finalize() 方法以整理系統(tǒng)資源或者執(zhí)行其他清理操作。
代碼實(shí)例:
class Person
{
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String toString()
{
return "姓名:"+this.name+",年齡:"+this.age;
}
public void finalize() throws Throwable{//對象釋放空間是默認(rèn)調(diào)用此方法
System.out.println("對象被釋放-->"+this);//直接輸出次對象,調(diào)用toString()方法
}
}
public class SystemDemo {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Person per=new Person("zhangsan",30);
per=null;//斷開引用,釋放空間
//方法1:
System.gc();//強(qiáng)制性釋放空間
//方法2:
// Runtime run=Runtime.getRuntime();
// run.gc();
}
}
相關(guān)文章
Java getRealPath("/")與getContextPath()區(qū)別詳細(xì)分析
這篇文章主要介紹了Java getRealPath("/")與getContextPath()區(qū)別詳細(xì)分析,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08Java中數(shù)學(xué)相關(guān)類的使用教程
Java是一種廣泛使用的編程語言,它提供了許多數(shù)學(xué)運(yùn)算的函數(shù)和方法,使得開發(fā)者可以輕松地進(jìn)行各種數(shù)學(xué)計(jì)算,下面這篇文章主要給大家介紹了關(guān)于Java中數(shù)學(xué)相關(guān)類使用的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05SpringBoot使用Feign調(diào)用其他服務(wù)接口
這篇文章主要介紹了SpringBoot使用Feign調(diào)用其他服務(wù)接口,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03Spring設(shè)計(jì)模式中代理模式詳細(xì)講解
如何實(shí)現(xiàn)在不修改源碼的基礎(chǔ)上實(shí)現(xiàn)代碼功能的增強(qiáng)呢?spring為我們提供了代理模式。所謂的代理模式通俗來說就是一個(gè)中介,它給某一個(gè)對象提供一個(gè)代理對象,并由代理對象控制原對象的引用,從而實(shí)現(xiàn)在不修改源碼的基礎(chǔ)上實(shí)現(xiàn)代碼功能的增強(qiáng)2023-01-01使用Java的Lucene搜索工具對檢索結(jié)果進(jìn)行分組和分頁
這篇文章主要介紹了使用Java的搜索工具Lucene對檢索結(jié)果進(jìn)行分組和分頁的方法,Luence是Java環(huán)境中的一個(gè)全文檢索引擎工具包,需要的朋友可以參考下2016-03-03