java.lang基礎(chǔ)包之java.lang學(xué)習(xí)之Object類

java.lang是提供利用 Java 編程語言進(jìn)行程序設(shè)計(jì)的####基礎(chǔ)類。
我們可以將該包大致分成以下幾類

  • Object
  • Class
  • 數(shù)字與字符(包裝器)類
  • 線程與進(jìn)程類
  • Math類
  • Runtime類
  • System類
    我們首先講講很重要的object類搁宾。有一句話是這樣的
    在java里恒水,一切皆對(duì)象。
    所以O(shè)bject類在java里占有舉足輕重的重要性顷蟆。
主要方法

首先我們看看Object類有哪些方法:

  • private void registerNatives()
  • Class< > getClass()
  • int hashCode()
  • boolean equals(Object obj)
  • protected Object clone()
  • String toString()
  • void notify()
  • void notifyAll()
  • void wait(long timeout)
  • void wait(long timeout, int nanos)
  • void wait()
  • protected void finalize()

1. private void registerNatives()

對(duì)象初始化的時(shí)候會(huì)自動(dòng)調(diào)用 這個(gè)方法诫隅。是在c(c++)中實(shí)現(xiàn)的本地方法腐魂,其主要作用是將C/C++中的方法映射到Java中的native方法,實(shí)現(xiàn)方法命名的解耦逐纬。

2. Class< > getClass()

返回的是此Object對(duì)象的類對(duì)象/運(yùn)行時(shí)類

3.int hashCode()

  • 在一個(gè)應(yīng)用程序執(zhí)行期間蛔屹,如果一個(gè)對(duì)象的equals方法做比較所用到的信息沒有被修改的話,則對(duì)該對(duì)象調(diào)用hashCode方法多次豁生,它必須始終如一地返回同一個(gè)整數(shù)兔毒。
  • 如果兩個(gè)對(duì)象相等(equal),那么必須擁有相同的哈希碼(hash code)
  • 即使兩個(gè)對(duì)象有相同的哈希值(hash code),他們不一定相等.
    根據(jù)上面可以看出:
    一般重寫equals方法的時(shí)候hashcode方法也要被重寫的,因?yàn)橄嗟鹊膶?duì)象的hashcode一定相等

4.boolean equals(Object obj)

    public boolean equals(Object obj) {
        return (this == obj);
    }

我們可以看到其實(shí)就是對(duì)兩個(gè)對(duì)象的內(nèi)存地址的比較甸箱。
ps:有些包裝類String 育叁、Math、Integer等重寫了equals()方法,就是對(duì)內(nèi)容的比較了摇肌。

5 protected Object clone()

這里涉及到深拷貝和淺拷貝的問題:
簡單的來說就是擂红,在有指針的情況下,淺拷貝只是增加了一個(gè)指針指向已經(jīng)存在的內(nèi)存围小,而深拷貝就是增加一個(gè)指針并且申請(qǐng)一個(gè)新的內(nèi)存昵骤,使這個(gè)增加的指針指向這個(gè)新的內(nèi)存,采用深拷貝的情況下肯适,釋放內(nèi)存的時(shí)候就不會(huì)出現(xiàn)在淺拷貝時(shí)重復(fù)釋放同一內(nèi)存的錯(cuò)誤
我們可以看到clone方法是protect 直接調(diào)用是不可以的变秦,但是protect在子類是可以調(diào)用的,在java所有的類都缺省繼承了Object類框舔。所以我們只需要關(guān)心重寫的clone這個(gè)方法蹦玫。重寫的方法需要繼承

public interface Cloneable { 
 }

然后在對(duì)象里重寫clone()方法

public Object clone(){
         Object o=null;
         try {
              o=super.clone();
         } catch (CloneNotSupportedException e) {
              e.printStackTrace();
        }
        return o;
  }

重寫了clone方法的當(dāng)前類的復(fù)制是深拷貝,但是如果再該類里面存在另一個(gè)對(duì)象沒有重寫clone方法就是淺拷貝刘绣。實(shí)例如下


public class ObjectUseDto implements Cloneable {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    private ShallowCopy shallowCopy;

    public ShallowCopy getShallowCopy() {
        return shallowCopy;
    }

    public void setShallowCopy(ShallowCopy shallowCopy) {
        this.shallowCopy = shallowCopy;
    }

    
    public Object clone() {
        Object o = null;
        try {
            //Object中的clone()識(shí)別出你要復(fù)制的是哪一個(gè)對(duì)象樱溉。
            o = super.clone();
        } catch (CloneNotSupportedException e) {
            System.out.println(e.toString());
        }
        return o;
    }
}

class ShallowCopy {
    private Integer age;

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

調(diào)用方代碼

        ObjectUseDto test=new ObjectUseDto();
        test.setName("小花");
        ShallowCopy shallowCopy=new ShallowCopy();
        shallowCopy.setAge(11);
        test.setShallowCopy(shallowCopy);
        ObjectUseDto test2=(ObjectUseDto)test.clone();
        System.out.println(test2.getName());
        System.out.println(test2.getShallowCopy().getAge());
        test.setName("大貓");
        shallowCopy.setAge(88);
        System.out.println(test2.getName());
        System.out.println(test2.getShallowCopy().getAge());

輸出的結(jié)果
小花
11
小花
88
可以看出重寫了clone的是深拷貝,每次我們改變的都是原有對(duì)象纬凤。原有的對(duì)象發(fā)生了改變從‘小花’變成‘大貓’了 但是拷貝的對(duì)象并沒有發(fā)生改變福贞,再看原有的age從 11 變成了 88 。

6 String toString()

    public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }

沒有被重寫的時(shí)候 表示沒有被覆蓋的時(shí)候停士,返回類名@哈希值挖帘,哈希值是十六進(jìn)制的

7 protected void finalize()

我們先說下finalize()方法
可以看做一個(gè)析構(gòu)方法 會(huì)在沒有引用的時(shí)候再垃圾回收之前被垃圾回收機(jī)制調(diào)用


                        后面的方法主要是與多線程相關(guān)的了。

8 void notify() 只能在同步控制方法或者同步控制塊里面使用

這個(gè)方法的主要功能是 喚醒在此對(duì)象監(jiān)視器上等待的單個(gè)線程

9 void notifyAll() 只能在同步控制方法或者同步控制塊里面使用

這個(gè)方法的主要功能是 喚醒在此對(duì)象監(jiān)視器上等待的所有線程

10 void wait() 只能在同步控制方法或者同步控制塊里面使用
這個(gè)方法的主要功能是 調(diào)用此方法所在的當(dāng)前線程等待恋技,直到在其他
線程上調(diào)用此方法的主調(diào)(某一對(duì)象)的notify()/notifyAll()方法拇舀。
在這里我們可以比較下sleep()的區(qū)別:
在調(diào)用sleep()方法的過程中,線程不會(huì)釋放對(duì)象鎖蜻底。
而當(dāng)調(diào)用wait()方法的時(shí)候骄崩,線程會(huì)放棄對(duì)象鎖,進(jìn)入等待此對(duì)象的等待鎖定池,只有針對(duì)此對(duì)象調(diào)用notify()方法后本線程才進(jìn)入對(duì)象鎖定池準(zhǔn)備獲取對(duì)象鎖進(jìn)入運(yùn)行狀態(tài)刁赖。

11 void wait(long timeout) 只能在同步控制方法或者同步控制塊里面使用

這個(gè)方法的主要功能是 線程等待 直到在其他線程上調(diào)用此方法的主調(diào)(某一對(duì)象)的notisfy()/notisfyAll()方法 或者等到一定時(shí)間

12 void wait(long timeout, int nanos) 只能在同步控制方法或者同步控制塊里面使用

這個(gè)方法的主要功能是 線程等待 直到在其他線程上調(diào)用此方法的主調(diào)(某一對(duì)象)的notisfy()/notisfyAll()方法 或者等到一定時(shí)間

native 關(guān)鍵字

我們可以看到在Object類里有很多的方法都聲明了native關(guān)鍵字那么native關(guān)鍵字有什么作用呢搁痛?
?說明其修飾的方法是一個(gè)原生態(tài)方法,方法對(duì)應(yīng)的實(shí)現(xiàn)不是在當(dāng)前文件宇弛,而是在用其他語言(如C和C++)實(shí)現(xiàn)的文件中鸡典。Java語言本身不能對(duì)操作系統(tǒng)底層進(jìn)行訪問和操作,但是可以通過JNI接口調(diào)用其他語言來實(shí)現(xiàn)對(duì)底層的訪問

final關(guān)鍵字

一旦聲明這個(gè)類枪芒,方法彻况,變量為final ,那么這個(gè)引用將不能被改變舅踪,當(dāng)再次嘗試初始化會(huì)編譯錯(cuò)誤

finalize() 方法:

可以看做一個(gè)析構(gòu)方法 會(huì)在沒有引用的時(shí)候再垃圾回收之前被垃圾回收機(jī)制調(diào)用

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末纽甘,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子抽碌,更是在濱河造成了極大的恐慌悍赢,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,383評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件货徙,死亡現(xiàn)場離奇詭異左权,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)痴颊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門赏迟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蠢棱,你說我怎么就攤上這事锌杀。” “怎么了泻仙?”我有些...
    開封第一講書人閱讀 157,852評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵糕再,是天一觀的道長。 經(jīng)常有香客問我玉转,道長亿鲜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,621評(píng)論 1 284
  • 正文 為了忘掉前任冤吨,我火速辦了婚禮,結(jié)果婚禮上饶套,老公的妹妹穿的比我還像新娘漩蟆。我一直安慰自己,他們只是感情好妓蛮,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評(píng)論 6 386
  • 文/花漫 我一把揭開白布怠李。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪捺癞。 梳的紋絲不亂的頭發(fā)上夷蚊,一...
    開封第一講書人閱讀 49,929評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音髓介,去河邊找鬼惕鼓。 笑死,一個(gè)胖子當(dāng)著我的面吹牛唐础,可吹牛的內(nèi)容都是我干的箱歧。 我是一名探鬼主播,決...
    沈念sama閱讀 39,076評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼一膨,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼呀邢!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起豹绪,我...
    開封第一講書人閱讀 37,803評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤价淌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后瞒津,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蝉衣,經(jīng)...
    沈念sama閱讀 44,265評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評(píng)論 2 327
  • 正文 我和宋清朗相戀三年仲智,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了买乃。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,716評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡钓辆,死狀恐怖剪验,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情前联,我是刑警寧澤功戚,帶...
    沈念sama閱讀 34,395評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站似嗤,受9級(jí)特大地震影響啸臀,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜烁落,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評(píng)論 3 316
  • 文/蒙蒙 一乘粒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧伤塌,春花似錦灯萍、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽齿风。三九已至,卻和暖如春绑洛,著一層夾襖步出監(jiān)牢的瞬間救斑,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評(píng)論 1 266
  • 我被黑心中介騙來泰國打工真屯, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留脸候,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,488評(píng)論 2 361
  • 正文 我出身青樓讨跟,卻偏偏與公主長得像纪他,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子晾匠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法茶袒,類相關(guān)的語法,內(nèi)部類的語法凉馆,繼承相關(guān)的語法薪寓,異常的語法,線程的語...
    子非魚_t_閱讀 31,599評(píng)論 18 399
  • 對(duì)象的創(chuàng)建與銷毀 Item 1: 使用static工廠方法澜共,而不是構(gòu)造函數(shù)創(chuàng)建對(duì)象:僅僅是創(chuàng)建對(duì)象的方法向叉,并非Fa...
    孫小磊閱讀 1,969評(píng)論 0 3
  • 一:java概述:1,JDK:Java Development Kit嗦董,java的開發(fā)和運(yùn)行環(huán)境母谎,java的開發(fā)工...
    ZaneInTheSun閱讀 2,635評(píng)論 0 11
  • 第一章:Java程序設(shè)計(jì)概述 Java和C++最大的不同在于Java采用的指針模型可以消除重寫內(nèi)存和損壞數(shù)據(jù)的可能...
    loneyzhou閱讀 1,243評(píng)論 1 7
  • When the two mice tried their best to look for the New Ch...
    健康飛翔閱讀 146評(píng)論 0 0