1. 程式人生 > 其它 >Java的Object類及其常用方法

Java的Object類及其常用方法

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 + "垃圾被回收了!!!");
    }

}