Pertanyaan Kelas Statis Di Jawa


Apakah ada yang seperti itu static class di java?

Apa arti dari kelas seperti itu. Lakukan semua metode dari kelas statis static terlalu?

Apakah diperlukan sebaliknya, bahwa jika sebuah kelas berisi semua metode statis, akankah kelas menjadi statis juga?

Apa yang baik untuk kelas statis?


764
2017-09-20 13:32


asal


Jawaban:


Java memiliki statis bersarang kelas tetapi kedengarannya seperti Anda sedang mencari kelas statis tingkat atas. Java tidak memiliki cara untuk membuat kelas atas statis tetapi Anda dapat mensimulasikan kelas statis seperti ini:

  • Deklarasikan kelas Anda final - Mencegah perpanjangan kelas karena memperluas kelas statis tidak masuk akal
  • Buat konstruktor private - Mencegah Instansiasi oleh kode klien karena tidak masuk akal untuk instantiate kelas statis
  • Membuat semua anggota dan fungsi kelas static - Karena kelas tidak dapat dipakai instantiate tidak ada metode instan yang dapat dipanggil atau kolom instance yang diakses
  • Perhatikan bahwa compiler tidak akan menghalangi Anda untuk mendeklarasikan instance (non-static) member. Masalah ini hanya akan muncul jika Anda mencoba memanggil anggota instance

Contoh sederhana per saran dari atas:

public class TestMyStaticClass {
     public static void main(String []args){
        MyStaticClass.setMyStaticMember(5);
        System.out.println("Static value: " + MyStaticClass.getMyStaticMember());
        System.out.println("Value squared: " + MyStaticClass.squareMyStaticMember());
        // MyStaticClass x = new MyStaticClass(); // results in compile time error
     }
}

// A top-level Java class mimicking static class behavior
public final class MyStaticClass {
    private MyStaticClass () { // private constructor
        myStaticMember = 1;
    }
    private static int myStaticMember;
    public static void setMyStaticMember(int val) {
        myStaticMember = val;
    }
    public static int getMyStaticMember() {
        return myStaticMember;
    }
    public static int squareMyStaticMember() {
        return myStaticMember * myStaticMember;
    }
}

Apa bagusnya kelas statis? Penggunaan yang baik dari kelas statis adalah dalam mendefinisikan kelas satu-off, utilitas dan / atau perpustakaan di mana instantiasi tidak masuk akal. Contoh yang bagus adalah kelas Math yang berisi beberapa konstanta matematika seperti PI dan E dan hanya menyediakan perhitungan matematis. Membutuhkan Instansiasi dalam kasus seperti itu tidak perlu dan membingungkan. Lihat kelas Matematika Java. Perhatikan bahwa ini adalah final dan semua anggotanya bersifat statis. Jika Java memungkinkan kelas-kelas top-level untuk dideklarasikan statis maka kelas Math akan benar-benar statis.


710
2017-09-20 13:39



Nah, Java memiliki "kelas bertingkat statis", tetapi mereka tidak sama dengan kelas statis C #, jika dari sanalah Anda berasal. Kelas bertingkat statis hanyalah salah satu yang tidak secara implisit memiliki referensi ke sebuah instance dari kelas luar.

Kelas bertingkat statis dapat memiliki metode instan dan metode statis.

Tidak ada yang namanya kelas statis tingkat atas di Jawa.


278
2017-09-20 13:35



Ada yang statis kelas bertingkat, kelas [bertingkat statis] ini tidak memerlukan instance dari kelas melampirkan agar dapat dipakai sendiri.

Kelas-kelas ini [yang bersarang statis] hanya dapat mengakses anggota statis kelas yang melampirkan [karena tidak memiliki referensi ke instance dari kelas penutup ...]

contoh kode:

public class Test { 
  class A { } 
  static class B { }
  public static void main(String[] args) { 
    /*will fail - compilation error, you need an instance of Test to instantiate A*/
    A a = new A(); 
    /*will compile successfully, not instance of Test is needed to instantiate B */
    B b = new B(); 
  }
}

125
2017-09-20 13:35



Ya ada kelas bertingkat statis di java. Ketika Anda mendeklarasikan kelas bertingkat statis, secara otomatis menjadi kelas berdiri sendiri yang dapat dipakai tanpa harus instantiate kelas luar itu milik.

Contoh:

public class A
{

 public static class B
 {
 }
}

Karena class B dinyatakan statis Anda dapat secara eksplisit memberi contoh sebagai:

B b = new B();

Perhatikan jika class B tidak dinyatakan statis untuk membuatnya berdiri sendiri, panggilan objek instan akan tampak seperti ini:

A a= new A();
B b = a.new B();

83
2017-09-20 13:39



Apa yang terjadi ketika anggota di dalam class dinyatakan sebagai static..? Anggota itu dapat diakses tanpa instantiating class. Oleh karena itu membuat kelas luar (kelas tingkat atas) static tidak ada artinya. Karena itu tidak diperbolehkan.

Tetapi Anda dapat mengatur kelas batin sebagai statis (Karena ini adalah anggota kelas tingkat atas). Kemudian kelas tersebut dapat diakses tanpa instantiating kelas tingkat atas. Perhatikan contoh berikut.

public class A {
    public static class B {

    }
}

Sekarang, di dalam kelas yang berbeda C, kelas B dapat diakses tanpa membuat instance dari kelas A.

public class C {
    A.B ab = new A.B();
}

static kelas dapat memiliki non-static anggota juga. Hanya kelas yang menjadi statis.

Tetapi jika itu static kata kunci dihapus dari kelas B, itu tidak dapat diakses secara langsung tanpa membuat contoh A.

public class C {
    A a = new A();
    A.B ab = a. new B();
}

Tetapi kita tidak bisa memilikinya static anggota di dalam non-static kelas batin.


28
2017-12-18 06:05



Bisakah kelas menjadi statis di Jawa?

Jawabannya adalah IYA NIH, kita dapat memiliki kelas statis di java. Di java, kami punya variabel instan statis sebaik metode statis dan juga blok statis. Kelas juga bisa dibuat statis di Java.

Di java, kami tidak dapat membuat level teratas (luar) kelas statis. Hanya kelas bertingkat yang bisa statis.

kelas bertingkat statis vs kelas bertingkat non-statik

1) Kelas statis bertingkat tidak memerlukan referensi kelas Luar, namun     Kelas bertingkat non-statik atau kelas dalam membutuhkan kelas Outer     referensi.

2) Kelas dalam (atau kelas bertingkat non-statis) dapat mengakses kedua statis     dan anggota luar kelas non-statis. Kelas statis tidak dapat diakses     anggota non-statis dari kelas Luar. Ini hanya dapat mengakses statis     anggota kelas luar.

https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html


11
2017-10-10 09:19



Karena ini adalah hasil teratas di Google untuk "java kelas statis" dan jawaban terbaiknya tidak ada di sini, saya pikir saya akan menambahkannya. Saya menafsirkan pertanyaan OP sebagai tentang kelas statis di C #, yang dikenal sebagai lajang di dunia Jawa. Bagi mereka yang tidak tahu, di C # kata kunci "statis" dapat diterapkan ke deklarasi kelas yang berarti kelas yang dihasilkan tidak pernah dapat dipakai.

Kutipan dari "Java Efektif - Edisi Kedua" oleh Joshua Bloch (secara luas dianggap sebagai salah satu panduan gaya Java terbaik yang tersedia):

Pada rilis 1.5, ada pendekatan ketiga untuk menerapkan lajang. Cukup buat tipe enum dengan satu elemen:

// Enum singleton - the preferred approach
public enum Elvis {
    INSTANCE;
    public void leaveTheBuilding() { ... }
}

Pendekatan ini secara fungsional setara dengan pendekatan lapangan publik, kecuali bahwa ia lebih ringkas, menyediakan mesin serialisasi secara gratis, dan memberikan jaminan ketat terhadap beberapa instansi, bahkan dalam menghadapi serangan serialisasi atau refleksi yang canggih. Meskipun pendekatan ini belum diadopsi secara luas, a tipe enum satu elemen adalah cara terbaik untuk menerapkan tunggal. (penekanan penulis)

Bloch, Joshua (2008-05-08). Java efektif (Java Series) (hlm. 18). Pendidikan Pearson.

Saya pikir implementasi dan justifikasi cukup jelas.


10
2018-02-24 02:37



Kelas luar tidak boleh statis, tetapi kelas yang bersarang / batin bisa. Itu pada dasarnya membantu Anda untuk menggunakan kelas bersarang / batin tanpa membuat instance dari kelas luar.


9
2017-09-20 13:36



Java memiliki metode statis yang terkait dengan kelas (misalnya java.lang.Math hanya memiliki metode statis), tetapi kelas itu sendiri tidak statis.


1
2017-09-20 13:35