1. 簡介
類層次結構最頂層的基類,所有類都直接或間接的繼承自Object類,所有的類都是一個Object(對象)。API
2. 構造方法
- Object():構造一個對象,所有子類對象初始化時都會優先調用該方法。
3. 常用成員方法
方法名 | 描述 |
---|---|
int hashCode() | 返回對象的哈希碼值,該方法通過對象的地址值進行計算,不同對象的返回值一般不同。 |
Class<?> getClass() | 返回調用該方法對象的運行時類的對象(調用者的字節碼文件) |
String toString() | 返回該對象的字符串表示。 |
boolean equals() | 返回其他某個對象是否與此對象“相等”,默認情況下比較兩個對象的引用(地址值),建議重寫。 |
4. 重寫Object類中的方法
使用場景:
- 將對象轉換成字符串形式進行傳輸
- 比較兩個對象是否相等
- 定義標準JavaBean類,重寫toString和equals方法。
5. 測試Object中的方法
/**
* 學習Object類
* 注意:java.lang包下的類可以直接使用,不需要導入包。
*/
public class Text {
public static void main(String[] args) {
//非靜態方法的調用方式:通過 對象名. 的形式調用。
//1. 創建Object類型的對象
Object obj1 = new Object();
Object obj2 = new Object();
//2. 測試Object類中的成員方法
//2.1 hashCode:不同對象的哈希碼值一般不同
int code1 = obj1.hashCode();
int code2 = obj2.hashCode();
System.out.println(code1);
System.out.println(code2);
System.out.println("-------------分割線---------------");
//2.2 Class<?> getClass():一個類只有一個字節碼對象。
Class cls1 = obj1.getClass();
Class cls2 = obj2.getClass();
System.out.println(cls1);
System.out.println(cls2);
System.out.println("-------------分割線---------------");
//2.3 String toString():返回對象的字符串形式,默認返回的是地址值,不同的對象有不同的返回值
//地址值的組成:全類名@該對象的哈希碼的無符號十六進制形式
String s1 = obj1.toString();
String s2 = obj2.toString();
System.out.println(s1);
System.out.println(s2);
System.out.println("-------------分割線---------------");
//2.4 boolean equals():比較兩個對象是否相等,默認比較地址值(無意義),子類一般會重寫。
boolean b = obj1.equals(obj2);
System.out.println(b);
}
}
運行結果:
356573597
1735600054
-------------分割線---------------
class java.lang.Object
class java.lang.Object
-------------分割線---------------
java.lang.Object@1540e19d
java.lang.Object@677327b6
-------------分割線---------------
false
6. 案例
- 定義學生類,重寫toString和equals方法
/**
* 類:Student
* 屬性:name、id、age
* 方法:setter、getter和重寫的toString、equals
*/
public class Student {
//成員變量
private String name;
private int id;
private int age;
//構造方法
public Student() {
}
public Student(String name, int id, int age) {
this.name = name;
this.id = id;
this.age = age;
}
//getter和setter
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
//重寫toString方法
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", id=" + id +
", age=" + age +
'}';
}
//重寫equals方法
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Student)) return false;
Student student = (Student) o;
return id == student.id &&
age == student.age;
}
}
- 編寫測試類測試toString()和equals()方法
/**
* 重寫Object中的toString和equals方法
*/
public class Test {
public static void main(String[] args) {
//測試toString
Student s1 = new Student("張三", 1, 18);
System.out.println(s1);
System.out.println(s1.toString());
System.out.println("---------------分割線-------------------");
//測試equals
Student s2 = new Student("張三", 1, 18);
System.out.println("s2和s1比較:" + s2.equals(s1));
Student s3 = new Student("李四", 2, 17);
System.out.println("s3和s1比較:" + s3.equals(s1));
}
}
運行結果:
Student{name='張三', id=1, age=18}
Student{name='張三', id=1, age=18}
---------------分割線-------------------
s2和s1比較:true
s3和s1比較:false
時間:2019年10月23日23:39:02