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

Java?JDK內(nèi)置常用接口和深淺拷貝

 更新時間:2022年06月22日 14:36:20   作者:蘿詩粉  
這篇文章主要介紹了Java?JDK內(nèi)置常用接口和深淺拷貝,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下

前言

在Java中,我們使用接口優(yōu)先原則,當(dāng)一個場景可以使用抽象類也可以使用接口定義時,優(yōu)先考慮使用接口,因為接口更靈活,使用抽象類必須滿足is a 的繼承樹關(guān)系,而且是單繼承,接口相比于抽象類更加的靈活,本篇我們就一起看看JDK中的常用內(nèi)置接口。

一、comparable接口

java.lang.Comperable:

當(dāng)一個類實現(xiàn)了Comperable接口,就表示該類具備了可比較的能力!

此時定義了一個Person類型的數(shù)組:

由于Person這個類型是自定義的類型,對于編譯器來說,不像int類型一樣大小關(guān)系一目了然;
對于編譯器來說,到底哪個Person對象大,哪個Person對象小,編譯器就無從得知了,此時就要讓Person這個類型具備可比較的能力,也就是要讓JDK知道Person對象“誰大誰小”,就需要讓Person這個類實現(xiàn)Comperable接口,覆寫抽象方法compereTo。
此時覆寫的方法返回值是int,傳入的參數(shù)是任意類型,因為不知道要比較的是什么類型

int返回值 >0 =0 <0 表示當(dāng)前對象this > 傳入對象o 表示當(dāng)前對象this = 傳入對象o 表示當(dāng)前對象this < 傳入對象o

覆寫comperTo方法:

當(dāng)Person類實現(xiàn)了Comperable接口,覆寫了compereTo方法之后,就可以把Person 類的對象進(jìn)行大小排序了,可以按年齡大小進(jìn)行比較,也可以按照姓名大小比較

此時是默認(rèn)按照年齡的升序排序的,如果想要按照年齡的降序排序,該怎么辦?該如何調(diào)整compereTo方法呢?

此時只需要將返回值取反,讓傳入的年齡減去當(dāng)前對象的年齡,讓JDK誤認(rèn)為年齡越小的反而越“大”。

二、Cloneable接口

java.lang.Cloneable

首先了解一下什么是克隆,就是原對象和新產(chǎn)生對象是兩個獨(dú)立的對象,新產(chǎn)生的對象是通過原對象“拷貝”而來的,屬性值和原對象完全一致。
要想讓一個類具備可復(fù)制的能力,就讓該類實現(xiàn)Cloneable接口,覆寫clone方法

這里Animal實現(xiàn)了Cloneable接口,但是沒有覆寫任何方法,但是這里沒有報錯,這是因為Cloneable接口里本來什么都沒有,但是這并不是一個空接口

類似Cloneable接口,把這種接口稱之為“標(biāo)記”接口,這個接口本身內(nèi)部沒有任何抽象方法,只有打上這個“標(biāo)記”的子類才具備可克隆的能力
JVM在運(yùn)行時會檢查所有實現(xiàn)了Cloneable接口的子類,然后賦予其可以克隆的能力
就像現(xiàn)在的一碼通,根據(jù)一碼通的顏色,把不同的人劃分為不同的類,只有檢測為綠碼的人,才能通過。

animal1 是通過 animal 克隆來的,但是此時使用“ == ”比較他們兩個的地址返回的還是false,說明克隆是產(chǎn)生了新的對象,只是新對象和原來的對象的屬性值完全相同
此時在產(chǎn)生一個對象animal2

Animal animal2 = new Animal();
animal1和animal2的區(qū)別:
animal1是依賴于animal產(chǎn)生的;
animal2的產(chǎn)生和animal完全沒有任何關(guān)系。

調(diào)用clone方法產(chǎn)生的對象不會調(diào)用構(gòu)造方法:

在Java中產(chǎn)生對象一共有兩種方式:

  • 1.最普遍的通過構(gòu)造方法產(chǎn)生對象,當(dāng)有new關(guān)鍵字,就在堆上開辟該類相應(yīng)屬性的空間,給屬性賦默認(rèn)值。
  • 2.通過clone()產(chǎn)生對象,調(diào)用clone方法時,JVM會開辟與原對象內(nèi)存大小完全相同的新空間,并將對象的屬性值從原對象中復(fù)制一份(不推薦,Java都不推薦使用這種方式產(chǎn)生對象)

三、深淺拷貝

1.淺拷貝

克隆對象和原對象的確是兩個獨(dú)立的對象,
但是b1和b2的對象內(nèi)部包含了其他的引用,克隆后的b2包含的其他引用并沒有產(chǎn)生新的對象,b1.a 和 b2.a指向相同的A對象。

2.深拷貝

深拷貝就是克隆對象內(nèi)部包含的其他引用,也產(chǎn)生了新的對象
b1.a 和 b2.a指向不同的A對象。

Java中深拷貝的實現(xiàn)方式:

  • 1.遞歸的使用clone方法
  • 2.序列化(json字符串)

到此這篇關(guān)于Java JDK內(nèi)置常用接口和深淺拷貝的文章就介紹到這了,更多相關(guān)Java JDK內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java?SimpleDateFormat與System類使用示例詳解

    Java?SimpleDateFormat與System類使用示例詳解

    這篇文章主要介紹了Java?SimpleDateFormat與System類使用示例,對于SimpleDateFormat類,是一個用來區(qū)分區(qū)域設(shè)置的方式進(jìn)行日期的是指,以及對日期進(jìn)行處理分析的一個實現(xiàn)類
    2022-11-11
  • C/C++中的struct結(jié)構(gòu)體詳細(xì)解讀

    C/C++中的struct結(jié)構(gòu)體詳細(xì)解讀

    這篇文章主要介紹了C/C++中的struct結(jié)構(gòu)體詳細(xì)解讀,結(jié)構(gòu)體是由一批數(shù)據(jù)組合而成的結(jié)構(gòu)型數(shù)據(jù),組成結(jié)構(gòu)型數(shù)據(jù)的每個數(shù)據(jù)稱為結(jié)構(gòu)型數(shù)據(jù)的“成員”,其描述了一塊內(nèi)存區(qū)間的大小及意義,需要的朋友可以參考下
    2023-10-10
  • Java案例之HashMap集合存儲學(xué)生對象并遍歷

    Java案例之HashMap集合存儲學(xué)生對象并遍歷

    這篇文章主要介紹了Java案例之HashMap集合存儲學(xué)生對象并遍歷,創(chuàng)建一個HashMap集合,鍵是學(xué)號(String),值是學(xué)生對象(Student),存儲三個鍵值對元素并遍歷,下文具體操作需要的朋友可以參考一下
    2022-04-04
  • java繼承學(xué)習(xí)之super的用法解析

    java繼承學(xué)習(xí)之super的用法解析

    本文介紹java繼承super的用法,Java繼承是會用已存在的類的定義作為基礎(chǔ)建立新類的技術(shù)新類的定義可以增加新的數(shù)據(jù)或者新的功能,也可以使用父類的功能,但不能選擇性的繼承父類 這種繼承使得復(fù)用以前的代碼非常容易,能夠大大的縮短開發(fā)的周期,需要的朋友可以參考下
    2022-02-02
  • 自定義BufferedReader的實例

    自定義BufferedReader的實例

    下面小編就為大家分享一篇自定義BufferedReader的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • 據(jù)說這個是可以擼到2089年的idea2020.2(推薦)

    據(jù)說這個是可以擼到2089年的idea2020.2(推薦)

    這篇文章主要介紹了據(jù)說這個是可以擼到2089年的idea2020.2,本教程給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • 關(guān)于Mybatis與JPA的優(yōu)缺點說明

    關(guān)于Mybatis與JPA的優(yōu)缺點說明

    這篇文章主要介紹了關(guān)于Mybatis與JPA的優(yōu)缺點說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Spring的@Configuration使用與原理

    Spring的@Configuration使用與原理

    這篇文章主要介紹了Spring的@Configuration使用與原理,@Configuration用于定義配置類,可替換xml配置文件,被注解的類內(nèi)部包含有一個或多個被@Bean注解的方法,需要的朋友可以參考下
    2023-05-05
  • JAVA 根據(jù)設(shè)置的概率生成隨機(jī)數(shù)的方法

    JAVA 根據(jù)設(shè)置的概率生成隨機(jī)數(shù)的方法

    本篇文章主要介紹了JAVA 根據(jù)設(shè)置的概率生成隨機(jī)數(shù)的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • 詳解Java抽象類與普通類的區(qū)別

    詳解Java抽象類與普通類的區(qū)別

    今天給大家?guī)淼氖顷P(guān)于Java的相關(guān)知識,文章圍繞著Java抽象類與普通類的區(qū)別展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06

最新評論

临潭县| 布拖县| 焦作市| 景宁| 和林格尔县| 岳阳市| 龙门县| 宁陵县| 锡林郭勒盟| 内黄县| 东宁县| 神木县| 沐川县| 通河县| 贞丰县| 巴彦县| 汝城县| 平定县| 阳山县| 绥中县| 宜良县| 秀山| 成武县| 麻阳| 二连浩特市| 奇台县| 化州市| 新龙县| 镇原县| 康平县| 寻乌县| 黔西县| 甘洛县| 林芝县| 阿尔山市| 南丰县| 乌拉特后旗| 新宁县| 思南县| 广东省| 湖北省|