Object 是 Java 類庫中的一個特殊類,也是所有類的父類別。當一個類被定義後,如果沒有指定繼承的父類別,那麼預設父類別就是 Object 類。因此,以下兩個類是等價的。
public class MyClass{…}
等價於
public class MyClass extends Object {…}
由於 Java 中的所有類都是由 Object 類派生出來的,因此
在 Object 類中定義的方法,在其他類中都可以使用,常見的方法如表 1 所示。
表 1 Object類的常用方法
方法 |
說明 |
Object clone() |
建立與該物件的類相同的新物件 |
boolean equals(Object) |
比較兩物件是否相等 |
void finalize() |
當垃圾回收器確定不存在對該物件的更多參照時,物件垃圾回收器呼叫該方法 |
Class getClass() |
返回一個物件執行時的範例類 |
int hashCode() |
返回該物件的雜湊碼值 |
void notify() |
啟用等待在該物件的監視器上的一個執行緒 |
void notifyAll() |
啟用等待在該物件的監視器上的全部執行緒 |
String toString() |
返回該物件的字串表示 |
void wait() |
在其他執行緒呼叫此物件的 notify() 方法或 notifyAll() 方法前,導致當前執行緒等待 |
其中,equals() 方法和 getClass() 方法在 Java 程式中比較常用。
equals() 方法
equals() 方法的作用與運算子類似,用於值與值的比較和值與物件的比較,而 equals() 方法用於物件與物件之間的比較,其使用格式如下:
boolean result = obj.equals(Object o);
其中,obj 表示要進行比較的一個物件,o 表示另一個物件。
例 1
編寫一個 Java 程式,實現使用者登入的驗證功能。要求,使用者從鍵盤輸入登入使用者名稱和密碼,當使用者輸入的使用者名稱等於 admin 並且密碼也等於 admin 時,則表示該使用者為合法使用者,提示登入成功,否則提示使用者名稱或者密碼錯誤資訊。
在這裡使用 equals() 方法將使用者輸入的字串與儲存 admin 的字串物件進行比較,具體的程式碼如下:
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("------歡迎使用巨量資料管理平台------");
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 型別的物件進行了比較,當 uname 物件與儲存 admin 的 String 物件相同時,uname.equals("admin") 為 true;與此相同,當 upwd 物件與儲存 admin 的 String 物件相同時,upwd.equals("admin") 為 true。當使用者輸入的使用者名稱和密碼都為 admin 時,表示該使用者為合法使用者,提示登入成功資訊,否則提示使用者名稱或密碼有誤的錯誤資訊。
該程式的執行結果下所示:
------歡迎使用巨量資料管理平台------
使用者名稱:
adinm
密碼:
admin
使用者名稱或密碼有誤!
------歡迎使用巨量資料管理平台------
使用者名稱:
admin
密碼:
admin
登入成功!
getClass() 方法
getClass() 方法返回物件所屬的類,是一個 Class 物件。通過 Class 物件可以獲取該類的各種資訊,包括類名、父類別以及它所實現介面的名字等。
例 2
編寫一個範例,演示如何對 String 型別呼叫 getClass() 方法,然後輸出其父類別及實現的介面資訊。具體實現程式碼如下:
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("實現的介面有:");
// 獲取實現的介面並輸出
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);
}
}
該程式的執行結果如下:
類名:java.lang.String
父類別:java.lang.Object
實現的介面有:
interface java.io.Serializable
interface java.lang.Comparable
interface java.lang.CharSequence