Java的Object類及其常用方法
阿新 • • 發佈:2021-07-07
Java的Object類及其常用方法
- 超類、基類、所有類的直接或間接父類,位於繼承樹的最頂層。
- 任何類,如果沒有熟悉些extends顯示繼承某個類,都預設直接繼承Object類,否則為間接繼承
- Object類中所有定義的方法,是所有物件都具備的方法
- Object型別可以儲存任何物件。
- 作為引數,可以接受任何物件。
- 作為返回值,可以返回任何物件
getClass方法
-
public final Class<?> getClass(){}
-
返回引用中儲存的實際物件型別。
-
應用:通常用與判斷兩個引用中實際儲存物件型別是否一致
package com.cnblogs; //本類用於實現 public class Application { public static void main(String[] args) { Student student = new Student("張三",20); Student student2 = new Student("李四",21); Class aClass1 = student.getClass(); Class aClass2 = student2.getClass(); if(aClass1 == aClass2){ System.out.println("student和student2屬於同一型別"); }else{ System.out.println("student和student2不屬於同一型別"); } /* student和student2屬於同一型別 */ } }
package com.cnblogs; /* student類 */ public class Student{ private String name; private int age; public Student(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
getClass()方法是獲得呼叫該方法的物件的類;getClass().getName()可以得到該類的路徑;
通過getClass()方法得到該物件類Class後,可以通過Class獲取這個類中的相關屬性和方法;
hashCode方法
- public int hashCode(){}
- 返回該物件的雜湊碼值。
- 雜湊值根據物件的地址或字串或數字使用hash演算法計算出來的int型別的數值。
- 一般情況下相同物件返回相同的雜湊碼。
package com.cnblogs; //本類用於實現 public class Application { public static void main(String[] args) { Student student = new Student("張三",20); Student student2 = new Student("李四",21); System.out.println(student.hashCode());//460141958 System.out.println(student2.hashCode());//1163157884 Student student3 = student; System.out.println(student3.hashCode());//460141958 } }
package com.cnblogs;
/*
student類
*/
public class Student{
private String name;
private int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
toString方法
- public String toString(){}
- 返回該物件的字串表示(表現形式)
- 可以根據程式需求覆蓋該方法,如:展示物件各個屬性值
package com.cnblogs;
//本類用於實現
public class Application {
public static void main(String[] args) {
Student student = new Student("張三",20);
Student student2 = new Student("李四",21);
//重寫toString方法前
System.out.println(student.toString());//com.cnblogs.Student@1b6d3586
System.out.println(student2.toString());//com.cnblogs.Student@4554617c
//重寫toString方法後
System.out.println(student.toString());//張三:20
System.out.println(student2.toString());//李四:21
}
}
package com.cnblogs;
/*
student類
*/
public class Student{
private String name;
private int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
//重寫toString方法
public String toString(){
return name +":"+ age;
}
}
equals方法
- public boolean equals(Object obj){}
- 預設實現為(this == obj),比較兩個物件地址是否相同
- 可進行覆蓋,比較兩個物件的內容是否相同
package com.cnblogs;
//本類用於實現
public class Application {
public static void main(String[] args) {
Student student = new Student("張三",20);
Student student2 = new Student("李四",21);
//equals方法重寫之前
System.out.println(student.equals(student2));//false
Student student3 = new Student("王五", 18);
Student student4 = new Student("王五", 18);
System.out.println(student3.equals(student4));//false
//equals方法重寫之後
System.out.println(student.equals(student2));//false
System.out.println(student3.equals(student4));//true
}
}
package com.cnblogs;
/*
student類
*/
public class Student{
private String name;
private int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
//重寫equls方法
public boolean equals(Object obj){
//判斷兩個物件是否為同一個引用
if(this == obj){
return true;
}
//判斷obj是否為null
if(obj == null){
return false;
}
//判斷是否是同一個型別
if(obj instanceof Student){
//強制型別轉換
Student s = (Student) obj;
//比較屬性
if(this.name.equals(s.getName()) && this.age == s.getAge()){
return true;
}
}
return false;
}
}
finalize方法
- 當物件被判定位連結物件時,由JVM自動呼叫此方法,用以標記垃圾物件,進入回收佇列。
- 垃圾物件:沒有有效引用指向此物件時,為垃圾物件
- 垃圾回收:由GC銷燬垃圾物件,釋放資料儲存空間
- 自動回收機制:JVM記憶體耗盡,一次性回收所有垃圾物件。
- 手動回收機制:使用System.gc();通知JVM執行垃圾回收
package com.cnblogs;
//本類用於實現
public class Application {
public static void main(String[] args) {
Student student = new Student("張三",20);
Student student2 = new Student("李四",21);
new Student("李四1",21);
new Student("李四2",21);
new Student("李四3",21);
new Student("李四4",21);
new Student("李四5",21);
//回收垃圾
System.gc();
System.out.println("垃圾回收了");
/*
垃圾回收了
李四5垃圾被回收了!!!
李四4垃圾被回收了!!!
李四3垃圾被回收了!!!
李四2垃圾被回收了!!!
李四1垃圾被回收了!!!
*/
}
}
package com.cnblogs;
/*
student類
*/
public class Student{
private String name;
private int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
//重寫finalize方法
protected void finalize()throws Throwable{
System.out.println(this.name + "垃圾被回收了!!!");
}
}