日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

1.2 Object类详解

發(fā)布時間:2025/3/20 编程问答 11 豆豆
生活随笔 收集整理的這篇文章主要介紹了 1.2 Object类详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Object類概述

  • Object類是所有Java類的根父類
  • 如果在類的聲明中未使用extends關(guān)鍵字指明其父類,則默認(rèn)父類為java.lang.Object類
  • Object類中的功能(屬性、方法)就具有通用性。
  • 屬性:無

    方法:equals() / toString() / getClass() /hashCode() / clone() / finalize()

    wait() 、 notify()、notifyAll()

    Object類只聲明了一個空參的構(gòu)造器

    Object 是 Java 類庫中的一個特殊類,也是所有類的父類。也就是說,Java 允許把任何類型的對象賦給 Object 類型的變量。當(dāng)一個類被定義后,如果沒有指定繼承的父類,那么默認(rèn)父類就是 Object 類。因此,以下兩個類表示的含義是一樣的。

    public class MyClass{}

    等價于

    public class MyClass extends Object {}

    由于 Java 所有的類都是 Object 類的子類,所以任何 Java 對象都可以調(diào)用 Object 類的方法。常見的方法如表 1 所示。

    方法說明
    Object clone()創(chuàng)建與該對象的類相同的新對象
    boolean equals(Object)比較兩對象是否相等
    void finalize()當(dāng)垃圾回收器確定不存在對該對象的更多引用時,對象垃圾回收器調(diào)用該方法
    Class getClass()返回一個對象運(yùn)行時的實例類
    int hashCode()返回該對象的散列碼值
    void notify()激活等待在該對象的監(jiān)視器上的一個線程
    void notifyAll()激活等待在該對象的監(jiān)視器上的全部線程
    String toString()返回該對象的字符串表示
    void wait()在其他線程調(diào)用此對象的 notify() 方法或 notifyAll() 方法前,導(dǎo)致當(dāng)前線程等待

    其中,toString()、equals() 方法和 getClass() 方法在 Java 程序中比較常用。

    toString() 方法

    toString() 方法返回該對象的字符串,當(dāng)程序輸出一個對象或者把某個對象和字符串進(jìn)行連接運(yùn)算時,系統(tǒng)會自動調(diào)用該對象的 toString() 方法返回該對象的字符串表示。

    Object 類的 toString() 方法返回“運(yùn)行時類名@十六進(jìn)制哈希碼”格式的字符串,但很多類都重寫了 Object 類的 toString() 方法,用于返回可以表述該對象信息的字符串。

    哈希碼(hashCode),每個 Java 對象都有哈希碼屬性,哈希碼可以用來標(biāo)識對象,提高對象在集合操作中的執(zhí)行效率。

    先看以下代碼:

    // 定義Demo類,實際上繼承Object類 class Demo { } public class ObjectDemo01 {public static void main(String[] args) {Demo d = new Demo(); // 實例化Demo對象System.out.println("不加toString()輸出:" + d);System.out.println("加上toString()輸出:" + d.toString());} }

    輸出結(jié)果為:

    不加toString()輸出:Demo@15db9742 加上toString()輸出:Demo@15db9742

    以上的程序是隨機(jī)輸出了一些地址信息,從程序的運(yùn)行結(jié)果可以清楚的發(fā)現(xiàn),加和不加 toString() 的最終輸出結(jié)果是一樣的,也就是說對象輸出時一定會調(diào)用 Object 類中的 toString() 方法打印內(nèi)容。所以利用此特性就可以通過 toString() 取得一些對象的信息,如下面代碼。

    public class Person {private String name;private int age;public Person(String name, int age) {this.name = name;this.age = age;}public String toString() {return "姓名:" + this.name + ":年齡" + this.age;}public static void main(String[] args) {Person per = new Person("歪比巴卜", 30);// 實例化Person對象System.out.println("對象信息:" + per);// 打印對象調(diào)用toString()方法} }

    輸出結(jié)果為:

    對象信息:姓名:歪比巴卜:年齡30

    程序中的 Person 類中重寫了 Object 類中的 toString() 方法,這樣直接輸出對象時調(diào)用的是被子類重寫過的 toString() 方法。

    equals() 方法

    在前面學(xué)習(xí)字符串比較時,曾經(jīng)介紹過兩種比較方法,分別是==運(yùn)算符和 equals() 方法,

    • ==運(yùn)算符是比較兩個引用變量是否指向同一個實例,
    • equals() 方法是比較兩個對象的內(nèi)容是否相等,通常字符串的比較只是關(guān)心內(nèi)容是否相等。

    其使用格式如下:

    boolean result = obj.equals(Object o);

    其中,obj 表示要進(jìn)行比較的一個對象,o 表示另一個對象。

    例 1
    編寫一個 Java 程序,實現(xiàn)用戶登錄的驗證功能。要求用戶從鍵盤輸入登錄用戶名和密碼,當(dāng)用戶輸入的用戶名等于 admin 并且密碼也等于 admin 時,則表示該用戶為合法用戶,提示登錄成功,否則提示用戶名或者密碼錯誤信息。

    在這里使用 equals() 方法將用戶輸入的字符串與保存 admin 的字符串對象進(jìn)行比較,具體的代碼如下:

    import java.util.Scanner; public class Test01 {// 驗證用戶名和密碼public static boolean validateLogin(String uname, String upwd) {boolean con = false;if (uname.equals("admin") && upwd.equals("admin")) { // 比較兩個 String 對象con = true;} else {con = false;}return con;}public static void main(String[] args) {Scanner input = new Scanner(System.in);System.out.println("------歡迎使用大數(shù)據(jù)管理平臺------");System.out.println("用戶名:");String username = input.next(); // 獲取用戶輸入的用戶名System.out.println("密碼:");String pwd = input.next(); // 獲取用戶輸入的密碼boolean con = validateLogin(username, pwd);if (con) {System.out.println("登錄成功!");} else {System.out.println("用戶名或密碼有誤!");}} }

    上述代碼在 validateLogin() 方法中又使用 equals() 方法將兩個 String 類型的對象進(jìn)行了比較,當(dāng) uname 對象與保存 admin 的 String 對象相同時,uname.equals("admin") 為 true;與此相同,當(dāng) upwd 對象與保存 admin 的 String 對象相同時,upwd.equals("admin") 為 true。當(dāng)用戶輸入的用戶名和密碼都為 admin 時,表示該用戶為合法用戶,提示登錄成功信息,否則提示用戶名或密碼有誤的錯誤信息。

    該程序的運(yùn)行結(jié)果下所示:

    ------歡迎使用大數(shù)據(jù)管理平臺------ 用戶名: adinm 密碼: admin 用戶名或密碼有誤! ------歡迎使用大數(shù)據(jù)管理平臺------ 用戶名: admin 密碼: admin 登錄成功!

    getClass() 方法

    getClass() 方法返回對象所屬的類,是一個 Class 對象。通過 Class 對象可以獲取該類的各種信息,包括類名、父類以及它所實現(xiàn)接口的名字等。

    例 2
    編寫一個實例,演示如何對 String 類型調(diào)用 getClass() 方法,然后輸出其父類及實現(xiàn)的接口信息。具體實現(xiàn)代碼如下:

    public class Test02 {public static void printClassInfo(Object obj) {// 獲取類名System.out.println("類名:" + obj.getClass().getName());// 獲取父類名System.out.println("父類:" + obj.getClass().getSuperclass().getName());System.out.println("實現(xiàn)的接口有:");// 獲取實現(xiàn)的接口并輸出for (int i = 0; i < obj.getClass().getInterfaces().length; i++) {System.out.println(obj.getClass().getInterfaces()[i]);}}public static void main(String[] args) {String strObj = new String();printClassInfo(strObj);} }

    該程序的運(yùn)行結(jié)果如下:

    類名:java.lang.String 父類:java.lang.Object 實現(xiàn)的接口有: interface java.io.Serializable interface java.lang.Comparable interface java.lang.CharSequence

    接收任意引用類型的對象

    既然 Object 類是所有對象的父類,則所有的對象都可以向 Object 進(jìn)行轉(zhuǎn)換,在這其中也包含了數(shù)組和接口類型,即一切的引用數(shù)據(jù)類型都可以使用 Object 進(jìn)行接收。

    interface A {public String getInfo(); } class B implements A {public String getInfo() {return "Hello World!!!";} } public class ObjectDemo04 {public static void main(String[] args) {// 為接口實例化A a = new B();// 對象向上轉(zhuǎn)型Object obj = a;// 對象向下轉(zhuǎn)型A x = (A) obj;System.out.println(x.getInfo());} }

    輸出結(jié)果為:

    Hello World!!!

    通過以上代碼可以發(fā)現(xiàn),雖然接口不能繼承一個類,但是依然是 Object 類的子類,因為接口本身是引用數(shù)據(jù)類型,所以可以進(jìn)行向上轉(zhuǎn)型操作。

    同理,也可以使用 Object 接收一個數(shù)組,因為數(shù)組本身也是引用數(shù)據(jù)類型。

    public class ObjectDemo05 {public static void main(String[] args) {int temp[] = { 1, 3, 5, 7, 9 };// 使用object接收數(shù)組Object obj = temp;// 傳遞數(shù)組引用print(obj);}public static void print(Object o) {// 判斷對象的類型if (o instanceof int[]) {// 向下轉(zhuǎn)型int x[] = (int[]) o;// 循環(huán)輸出for (int i = 0; i < x.length; i++) {System.out.print(x[i] + "\t");}}} }

    輸出結(jié)果為:

    1 3 5 7 9

    以上程序使用 Object 接收一個整型數(shù)組,因為數(shù)組本身屬于引用數(shù)據(jù)類型,所以可以使用 Object 接收數(shù)組內(nèi)容,在輸出時通過 instanceof 判斷類型是否是一個整型數(shù)組,然后進(jìn)行輸出操作。

    提示:因為 Object 類可以接收任意的引用數(shù)據(jù)類型,所以在很多的類庫設(shè)計上都采用 Object 作為方法的參數(shù),這樣操作起來會比較方便。

    總結(jié)

    以上是生活随笔為你收集整理的1.2 Object类详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。