Java Object类详解
Object 是 Java 類庫中的一個特殊類,也是所有類的父類。也就是說,Java 允許把任何類型的對象賦給 Object 類型的變量。當一個類被定義后,如果沒有指定繼承的父類,那么默認父類就是 Object 類。因此,以下兩個類表示的含義是一樣的。
public class MyClass{…}等價于
public class MyClass extends Object {…}Java 所有的類都是 Object 類的子類,任何 Java 對象都可以調用 Object 類的方法。
Object 類的常用方法
toString() 方法
toString() 方法返回該對象的字符串,當程序輸出一個對象或者把某個對象和字符串進行連接運算時,系統會自動調用該對象的 toString() 方法返回該對象的字符串表示。
Object 類的 toString() 方法返回“運行時類名@十六進制哈希碼”格式的字符串,但很多類都重寫了 Object 類的 toString() 方法,用于返回可以表述該對象信息的字符串。
哈希碼(hashCode),每個 Java 對象都有哈希碼屬性,哈希碼可以用來標識對象,提高對象在集合操作中的執行效率。
代碼示例
// 定義Demo類,實際上繼承Object類 class Demo {}public class ObjectDemo {public static void main(String[] args) {Demo d = new Demo(); // 實例化Demo對象System.out.println("不加toString()輸出:" + d);System.out.println("加上toString()輸出:" + d.toString());} }輸出結果為:
不加toString()輸出:Demo@15db9742 加上toString()輸出:Demo@15db9742隨機輸出了一些地址信息,加和不加 toString() 的最終輸出結果是一樣的,也就是說對象輸出時一定會調用 Object 類中的 toString() 方法打印內容。所以利用此特性就可以通過 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);// 打印對象調用toString()方法} }輸出結果為:
對象信息:姓名:百度:年齡30Person 類中重寫了 Object 類中的 toString() 方法,這樣直接輸出對象時調用的是被子類重寫過的 toString() 方法。
equals() 方法
在字符串比較時,介紹過兩種比較方法,分別是==運算符和 equals() 方法,==運算符是比較兩個引用變量是否指向同一個實例,equals() 方法是比較兩個對象的內容是否相等,通常字符串的比較只是關心內容是否相等。
其使用格式如下:
boolean result = obj.equals(Object o);其中,obj 表示要進行比較的一個對象,o 表示另一個對象。
要求用戶從鍵盤輸入登錄用戶名和密碼,當用戶輸入的用戶名等于 admin 并且密碼也等于 admin 時,則表示該用戶為合法用戶,提示登錄成功,否則提示用戶名或者密碼錯誤信息。
在這里使用 equals() 方法將用戶輸入的字符串與保存 admin 的字符串對象進行比較,具體的代碼如下:
import java.util.Scanner;public class Test {// 驗證用戶名和密碼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 時,表示該用戶為合法用戶,提示登錄成功信息,否則提示用戶名或密碼有誤的錯誤信息。
getClass() 方法
getClass() 方法返回對象所屬的類,是一個 Class 對象。通過 Class 對象可以獲取該類的各種信息,包括類名、父類以及它所實現接口的名字等。
對 String 類型調用 getClass() 方法,然后輸出其父類及實現的接口信息。代碼如下:
public class Test {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接收任意引用類型的對象
既然 Object 類是所有對象的父類,則所有的對象都可以向 Object 進行轉換,在這其中也包含了數組和接口類型,即一切的引用數據類型都可以使用 Object 進行接收。
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();// 對象向上轉型Object obj = a;// 對象向下轉型A x = (A) obj;System.out.println(x.getInfo());} }輸出結果為:
Hello World!!!我們可以發現,雖然接口不能繼承一個類,但是依然是 Object 類的子類,因為接口本身是引用數據類型,所以可以進行向上轉型操作。
同理,也可以使用 Object 接收一個數組,因為數組本身也是引用數據類型。
public class ObjectDemo {public static void main(String[] args) {int temp[] = { 1, 3, 5, 7, 9 };// 使用object接收數組Object obj = temp;// 傳遞數組引用print(obj);}public static void print(Object o) {// 判斷對象的類型if (o instanceof int[]) {// 向下轉型int x[] = (int[]) o;// 循環輸出for (int i = 0; i < x.length; i++) {System.out.print(x[i] + "\t");}}} }輸出結果為:
1 3 5 7 9使用 Object 接收一個整型數組,因為數組本身屬于引用數據類型,所以可以使用 Object 接收數組內容,在輸出時通過 instanceof 判斷類型是否是一個整型數組。
總結
以上是生活随笔為你收集整理的Java Object类详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java Float类详解
- 下一篇: C++ 奇偶判断