最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關于Java中finalize析構方法的作用詳解

 更新時間:2023年05月11日 10:11:08   作者:一一哥Sun  
構造方法用于創(chuàng)建和初始化類對象,也就是說,構造方法負責”生出“一個類對象,并可以在對象出生時進行必要的操作,在這篇文章中會給大家簡單介紹一下析構方法,需要的朋友可以參考下

一. 析構方法

1. 概念

我們現(xiàn)在已經(jīng)知道,構造方法負責創(chuàng)建一個Java的類對象,并可以對該對象進行初始化。與此相對應的,其實還有一個方法,可以負責對象的銷毀,這個負責對象銷毀的方法,就叫做析構方法。在Java中,有一個專門的析構方法,即finalize()方法!

2. 作用

finalize()析構方法負責回收Java對象所占用的內(nèi)存,該方法一般是在對象被垃圾收集器回收之前調(diào)用。通常我們會在finalize()方法中,指定對象銷毀時要執(zhí)行的操作,比如關閉對象打開的文件、IO流、釋放內(nèi)存資源等清理垃圾碎片的工作。

3. 特點

finalize()析構方法具有以下這些特點:

  • 垃圾回收器是否會執(zhí)行finalize方法,以及何時執(zhí)行該方法,是不確定的;
  • finalize()方法有可能會使對象復活,恢復到可觸及的狀態(tài);
  • 垃圾回收器執(zhí)行finalize()方法時,如果出現(xiàn)異常,垃圾回收器不會報告異常,程序會繼續(xù)正常運行。

二. 基本使用

1. finalize簡介

在大多數(shù)情況下,Java的內(nèi)存和垃圾回收都是由JVM的GC機制來自動完成。如果我們想手動實現(xiàn),就可以使用finalize()方法,但該方法的執(zhí)行與否是不確定的。也就是說,即使我們調(diào)用了finalize()方法,JVM也不一定就會立刻執(zhí)行垃圾回收操作,這個取決于當前系統(tǒng)的內(nèi)存占用情況。

另外finalize()是一個被protected關鍵詞修飾的方法,可以確保該方法不會被該類以外的代碼調(diào)用。在每個Java類中都有finalize()方法,我們可以復寫當前類中的finalize()方法。

@Override
protected void finalize(){
   // 在這里終結代碼
}

2. 代碼案例

接下來設計一個代碼案例,來給大家講講析構方法的基本使用。

2.1 Counter計數(shù)器

我們先來定義一個Counter計數(shù)器類,設計一個靜態(tài)的計數(shù)器變量,通過方法調(diào)用改變count的值。

/**
 * @author 一一哥Sun 
 */
public class Counter {
    private static int count = 0; // 計數(shù)器變量

    public Counter() {
	// 構造方法
	this.count++; // 創(chuàng)建實例時增加值
    }

    public int getCount() {
	// 獲取計數(shù)器的值
	return this.count;
    }

    @Override
    protected void finalize() {
	// 析構方法
	this.count--; // 實例銷毀時減少值
	System.out.println("對象銷毀");
    }
}

以上案例中,static、@override等關鍵字,有些同學可能還不明白是怎么回事!先別急,后面我們都會學到,這里請大家先照著代碼練習一下。

2.2 CounterTest測試類

接著我們再創(chuàng)建第2個類,對Counter里的finalize()進行測試。

/*
 * @author
 * QQ:2312119590 
 * CSDN、掘金、知乎找我哦
 */
public class CounterTest {
    public static void main(String[] args) {
	Counter cnt1 = new Counter(); // 創(chuàng)建第一個實例對象
	System.out.println("數(shù)量:" + cnt1.getCount()); // 輸出1
		
	Counter cnt2 = new Counter(); // 創(chuàng)建第二個實例對象
	System.out.println("數(shù)量:" + cnt2.getCount()); // 輸出2
	cnt2 = null; // 銷毀實例2
		
	try {
            System.gc(); // 手動調(diào)用清理內(nèi)存的gc()方法
            Thread.currentThread().sleep(1000); // 延時1000毫秒
            System.out.println("數(shù)量:" + cnt1.getCount()); //再次輸出1,說明有個對象被銷毀
	} catch (InterruptedException e) {
            e.printStackTrace();
	}
    }
}

因為finalize()方法具有不確定性,也就是說,該方法到底會不會起作用是不一定的!所以我們在程序中可以調(diào)用 System.gc()方法或者 Runtime.gc()方法,來顯式地提醒垃圾回收器盡快去執(zhí)行垃圾回收操作。最終執(zhí)行效果如下圖所示:

四. 結語

至此,就把析構方法的功能及使用給大家介紹完畢了,現(xiàn)在你學會了嗎?對我們這些初學者來說,我們暫時知道finalize析構方法的作用和基本用法即可。

以上就是關于Java中finalize析構方法的作用詳解的詳細內(nèi)容,更多關于Java finalize析構方法的資料請關注腳本之家其它相關文章!

相關文章

  • 配置hadoop環(huán)境mapreduce連接不上hdfs解決

    配置hadoop環(huán)境mapreduce連接不上hdfs解決

    這篇文章主要為大家介紹了配置hadoop環(huán)境mapreduce連接不上hdfs解決方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • java String類常量池分析及

    java String類常量池分析及"equals"和"==”區(qū)別詳細介紹

    這篇文章主要介紹了java String類常量池分析及"equals"和"==”區(qū)別詳細介紹的相關資料,需要的朋友可以參考下
    2016-12-12
  • Java Durid進行JDBC連接詳解

    Java Durid進行JDBC連接詳解

    今天給大家?guī)淼氖顷P于Java的相關知識,文章簡單使用Durid進行JDBC連接,文中有非常詳細的介紹及代碼示例,需要的朋友可以參考下
    2021-09-09
  • 解決微服務下Mybatis?xml無效綁定問題及分析Invalid?bound?statement

    解決微服務下Mybatis?xml無效綁定問題及分析Invalid?bound?statement

    這篇文章主要介紹了解決微服務下Mybatis?xml無效綁定問題及分析Invalid?bound?statement,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • IntelliJ IDEA創(chuàng)建普通的Java 項目及創(chuàng)建 Java 文件并運行的教程

    IntelliJ IDEA創(chuàng)建普通的Java 項目及創(chuàng)建 Java 文件并運行的教程

    這篇文章主要介紹了IntelliJ IDEA創(chuàng)建普通的Java 項目及創(chuàng)建 Java 文件并運行的教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • Spring循環(huán)依賴實現(xiàn)過程揭秘

    Spring循環(huán)依賴實現(xiàn)過程揭秘

    這篇文章主要介紹了Spring循環(huán)依賴實現(xiàn)過程,Spring的解決循環(huán)依賴是有前置條件的,要解決循環(huán)依賴我們首先要了解Spring Bean對象的創(chuàng)建過程和依賴注入的方式
    2023-01-01
  • 帶你了解JAVA中的一些鎖概念

    帶你了解JAVA中的一些鎖概念

    今天小編就為大家分享一篇關于Java分布式鎖的概念與實現(xiàn)方式詳解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2021-08-08
  • Java零基礎講解異常

    Java零基礎講解異常

    異常就是不正常,比如當我們身體出現(xiàn)了異常我們會根據(jù)身體情況選擇喝開水、吃藥、看病、等?異常處理方法。?java異常處理機制是我們java語言使用異常處理機制為程序提供了錯誤處理的能力,程序出現(xiàn)的錯誤,程序可以安全的退出,以保證程序正常的運行等
    2022-04-04
  • SpringCloud Zuul過濾器和谷歌Gauva實現(xiàn)限流

    SpringCloud Zuul過濾器和谷歌Gauva實現(xiàn)限流

    這篇文章主要介紹了SpringCloud Zuul過濾器和谷歌Gauva實現(xiàn)限流,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • SpringBoot使用@Validated處理校驗的方法步驟

    SpringBoot使用@Validated處理校驗的方法步驟

    @Validated?注解的主要目的是啟用和利用?Spring?的驗證框架,它可以用于類上也可以用于方法參數(shù)上,本文給大家介紹了SpringBoot使用@Validated優(yōu)雅的處理校驗的方法步驟,通過代碼示例介紹的非常詳細,需要的朋友可以參考下
    2024-08-08

最新評論

绥宁县| 玛多县| 龙山县| 汉源县| 宜都市| 甘谷县| 河间市| 万宁市| 莱州市| 通江县| 宝坻区| 西峡县| 陈巴尔虎旗| 凯里市| 武夷山市| 莎车县| 百色市| 怀宁县| 兴文县| 贵南县| 博乐市| 格尔木市| 屯留县| 乌拉特前旗| 广昌县| 茶陵县| 城市| 北辰区| 安新县| 台南市| 如东县| 安泽县| 怀来县| 崇信县| 梁平县| 耒阳市| 云和县| 靖宇县| 凤山市| 阳山县| 遵义县|