如果說Java所有類只能有一個父親,那就只能是 Object 類。Object 類 Java 中所有類的父類,也是我們常說的祖宗類。本篇文章我將和大家簡單地說一說這個祖宗類 Object 的內(nèi)容,以及介紹幾種這個類最常用的方法。
一、簡介
正如前面所說的,Object類作為Java中最常用的內(nèi)置包裝類之一,它是Java所有類的父類,我們也常常從稱之為祖宗類,來彰顯其地位之高。如果一個類沒有指定父類,那么它默認(rèn)的父類就是Object類。因此,以下兩段代碼性質(zhì)是一樣的:
public class Myee{...}
public class Myee extends Object{...}
由于Java中的所有類都是Object類的子類,也因此可以調(diào)用該類中的所有方法,常見方法如下:
在這里面,同String()、equals()和getClass()三種方法是最常見也是最常用的。下面,我們將著重介紹這三種方法。
二、toString()方法
該方法從字面上來看,to 是得到、獲取,String 大家都公認(rèn)是個字符串的符號了,因此結(jié)合在一起,這個方法就是獲取字符串的方法的。官方的解釋,就是返回對象的字符串。
toString()也有一個比較常用,但是不直接使用的方式。再平常我們會把字符串和某個對象用連接符號(+)連接在一起的時候,系統(tǒng)會默認(rèn)把調(diào)用這個對象的 toString() 方法來返回一個字符串。
在 Object 類中的 toString() 方法返回的是一個“運行時類名@十六進制哈希值”,如:
// 定義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
從上述的輸出結(jié)果可見,加不加 toString() 方法,輸出的都是一樣的結(jié)果。
因此,一般許多類都會對 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
以上代碼就是對 toString() 方法進行了重寫,這樣直接輸出對象時調(diào)用的就是子類重寫過的該方法。
三、equals()方法
在學(xué)習(xí)字符串比較的時候,我們就學(xué)過兩種比較方式,一種是 == 比較運算符,另一個就是接下來要講的 equals() 方法。
這兩種比較方式有什么樣的區(qū)別呢?== 比較運算符,比較兩個變量是否指向同一個實例;而 equals() 方法值只比較兩個對象的內(nèi)容是否一致。一般來說,字符串一般只關(guān)心內(nèi)容一樣不一樣。
使用格式:
boolean result = obj.equals(Object o);
其中 obj 表示要進行比較的對象, o 表示被比較的對象。
下面我將用具體的代碼實例來展示一下 equals() 方法的用法:
場景需求:編寫一個 Java 程序,來實現(xiàn)用戶登錄的驗證功能。要求用戶從鍵盤上是輸入賬戶和密碼,如果賬戶和密碼與指定的內(nèi)容一樣的時候,則顯示成功登錄;否則,會顯示登陸失敗。
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("用戶名或密碼有誤!");
}
}
}
失敗顯示:
------歡迎使用大數(shù)據(jù)管理平臺------
用戶名:
adimn
密碼:
admin
用戶名或密碼有誤!
成功顯示:
------歡迎使用大數(shù)據(jù)管理平臺------
用戶名:
admin
密碼:
admin
登陸成功!
四、getClass()方法
從該方法的字面上看,get 獲得,獲??; Class 都知道是類。因此這個方法從字面上看,就是獲取類名的方法。在官方的解釋是,返回當(dāng)前對象所屬的類,是一個 Class 對象。通過這個 Class 對象,可以獲取該類的所有信息,包括了類名、父類以及它所實現(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);
}
}
運行結(jié)果:
類名:java.lang.String 父類:java.lang.Object 實現(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)容,請搜索W3Cschool以往的文章。如果這篇文章對您的學(xué)習(xí)有所幫助,還請大家能多多地關(guān)注和支持我們!