Rumah >Java >javaTutorial >Kata Kunci Statik: Mengakses Ahli Statik dan Bukan Statik dalam Kaedah

Kata Kunci Statik: Mengakses Ahli Statik dan Bukan Statik dalam Kaedah

DDD
DDDasal
2024-10-25 00:39:30929semak imbas

Static Keyword: Accessing Static and Non-Static Members in Methods

Dalam siaran ini, kami akan menumpukan pada cara kaedah berinteraksi dengan ahli statik dan bukan statik dan mengapa pembolehubah tempatan statik tidak dibenarkan. Ini ialah topik temu bual biasa dan konsep penting untuk pembangun Java.

Siaran ini dibina berdasarkan konsep yang diliputi dalam siaran terdahulu siri ini. Jika anda baru menggunakan kata kunci statik, saya syorkan anda menyemak Blok Statik dan Pembolehubah Statik untuk mendapatkan asas yang lebih baik sebelum menyelami topik yang dibincangkan di sini.


Ikhtisar Kaedah dan Ahli Statik

  • Ahli statik (pembolehubah atau kaedah) tergolong dalam kelas dan bukannya tika kelas.
  • Ahli bukan statik terikat pada objek tertentu dan unik pada setiap kejadian.

Memandangkan kaedah statik beroperasi di peringkat kelas, mereka tidak boleh mengakses ahli contoh secara langsung.


Program Menunjukkan Capaian Statik dan Bukan Statik:

package keywords.static_keyword;

public class StaticVariables {

    // Static and non-static variables
    static int idStatic = 1;  // Shared across all instances
    int id;                   // Unique to each instance
    String name;              // Unique to each instance

    // Static block – Runs once when the class is loaded
    static {
        displayStatic();  // Call to static method

        // Cannot access non-static method in static block
        display(); // --> Compilation error
    }

    // Constructor to initialize non-static variables
    public StaticVariables(String name) {
        this.id = ++idStatic;  // Increment static ID for every new instance
        this.name = name;
    }

    // Non-static method: Can access both static and non-static members
    void display() {
        System.out.println("Instance Method:");
        System.out.println("Static ID: " + idStatic + ", Instance ID: " +
        id + ", Name: " + name);
    }

    // Static method: Can only access static members directly
    static void displayStatic() {
        System.out.println("Static Method:");
        System.out.println("Static ID: " + idStatic);

        // Static local variables are not allowed
        static int localVar = 10; // --> Compilation error
    }

    public static void main(String[] args) {
        // Call static method directly
        displayStatic();

        // Create instances to access non-static methods
        StaticVariables obj1 = new StaticVariables("Object1");
        StaticVariables obj2 = new StaticVariables("Object2");

        // Access non-static methods through objects
        obj1.display();
        obj2.display();
    }
}

Konsep Utama dan Peraturan Akses

1. Mengapa Pembolehubah Tempatan Statik Tidak Dibenarkan di Java?

Java tidak membenarkan pembolehubah setempat statik di dalam kaedah atau blok.

  • Sebab:
    • Pembolehubah setempat tergolong dalam bingkai tindanan kaedah dan dicipta apabila kaedah itu digunakan.
    • Pembolehubah statik, bagaimanapun, ialah ahli peringkat kelas dan harus boleh diakses merentas keseluruhan kitaran hayat kelas.
    • Membenarkan pembolehubah statik dalam kaedah akan menyebabkan percanggahan kerana pembolehubah tempatan kaedah mempunyai jangka hayat yang pendek terikat dengan pelaksanaan kaedah.
package keywords.static_keyword;

public class StaticVariables {

    // Static and non-static variables
    static int idStatic = 1;  // Shared across all instances
    int id;                   // Unique to each instance
    String name;              // Unique to each instance

    // Static block – Runs once when the class is loaded
    static {
        displayStatic();  // Call to static method

        // Cannot access non-static method in static block
        display(); // --> Compilation error
    }

    // Constructor to initialize non-static variables
    public StaticVariables(String name) {
        this.id = ++idStatic;  // Increment static ID for every new instance
        this.name = name;
    }

    // Non-static method: Can access both static and non-static members
    void display() {
        System.out.println("Instance Method:");
        System.out.println("Static ID: " + idStatic + ", Instance ID: " +
        id + ", Name: " + name);
    }

    // Static method: Can only access static members directly
    static void displayStatic() {
        System.out.println("Static Method:");
        System.out.println("Static ID: " + idStatic);

        // Static local variables are not allowed
        static int localVar = 10; // --> Compilation error
    }

    public static void main(String[] args) {
        // Call static method directly
        displayStatic();

        // Create instances to access non-static methods
        StaticVariables obj1 = new StaticVariables("Object1");
        StaticVariables obj2 = new StaticVariables("Object2");

        // Access non-static methods through objects
        obj1.display();
        obj2.display();
    }
}

2. Kaedah Statik

  • Boleh akses terus pembolehubah statik dan kaedah statik lain.
  • Tidak boleh mengakses ahli bukan statik secara langsung (kerana tiada objek wujud dalam konteks statik).

3. Kaedah Bukan Statik

  • Boleh mengakses kedua-dua ahli statik dan bukan statik.
  • Fleksibiliti ini wujud kerana kaedah bukan statik tergolong dalam contoh objek, memberikan mereka akses kepada kedua-dua data peringkat kelas dan peringkat contoh.

4. Blok Statik

  • Melaksanakan sekali apabila kelas dimuatkan oleh JVM.
  • Boleh memanggil kaedah statik tetapi tidak boleh memanggil kaedah bukan statik secara langsung, kerana tiada objek tersedia pada ketika ini.

Keluaran Program

static void displayStatic() {
    static int localVar = 10; // --> Compilation error
}

Ringkasan Peraturan

Context Access Static Members Access Non-Static Members Allow Static Local Variables?
Static Method Yes No No
Non-Static Method Yes Yes No
Static Block Yes No No
Konteks Akses Ahli Statik Akses Ahli Bukan Statik Benarkan Pembolehubah Setempat Statik? Kaedah Statik Ya Tidak Tidak Kaedah Bukan Statik Ya Ya Tidak Blok Statik Ya Tidak Tidak

Bila Gunakan Kaedah Statik?

  • Fungsi Utiliti atau Pembantu: Cth., Math.pow().
  • Apabila Tiada Data Instance Diperlukan: Operasi bebas daripada keadaan objek.

Kesimpulan

Kaedah dan ahli statik ialah alatan penting dalam Java. Berikut ialah pengambilan utama:

  • Kaedah statik beroperasi pada peringkat kelas dan hanya boleh mengakses ahli statik secara langsung.
  • Kaedah bukan statik mempunyai akses kepada ahli statik dan bukan statik.
  • Pembolehubah setempat statik tidak dibenarkan di Java kerana konflik antara skop kaedah dan hayat statik.

Dengan memahami peraturan ini, anda akan dapat menggunakan kaedah statik dengan berkesan dalam program anda.


Catatan Berkaitan

  • Asas Java

  • Keperluan Temuduga Tatasusunan

  • Java Memory Essentials

  • Kerangka Kerja Koleksi Penting

Selamat Pengekodan!

Atas ialah kandungan terperinci Kata Kunci Statik: Mengakses Ahli Statik dan Bukan Statik dalam Kaedah. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn