App下載

淺談Java中的祖宗類Object 以及常用方法的介紹

猿友 2021-07-21 15:34:57 瀏覽數(shù) (2537)
反饋

如果說Java所有類只能有一個(gè)父親,那就只能是 Object 類。Object 類 Java 中所有類的父類,也是我們常說的祖宗類。本篇文章我將和大家簡單地說一說這個(gè)祖宗類 Object 的內(nèi)容,以及介紹幾種這個(gè)類最常用的方法。

一、簡介

正如前面所說的,Object類作為Java中最常用的內(nèi)置包裝類之一,它是Java所有類的父類,我們也常常從稱之為祖宗類,來彰顯其地位之高。如果一個(gè)類沒有指定父類,那么它默認(rèn)的父類就是Object類。因此,以下兩段代碼性質(zhì)是一樣的:

public class Myee{...}
public class Myee extends Object{...}

由于Java中的所有類都是Object類的子類,也因此可以調(diào)用該類中的所有方法,常見方法如下:

Object類常用方法

在這里面,同String()、equals()和getClass()三種方法是最常見也是最常用的。下面,我們將著重介紹這三種方法。


二、toString()方法

該方法從字面上來看,to 是得到、獲取,String 大家都公認(rèn)是個(gè)字符串的符號(hào)了,因此結(jié)合在一起,這個(gè)方法就是獲取字符串的方法的。官方的解釋,就是返回對(duì)象的字符串。

toString()也有一個(gè)比較常用,但是不直接使用的方式。再平常我們會(huì)把字符串和某個(gè)對(duì)象用連接符號(hào)(+)連接在一起的時(shí)候,系統(tǒng)會(huì)默認(rèn)把調(diào)用這個(gè)對(duì)象的 toString() 方法來返回一個(gè)字符串。

在 Object 類中的 toString() 方法返回的是一個(gè)“運(yùn)行時(shí)類名@十六進(jìn)制哈希值”,如:

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

輸出結(jié)果:

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

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

從上述的輸出結(jié)果可見,加不加 toString() 方法,輸出的都是一樣的結(jié)果。

因此,一般許多類都會(huì)對(duì) toString() 方法進(jìn)行重寫。

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);// 實(shí)例化Person對(duì)象
        System.out.println("對(duì)象信息:" + per);// 打印對(duì)象調(diào)用toString()方法
    }
}

輸出結(jié)果:

 對(duì)象信息:姓名:小明:年齡30

以上代碼就是對(duì) toString() 方法進(jìn)行了重寫,這樣直接輸出對(duì)象時(shí)調(diào)用的就是子類重寫過的該方法。


三、equals()方法

在學(xué)習(xí)字符串比較的時(shí)候,我們就學(xué)過兩種比較方式,一種是 == 比較運(yùn)算符,另一個(gè)就是接下來要講的 equals() 方法。

這兩種比較方式有什么樣的區(qū)別呢?== 比較運(yùn)算符,比較兩個(gè)變量是否指向同一個(gè)實(shí)例;而 equals() 方法值只比較兩個(gè)對(duì)象的內(nèi)容是否一致。一般來說,字符串一般只關(guān)心內(nèi)容一樣不一樣。

使用格式:

boolean result = obj.equals(Object o);

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

下面我將用具體的代碼實(shí)例來展示一下 equals() 方法的用法:

場景需求:編寫一個(gè) Java 程序,來實(shí)現(xiàn)用戶登錄的驗(yàn)證功能。要求用戶從鍵盤上是輸入賬戶和密碼,如果賬戶和密碼與指定的內(nèi)容一樣的時(shí)候,則顯示成功登錄;否則,會(huì)顯示登陸失敗。

import java.util.Scanner;
public class Test01 {
    // 驗(yàn)證用戶名和密碼
    public static boolean validateLogin(String uname, String upwd) {
        boolean con = false;
        if (uname.equals("admin") && upwd.equals("admin")) { // 比較兩個(gè) String 對(duì)象
            con = true;
        } else {
            con = false;
        }
        return con;
    }
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("------歡迎使用大數(shù)據(jù)管理平臺(tái)------");
        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("用戶名或密碼有誤!");
        }
    }
}

失敗顯示:

------歡迎使用大數(shù)據(jù)管理平臺(tái)------
用戶名:
adimn
密碼:
admin
用戶名或密碼有誤!

成功顯示:

 ------歡迎使用大數(shù)據(jù)管理平臺(tái)------

用戶名:
admin
密碼:
admin
登陸成功!


四、getClass()方法

從該方法的字面上看,get 獲得,獲?。?Class 都知道是類。因此這個(gè)方法從字面上看,就是獲取類名的方法。在官方的解釋是,返回當(dāng)前對(duì)象所屬的類,是一個(gè) Class 對(duì)象。通過這個(gè) Class 對(duì)象,可以獲取該類的所有信息,包括了類名、父類以及它所實(shí)現(xiàn)的接口等等。

下面我們用一個(gè)代碼示例演示一下:

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("實(shí)現(xiàn)的接口有:");
        // 獲取實(shí)現(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
實(shí)現(xiàn)的接口有:
interface java.io.Serializable
interface java.lang.Comparable
interface java.lang.CharSequence


五、總結(jié)

以上就是關(guān)于 Java 中的祖宗類 Object 類的簡要介紹,以及該類三種最常用方法的詳細(xì)介紹。如果想要了解更多關(guān)于 Java Object類的其他方法的內(nèi)容,請(qǐng)搜索W3Cschool以往的文章。如果這篇文章對(duì)您的學(xué)習(xí)有所幫助,還請(qǐng)大家能多多地關(guān)注和支持我們!


0 人點(diǎn)贊