欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳談Java中Object類(lèi)中的方法以及finalize函數(shù)作用

 更新時(shí)間:2017年04月10日 10:12:14   投稿:jingxian  
下面小編就為大家?guī)?lái)一篇詳談Java中Object類(lèi)中的方法以及finalize函數(shù)作用。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

Object是所有類(lèi)的父類(lèi),任何類(lèi)都默認(rèn)繼承Object。

一、Object類(lèi)中的方法

1.clone方法

保護(hù)方法,實(shí)現(xiàn)對(duì)象的淺復(fù)制,只有實(shí)現(xiàn)了Cloneable接口才可以調(diào)用該方法,否則拋出CloneNotSupportedException異常。

主要是JAVA里除了8種基本類(lèi)型傳參數(shù)是值傳遞,其他的類(lèi)對(duì)象傳參數(shù)都是引用傳遞,我們有時(shí)候不希望在方法里講參數(shù)改變,這是就需要在類(lèi)中復(fù)寫(xiě)clone方法。

2.getClass方法

final方法,獲得運(yùn)行時(shí)類(lèi)型。

3.toString方法

該方法用得比較多,一般子類(lèi)都有覆蓋。

4.finalize方法

該方法用于釋放資源。因?yàn)闊o(wú)法確定該方法什么時(shí)候被調(diào)用,很少使用。

5.equals方法

該方法是非常重要的一個(gè)方法。一般equals和==是不一樣的,但是在Object中兩者是一樣的。子類(lèi)一般都要重寫(xiě)這個(gè)方法。

6.hashCode方法

該方法用于哈希查找,可以減少在查找中使用equals的次數(shù),重寫(xiě)了equals方法一般都要重寫(xiě)hashCode方法。這個(gè)方法在一些具有哈希功能的Collection中用到。

一般必須滿(mǎn)足obj1.equals(obj2)==true。可以推出obj1.hash- Code()==obj2.hashCode(),但是hashCode相等不一定就滿(mǎn)足equals。不過(guò)為了提高效率,應(yīng)該盡量使上面兩個(gè)條件接近等價(jià)。

如果不重寫(xiě)hashcode(),在HashSet中添加兩個(gè)equals的對(duì)象,會(huì)將兩個(gè)對(duì)象都加入進(jìn)去。

7.wait方法

wait方法就是使當(dāng)前線(xiàn)程等待該對(duì)象的鎖,當(dāng)前線(xiàn)程必須是該對(duì)象的擁有者,也就是具有該對(duì)象的鎖。wait()方法一直等待,直到獲得鎖或者被中斷。wait(long timeout)設(shè)定一個(gè)超時(shí)間隔,如果在規(guī)定時(shí)間內(nèi)沒(méi)有獲得鎖就返回。

調(diào)用該方法后當(dāng)前線(xiàn)程進(jìn)入睡眠狀態(tài),直到以下事件發(fā)生。

(1)其他線(xiàn)程調(diào)用了該對(duì)象的notify方法。

(2)其他線(xiàn)程調(diào)用了該對(duì)象的notifyAll方法。

(3)其他線(xiàn)程調(diào)用了interrupt中斷該線(xiàn)程。

(4)時(shí)間間隔到了。

此時(shí)該線(xiàn)程就可以被調(diào)度了,如果是被中斷的話(huà)就拋出一個(gè)InterruptedException異常。

8.notify方法

該方法喚醒在該對(duì)象上等待的某個(gè)線(xiàn)程。

9.notifyAll方法

該方法喚醒在該對(duì)象上等待的所有線(xiàn)程。

二、finalize()的作用

Java允許在類(lèi)中定義一個(gè)名為finalize()的方法。它的工作原理是:一旦垃圾回收器準(zhǔn)備好釋放對(duì)象占用的存儲(chǔ)空間,將首先調(diào)用其finalize()方法。并且在下一次垃圾回收動(dòng)作發(fā)生時(shí),才會(huì)真正回收對(duì)象占用的內(nèi)存。

關(guān)于垃圾回收,有三點(diǎn)需要記?。?/p>

1、對(duì)象可能不被垃圾回收。只要程序沒(méi)有瀕臨存儲(chǔ)空間用完的那一刻,對(duì)象占用的空間就總也得不到釋放。

2、垃圾回收并不等于“析構(gòu)”。

3、垃圾回收只與內(nèi)存有關(guān)。使用垃圾回收的唯一原因是為了回收程序不再使用的內(nèi)存。

finalize()的用途:

無(wú)論對(duì)象是如何創(chuàng)建的,垃圾回收器都會(huì)負(fù)責(zé)釋放對(duì)象占據(jù)的所有內(nèi)存。這就將對(duì)finalize()的需求限制到一種特殊情況,即通過(guò)某種創(chuàng)建對(duì)象方式以外的方式為對(duì)象分配了存儲(chǔ)空間。不過(guò)這種情況一般發(fā)生在使用“本地方法”的情況下,本地方法是一種在Java中調(diào)用非Java代碼的方式。

為什么不能顯示直接調(diào)用finalize方法?

如前文所述,finalize方法在垃圾回收時(shí)一定會(huì)被執(zhí)行,而如果在此之前顯示執(zhí)行的話(huà),也就是說(shuō)finalize會(huì)被執(zhí)行兩次以上,而在第一次資源已經(jīng)被釋放,那么在第二次釋放資源時(shí)系統(tǒng)一定會(huì)報(bào)錯(cuò),因此一般finalize方法的訪(fǎng)問(wèn)權(quán)限和父類(lèi)保持一致,為protected。

以上這篇詳談Java中Object類(lèi)中的方法以及finalize函數(shù)作用就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java實(shí)現(xiàn)查找文件和替換文件內(nèi)容

    Java實(shí)現(xiàn)查找文件和替換文件內(nèi)容

    這篇文章主要為大家詳細(xì)介紹了Java語(yǔ)言如何實(shí)現(xiàn)查找文件和替換文件內(nèi)容功能,文中的示例代碼講解詳細(xì),感興趣的可以跟隨小編一起學(xué)習(xí)一下
    2022-08-08
  • Java數(shù)據(jù)結(jié)構(gòu)最清晰圖解二叉樹(shù)前 中 后序遍歷

    Java數(shù)據(jù)結(jié)構(gòu)最清晰圖解二叉樹(shù)前 中 后序遍歷

    樹(shù)是一種重要的非線(xiàn)性數(shù)據(jù)結(jié)構(gòu),直觀地看,它是數(shù)據(jù)元素(在樹(shù)中稱(chēng)為結(jié)點(diǎn))按分支關(guān)系組織起來(lái)的結(jié)構(gòu),很象自然界中的樹(shù)那樣。樹(shù)結(jié)構(gòu)在客觀世界中廣泛存在,如人類(lèi)社會(huì)的族譜和各種社會(huì)組織機(jī)構(gòu)都可用樹(shù)形象表示
    2022-01-01
  • redis scan命令導(dǎo)致redis連接耗盡,線(xiàn)程上鎖的解決

    redis scan命令導(dǎo)致redis連接耗盡,線(xiàn)程上鎖的解決

    這篇文章主要介紹了redis scan命令導(dǎo)致redis連接耗盡,線(xiàn)程上鎖的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11
  • MyBatis下SQL注入攻擊的3種方式

    MyBatis下SQL注入攻擊的3種方式

    SQL注入漏洞作為WEB安全的最常見(jiàn)的漏洞之一,本文希望通過(guò)Mybatis框架使用不當(dāng)導(dǎo)致的SQL注入問(wèn)題為例,能夠拋磚引玉給新手一些思路。感興趣的可以了解一下
    2021-07-07
  • SpringBoot獲取Request對(duì)象的常見(jiàn)方法

    SpringBoot獲取Request對(duì)象的常見(jiàn)方法

    HttpServletRequest 簡(jiǎn)稱(chēng) Request,它是一個(gè) Servlet API 提供的對(duì)象,用于獲取客戶(hù)端發(fā)起的 HTTP 請(qǐng)求信息,那么在SpringBoot中,獲取 Request對(duì)象的方法有哪些呢,本文小編將給大家講講SpringBoot獲取Request對(duì)象的常見(jiàn)方法
    2023-08-08
  • Java 反射(Reflect)詳解

    Java 反射(Reflect)詳解

    這篇文章主要介紹了JAVA 反射機(jī)制的相關(guān)知識(shí),文中講解的非常細(xì)致,代碼幫助大家更好的理解學(xué)習(xí),感興趣的朋友可以了解下
    2021-09-09
  • 詳細(xì)介紹idea如何設(shè)置類(lèi)頭注釋和方法注釋(圖文)

    詳細(xì)介紹idea如何設(shè)置類(lèi)頭注釋和方法注釋(圖文)

    本篇文章主要介紹了idea如何設(shè)置類(lèi)頭注釋和方法注釋(圖文),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • springboot 如何配置多個(gè)jndi數(shù)據(jù)源

    springboot 如何配置多個(gè)jndi數(shù)據(jù)源

    這篇文章主要介紹了springboot 如何配置多個(gè)jndi數(shù)據(jù)源的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java實(shí)現(xiàn)解析ini文件對(duì)應(yīng)到JavaBean中

    Java實(shí)現(xiàn)解析ini文件對(duì)應(yīng)到JavaBean中

    ini 文件是Initialization File的縮寫(xiě),即初始化文件,是windows的系統(tǒng)配置文件所采用的存儲(chǔ)格式。這篇文章主要介紹了通過(guò)Java實(shí)現(xiàn)解析ini文件對(duì)應(yīng)到JavaBean中,需要的可以參考一下
    2022-01-01
  • Java TCP編程之Scoket

    Java TCP編程之Scoket

    TCP/IP是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議,它會(huì)保證數(shù)據(jù)不丟包、不亂序。TCP全名是Transmission Control Protocol,它是位于網(wǎng)絡(luò)OSI模型中的第四層
    2022-11-11

最新評(píng)論