Rumah  >  Artikel  >  Java  >  Bagaimana untuk menggunakan kaedah dalam kelas Objek Java

Bagaimana untuk menggunakan kaedah dalam kelas Objek Java

王林
王林ke hadapan
2023-04-18 18:13:11683semak imbas

1. Pengenalan kepada kelas Objek

Objek ialah kelas yang disediakan oleh Java secara lalai. Kecuali untuk kelas Objek, semua kelas di Jawa mempunyai hubungan warisan. Secara lalai, ia akan mewarisi kelas induk Objek. Iaitu, objek semua kelas boleh diterima menggunakan rujukan Object.

Contoh: Gunakan Object untuk menerima objek semua kelas

class Person{}
class Student{}
public class Test {
    public static void main(String[] args) {
        function(new Person());
        function(new Student());
    }
    public static void function(Object obj) {
        System.out.println(obj);
    }
}
//执行结果:
Person@1b6d3586
Student@4554617c

Jadi dalam pembangunan, kelas Object ialah jenis parameter bersatu tertinggi. Tetapi kelas Objek juga mempunyai beberapa kaedah yang jelas. Seperti berikut:

Bagaimana untuk menggunakan kaedah dalam kelas Objek Java

Berikut ialah tiga kaedah: kaedah toString(), kaedah equals(), kaedah hashcode()

2 objek

Apabila kita ingin mencetak kandungan objek, kita boleh melakukannya dengan mengatasi kaedah toString dalam kelas Objek!

Yang berikut menerangkan mengapa kaedah toString() harus ditindih

Kod berikut ingin mencetak objek Orang:

public class Person {
    String name;
    String gender;
    int age;
    public Person(String name, String gender, int age) {
        this.name = name;
        this.gender = gender;
        this.age = age;

    }
    public static void main(String[] args) {
        Person person = new Person("Jim","男", 18);
        System.out.println(person);
    }
}

Lihat hasil pelaksanaan yang dicetak dan ia bukan objek. Kandungan khusus

Bagaimana untuk menggunakan kaedah dalam kelas Objek Java

Berikut ialah kod sumber kaedah println Dalam kod sumber, kaedah valueOf dalam kelas String kod sumber yang melompat ke valueOf, anda boleh menemuinya dalam badan kaedah Malah, kaedah toString dipanggil sekali lagi,

Bagaimana untuk menggunakan kaedah dalam kelas Objek Java

Pada masa ini, mari kita lihat yang khusus. pelaksanaan toString,

Bagaimana untuk menggunakan kaedah dalam kelas Objek Java

getClass ().getName() mengembalikan kelas runtime (Kelas) Objek ini dan mengembalikan nama entiti (kelas, antara muka, tatasusunan kelas, jenis asas atau kekosongan) yang diwakili oleh objek Kelas ini dalam bentuk String

Kaedah hashCode() mengembalikan "alamat"

Integer.toHexString(hashCode()) untuk mendapatkan nilai kod cincang (jenis int) objek ini, dan gunakan kelas Integer kelas pembalut untuk menjana kod cincang jenis int ini Nilai kod Yunani ditukar kepada integer tak bertanda heksadesimal, dan integer heksadesimal ditukar dinyatakan dalam bentuk rentetan

Jadi fungsi output println dilaksanakan dengan memanggil toString di lapisan bawah Jika kita ingin mencetak kandungan khusus objek, kita hanya perlu menulis semula kaedah toString dalam kelas Objek mengikut kami. idea sendiri

public class Person {
    String name;
    String gender;
    int age;

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", gender='" + gender + '\'' +
                ", age=" + age +
                '}';
    }

    public Person(String name, String gender, int age) {
        this.name = name;
        this.gender = gender;
        this.age = age;

    }
    public static void main(String[] args) {
        Person person = new Person("xin","男", 21);
        System.out.println(person);
    }
}

Hasil pelaksanaan:

Bagaimana untuk menggunakan kaedah dalam kelas Objek Java

3 Perbandingan objek sama dengan kaedah

Dalam Java, apabila == dibandingkan:

  • Jika bahagian kiri dan kanan == ialah pembolehubah jenis asas, apa yang dibandingkan ialah Sama ada nilai dalam pembolehubah adalah sama

  • Jika ==Sisi kiri dan kanan ialah pembolehubah jenis rujukan, perbandingannya ialah sama ada alamat pembolehubah rujukan adalah sama

Jika anda mahu Untuk membandingkan kandungan objek, anda mesti menulis semula kaedah equals dalam Object, kerana kaedah equals juga membandingkan berdasarkan alamat secara lalai Berikut ialah kod sumber kaedah equals:

Bagaimana untuk menggunakan kaedah dalam kelas Objek Java

Kod perbandingan untuk. objek Contoh:

class Person{
    private String name ;
    private int age ;
    public Person(String name, int age) {

        this.age = age ;
        this.name = name ;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false ;
        }
        if(this == obj) {
            return true ;
        }
        //不是Person类对象
        if (!(obj instanceof Person)) {
            return false ;
        }
        Person person = (Person) obj ; // 向下转型,比较属性值
        return this.name.equals(person.name) && this.age==person.age ;
    }

}

public class Test {
    public static void main(String[] args) {
        Person p1 = new Person("xin", 20);
        Person p2 = new Person("xin", 20);
        Person p3 = new Person("rong", 21);

        System.out.println(p1.equals(p2));
        System.out.println(p1.equals(p3));

    }
}

Hasil pelaksanaan:

Bagaimana untuk menggunakan kaedah dalam kelas Objek Java

4 kaedah kod cincang

Kaedah kod cincang digunakan untuk menentukan objek yang disimpan. dalam ingatan Sama ada kedudukannya sama

Fungsi hashCode() dalam jadual cincang adalah untuk mendapatkan kod cincang objek, dan kemudian tentukan kedudukan objek dalam jadual cincang.

Kod sumber kaedah hashCode:

Bagaimana untuk menggunakan kaedah dalam kelas Objek Java

Kaedah ini ialah kaedah asli dan lapisan bawah ditulis dalam kod C/C++ ia tidak boleh diperhatikan penyusunnya.

Kami percaya bahawa dua objek dengan nama yang sama dan umur yang sama adalah objek yang sama dan harus disimpan di lokasi yang sama

Lihat kod yang diberikan di bawah, tiada penggantian kaedah hashCode(), Kedua-dua objek mempunyai kandungan yang sama, tetapi nilai hash yang terhasil adalah berbeza:

class Person {
    public String name;
    public int age;
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}
public class TestDemo4 {
    public static void main(String[] args) {
        Person per1 = new Person("xin", 21) ;
        Person per2 = new Person("xin", 21) ;
        System.out.println(per1.hashCode());
        System.out.println(per2.hashCode());
    }
}

Hasil pelaksanaan:

Bagaimana untuk menggunakan kaedah dalam kelas Objek Java

Jadi, jika kita mahu Jika dua objek mempunyai kandungan yang sama dan lokasinya dalam ingatan harus sama, anda perlu mengatasi kaedah hashCode().

import java.util.Objects;

class Person {
    public String name;
    public int age;
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }
}

public class TestDemo4 {
    public static void main(String[] args) {
        Person per1 = new Person("xin", 21) ;
        Person per2 = new Person("xin", 21) ;
        System.out.println(per1.hashCode());
        System.out.println(per2.hashCode());
    }
}

Hasil pelaksanaan:

Bagaimana untuk menggunakan kaedah dalam kelas Objek Java

Atas ialah kandungan terperinci Bagaimana untuk menggunakan kaedah dalam kelas Objek Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam