這個類在Java裡,是和亞當夏娃一樣的存在

2021-01-08 劉小愛
【Java】基礎21:頂層父類Object

在東方神話體系中,人類是如何來的?

是女媧用泥土捏出來的。

在西方神話體系中,人類是如何來的?

是亞當夏娃的後代。

今天要學的Object類在Java裡面,就好比是和亞當夏娃一樣的存在。

只不過神話終歸只是神話,是虛無縹緲的,但是計算機裡面,Object類是真真實實存在的。

Object類是所有類的根類,頂層父類,就可以理解成是所有類的祖先,也就是說所有的類最終都會繼承至它,包括數組的父類,也是Object類。

用代碼證明:

①getClass():得到類名。

②getSuperClass():得到父類名。

③Class是指類,java.lang這是Java裡面的一個包,類名是Object。

所以數組的父類也就是Object.。

如果一個類沒有特別指定父類,那麼默認繼承自Object類。

既然Object類是頂層父類,那麼按照繼承的規則:子類可以調用父類的方法。

Object類中的方法,所有類都可以使用。Object類當中包含的方法有11個。

今天主要學習其中的2個:

一、Object類的toString方法

①創建Person類,沒有指定父類,那它默認繼承Object類。

②在測試類main方法中,創建對應的person對象並初始化。

③調用toString()方法並列印(注意:Person類中並沒有定義toString()方法,它調用的是父類Object的方法)。

④列印結果為一串字符,前面一大串是我自己在開發工具裡面創建的包名,就可以理解成文件夾:

com是一個總文件夾liuxiaoai946是com裡一個文件夾stud02是liuxiaoai946裡的一個文件夾commonApi又是stud02裡的一個文件夾那麼Person@16e8e0a這串字符到底啥意思呢,這就要看下Object類中的toString()方法是啥樣的了。

下圖為Object類的toString()方法:

①getClass().getName():得到類的名字,類名是Person。

②Integer.toHexString(hashCode()):hashCode得到的是一個地址值,將這個地址值轉化成十六進位,也就是說16e8e0a是一串16進位的數字。

好,現在問題來了,對於開發者來說,地址是沒多大的意義的,我們需要的是你能以字符串的形式展現出來而不是給我一串地址。

前面學過String類,知道它列印出來就是一串字符串,而不是一串地址,怎麼做到的?

因為它將方法重寫了。

下圖為String類的toString()方法

String類的父類是Object類,它將父類的toString方法重寫了。

所以,當我們新建一個類的時候,一般都會將toString()方法重寫,因為地址對於開發者來說意義不大,我們需要的是字符串。

利用開發工具快捷鍵,Alt+Insert,會自動幫重寫toString()方法。

二、Object類的equals方法

作用:判斷其他某個對象是否與此對象「相等」。

提到equals方法,不得不提到一個比較運算符「==」。

「==」的作用是啥?

①如果比較的是基本數據類型

「==」比較的是值是否相等。

②如果比較的是引用數據類型

「==」比較的是引用地址是否相同。

那equals方法和「==」之間有什麼區別呢?

下圖為Object類的equals()方法:

Object類中的equals()方法就是運算符「==」,它們是一回事。

類是引用數據類型,所以Object類中的equals()方法,比較的是引用地址是否相同。

那麼問題又來了,String類中的equals方法為何比較的是值是否相等呢?

因為它將equals方法重寫了。

所以,同toString方法一樣,當我們新建一個類的時候,一般都會將equals方法重寫。

利用開發工具快捷鍵,Alt+Insert,會自動幫重寫equals方法。

三、Objects工具類

Objects是Object的工具類,前面也學習過Arrays類是數組的工具類。

工具類有個特點:方法一般都是靜態方法。

方法可以直接用類名調用,不用創建實例對象。

①直接用Objects工具類類名就可以調用方法。

②Objects中的equals方法。

③這種判斷方式更加安全,不會出現空指針異常。

什麼叫空指針異常呢?

就是如果一個對象為空,它調用方法就會出現空指針異常。

如下圖:

object1為空,調用equals方法就會報錯,如果是用Objects類的方法:

Objects.equals(object1,object2)

這樣寫就不會出現空指針異常。

總結:

相關焦點

  • java中static, final, 內部類的具體運用
    static概念:static它是靜態修飾符,一般用來修飾類中的成員。當在定義類的時候,類中都會有相應的屬性和方法。而屬性和方法都是通過創建本類對象調用的。static特點:static是靜態修飾符,一般修飾成員。被static修飾的成員屬於類,不屬於單個這個類的某個對象。
  • java——Scnner()類下面有幾種方法呢?
    一、Scnner類 Scnner類在java.util包中一個可以使用正則表達式來解析基本類型和字符串的簡單文本掃描器 next() 和 hasNext() 方法及其基本類型 companion 方法(如 nextInt() 和 hasNextInt())首先跳過與分隔符模式匹配的輸入,然後嘗試返回下一個標記。在等待更多輸入時 hasNext 和 next 方法都可能阻塞。hasNext 方法是否阻塞與其相關的 next 方法是否阻塞無關。
  • Java這個類,大概就和現實中吃飯一樣常見
    因為我對API中的類基本都還沒啥接觸。所以繼續學習API中的常用類,也就相當於字典中的常用字。一、String類String,翻譯成中文:字符串,它是Java裡很重要的一個類。indexOf("ab"):獲取子字符串「ab「首字母在字符串的索引,若是不存在的話,返回-1。substring(1):從指定索引(1)處開始截取字符串,直至結束。
  • Java基礎教程:Java包裝類概念及應用
    概述Java提供了兩個類型系統,基本類型與引用類型,使用基本類型在於效率,然而很多情況,會創建對象使用,因為對象可以做更多的功能,如果想要我們的基本類型像對象一樣操作,就可以使用基本類型對應的包裝類,如下:Integer類
  • java集合詳解合集
    一旦在數組初始化時指定了這個數組長度,這個數組長度就是不可變的,如果我們需要保存一個可以動態增長的數據(在編譯時無法確定具體的數量),java的集合類就是一個很好的設計方案了。集合類主要負責保存、盛裝其他數據,因此集合類也被稱為容器類。
  • Java基礎面試題簡單總結
    中的保留字,現在沒有在java中使用11、數組有沒有length()這個方法?有什麼區別答:聲明方法的存在而不去實現它的類被叫做抽象類(abstract class),它用於要創建一個體現某些基本行為的類, 並為該類聲明方法,但不能在該類中實現該類的情況。
  • Java中設置classpath、path、JAVA_HOME的作用?
    path:Windows系統執行命令時要搜尋的路徑在dos命令行中執行命令的時候,會先從當前路徑去找,如果找不到,就會到path路徑下去找比如我的jdk裝在D盤下,當我在C盤執行java -version的時候會出現找不到java命令的情況,設置path的目的就是當在
  • 這些 Java 8 官方挖的坑,你踩過幾個?
    ,此時只能通過debug到這行代碼,找到具體是缺少哪個類定義,才能解決這個問題。ClassInModule3啟動時在註解中使用了ClassInModule2的類,而ClassInModule2這個類的繼承了ClassInModule1,這幾個類的依賴關係圖如下:
  • 萬字概覽 Java 虛擬機
    為什麼要學習 JVM在很多 Java 程式設計師的開發生涯裡,JVM 一直是黑盒子一般的存在,大家只知道運行 Java 程序需要依靠 JVM,千篇一律的配置幾個類似 -Xms 和 -Xmx 的參數,可能到最後都不知道自己配置的參數有什麼具體的意義。
  • Java | 第一個 SpringBoot 工程詳解
    下面我會講解:pom.xml 這個文件是整個項目最重要的文件,它包含了整個項目的依賴包。Maven 會根據這個文件導入相關的我們開發需要的依賴包。代碼如下:可以看到 pom.xml 中一共有 4 個依賴,其中只有 Junit 是我手動加入的,用於單元測試。
  • 「JAVA」屬性、路徑分隔符有何不同?file對象創建,文件過濾器
    為解決這個問題,Java 在java.io.File類中提供了兩類常量,分別來表示路徑分隔符和屬性分隔符,官方源碼如下所示:java.io.File類 中的路徑分隔符和屬性屬性分隔符、路徑分隔符apijava.io包中,包中有提供大量的I/O操作的api,但這一切的基礎是File類,File 這個名字既可以表示一個特定的文件,也可以表示一個目錄(目錄下有多個文件)。
  • 拋棄 Java 改用 Kotlin 的六個月後,我後悔了!
    2017年夏天,團隊發起了一個新的微服務項目,和往常一樣,我們需要對程式語言和技術進行選型。部分團隊成員是 Kotlin 的擁護者,再加上我們都想嘗試一下新的東西,於是我們決定用 Kotlin 來開發這個項目。由於 Spock 測試框架不支持 Kotlin,因此我們決定堅持使用 Groovy 來測試。
  • 如何優雅的設計 Java 異常
    如何選擇異常類型異常的類別正如我們所知道的,java中的異常的超類是java.lang.Throwable(後文省略為Throwable),它有兩個比較重要的子類,java.lang.Exception(後文省略為Exception
  • Java 枚舉(enum) 詳解7種常見的用法
    類。由於Java 不支持多繼承,所以枚舉對象不能再繼承其他類。 和java.util.EnumMap是兩個枚舉集合。關於這個兩個集合的使用就不在這裡贅述,可以參考JDK文檔。關於枚舉的實現細節和原理請參考:    《ThinkingInJava》第四版     http://softbeta.iteye.com/blog/1185573原文參考:http://blog.csdn.net/qq_27093465/article/details/52180865作者:我是大師兄java
  • 《亞當夏娃日記》:愛情故事的背後是對人類文明的深思
    引言馬克·吐溫的短篇小說《亞當夏娃日記》由《亞當日記摘錄》和《夏娃日記》組成,這是他晚期文學藝術生涯中一篇極富人間溫情的感人作品。《亞當夏娃日記》以愛情為主題,以男女主角之間的愛情生活和情感經歷為主線,男女主角的關係構成了該小說的基本情節結構。
  • java集合【6】——— Iterable接口
    iterable接口整個接口框架關係如下(來自百度百科):iterable接口其實是java集合大家庭的最頂級的接口之一了,實現這個接口,可以視為擁有了獲取迭代器的能力。內部定義的方法 java集合最源頭的接口,實現這個接口的作用主要是集合對象可以通過迭代器去遍歷每一個元素。
  • Java 中的繼承和多態(深入版)
    因為白切雞類中live()方法的參數列表和返回值與父類一樣,但方法體不一樣了。2. 重載重載,指的是在一個類中有若干個方法名相同,但參數列表不同的情況,返回值可以相同也可以不同的方法定義場景。也可以簡單理解成,同一行為(方法)的不同表現形式。
  • 直到今天,才讀懂伊甸園:亞當夏娃的故事,就是你我的故事
    倘若我們認罪的深度、裡面的懺悔與耶穌釘十字架和寶血的代價不相稱,我們依舊對付不了。驕傲的 罪極其可怕,我們若順著驕傲的情慾撒種,收的必然是敗壞、死亡,甚至是地獄。讓我們一起來深入地認識驕傲的根源,拔除這個罪根,離棄驕傲的罪。亞當夏娃的失敗,就是因為驕傲耶和華 神將那人安置在伊甸園,使他修理看守。
  • 剖析Java 集合框架(七)-HashMap為什麼線程不安全
    的hash一樣  且key也一樣 則該節點即為要插入的節點        if (p.hash == hash &&            ((k = p.key) == key || (key !
  • [博客更新]Java 中 final 關鍵詞的使用
    上一篇文章我們講了 java 中 static 關鍵字的使用,這裡再將一下 final 關鍵字的使用。final 在 java 中可以看做一個「終結者」,它可以定義類、定義方法和定義變量。當定義類的時候,該類不能被繼承當定義方法的時候,該方法不能被子類覆蓋(Override)當定義變量的時候,該變量只能在定義的時候初始化,後期不能做改變,即變為一個常量。