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

