Apakah ada yang seperti static class
di java?
Apa arti dari kelas semacam itu. Apakah semua metode dari kelas statis juga perlu static
?
Apakah diperlukan sebaliknya, bahwa jika suatu kelas berisi semua metode statis, apakah kelas itu juga statis?
Untuk apa kelas statis itu bagus?
java
static-classes
Kraken
sumber
sumber
Jawaban:
Java memiliki kelas bersarang statis tetapi sepertinya Anda mencari kelas statis tingkat atas. Java tidak memiliki cara untuk membuat kelas statis level atas tetapi Anda dapat mensimulasikan kelas statis seperti ini:
final
- Mencegah ekstensi kelas karena memperluas kelas statis tidak masuk akalprivate
- Mencegah instantiation dengan kode klien karena tidak masuk akal untuk membuat instance kelas statisstatic
- Karena kelas tidak dapat dipakai, tidak ada metode instance yang bisa dipanggil atau bidang instance diaksesContoh sederhana per saran dari atas:
Apa bagusnya kelas statis? Penggunaan yang baik dari kelas statis adalah dalam mendefinisikan kelas satu kali, utilitas dan / atau perpustakaan di mana instantiasi tidak masuk akal. Contoh yang bagus adalah kelas Matematika yang berisi beberapa konstanta matematika seperti PI dan E dan hanya menyediakan perhitungan matematika. Membutuhkan instantiasi dalam kasus seperti itu tidak perlu dan membingungkan. Lihat
Math
kelas dan kode sumber . Perhatikan bahwa itu adalahfinal
dan semua anggotanyastatic
. Jika Java mengizinkan kelas tingkat atas untuk dideklarasikanstatic
maka kelas Matematika memang akan statis.sumber
Foo
denganstatic
metode saja tidak sama denganstatic class Foo
Yah, Java memiliki "kelas bertingkat statis", tetapi mereka sama sekali tidak sama dengan kelas statis C #, jika dari sanalah Anda berasal. Kelas bersarang statis hanyalah salah satu yang tidak secara implisit memiliki referensi ke turunan dari kelas luar.
Kelas bersarang statis dapat memiliki metode instan dan metode statis.
Tidak ada yang namanya kelas statis tingkat atas di Jawa.
sumber
static
saat mendeklarasikannya. Secara implisit statis karena Anda tidak perlu referensi ke hal lain untuk membangunnya. Secara pribadi saya menemukan terminologi statis / non-statis agak aneh untuk kelas bersarang ... Saya pikir akan lebih mudah untuk berbicara tentang apa perilakunya.Ada kelas bersarang statis , kelas [statis bersarang] ini tidak memerlukan turunan dari kelas yang dilampirkan untuk dapat dipakai sendiri.
Kelas-kelas ini [yang bersarang statis] hanya dapat mengakses anggota statis dari kelas melampirkan [karena tidak memiliki referensi untuk contoh kelas melampirkan ...]
contoh kode:
sumber
Ya ada kelas bersarang statis di java. Ketika Anda mendeklarasikan static class bersarang, itu secara otomatis menjadi kelas yang berdiri sendiri yang dapat dipakai tanpa harus instantiate kelas luar miliknya.
Contoh:
Karena
class B
dinyatakan statis Anda dapat secara eksplisit memberi contoh sebagai:Catatan jika
class B
tidak dinyatakan statis untuk membuatnya berdiri sendiri, panggilan objek instan akan terlihat seperti ini:sumber
B b = new B();
jika Anda mencoba untuk instantiate dari kelasA
itu sendiri.Apa yang terjadi ketika anggota di dalam
class
dinyatakan sebagaistatic
..? Anggota itu dapat diakses tanpa membuat instanceclass
. Karena itu membuat kelas luar (kelas tingkat atas)static
tidak ada artinya. Karena itu tidak diperbolehkan.Tetapi Anda dapat mengatur kelas dalam sebagai statis (Karena itu adalah anggota kelas tingkat atas). Kemudian kelas itu dapat diakses tanpa membuat kelas tingkat atas. Perhatikan contoh berikut.
Sekarang, di dalam kelas yang berbeda
C
, kelasB
dapat diakses tanpa membuat turunan kelasA
.static
kelas dapat memilikinon-static
anggota juga. Hanya kelas yang statis.Tetapi jika
static
kata kunci dihapus dari kelasB
, itu tidak dapat diakses secara langsung tanpa membuat instance dariA
.Tetapi kita tidak dapat memiliki
static
anggota dinon-static
dalam kelas batin.sumber
static
hanya memiliki satu makna di java. Jika ada sesuatustatic
dalam kelas itu berarti benda itu dapat diakses tanpa membuat instance kelas itu. Itu tidak mengatakan apa-apa tentang membuat instance atau tidak ..Melihat ini adalah hasil teratas di Google untuk "java kelas statis" dan jawaban terbaik tidak ada di sini saya pikir saya akan menambahkannya. Saya menafsirkan pertanyaan OP tentang kelas statis di C #, yang dikenal sebagai lajang di dunia Jawa. Bagi mereka yang tidak sadar, dalam C # kata kunci "statis" dapat diterapkan pada deklarasi kelas yang berarti kelas yang dihasilkan tidak akan pernah dapat dipakai.
Kutipan dari "Java Efektif - Edisi Kedua" oleh Joshua Bloch (secara luas dianggap sebagai salah satu panduan gaya Java terbaik yang tersedia):
Bloch, Joshua (2008-05-08). Java Efektif (Seri Java) (hlm. 18). Pendidikan Pearson.
Saya pikir implementasi dan pembenarannya cukup jelas.
sumber
Bisakah kelas menjadi statis di Jawa?
Jawabannya adalah YA , kita dapat memiliki kelas statis di java. Di java, kami memiliki variabel instance statis serta metode statis dan juga blok statis . Kelas juga bisa dibuat statis di Jawa.
Di java, kita tidak bisa membuat kelas atas (luar) statis. Hanya kelas bersarang yang bisa statis.
kelas bertingkat statis vs kelas bertingkat non-statis
1) Kelas statis bersarang tidak memerlukan referensi kelas luar, tetapi kelas bertingkat non-statis atau kelas dalam membutuhkan referensi kelas luar.
2) Kelas dalam (atau kelas bertingkat non-statis) dapat mengakses anggota kelas luar statis dan non-statis. Kelas statis tidak dapat mengakses anggota non-statis kelas luar. Itu hanya dapat mengakses anggota statis kelas luar.
lihat di sini: https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html
sumber
Kelas luar tidak bisa statis, tetapi kelas bersarang / dalam bisa. Itu pada dasarnya membantu Anda untuk menggunakan kelas bersarang / dalam tanpa membuat turunan dari kelas luar.
sumber
Secara sederhana, Java mendukung deklarasi sebuah kelas menjadi statis hanya untuk kelas dalam tetapi tidak untuk kelas tingkat atas.
kelas tingkat atas: Sebuah proyek java dapat berisi lebih dari satu kelas tingkat atas di setiap file sumber java, salah satu kelas diberi nama setelah nama file. Hanya ada tiga opsi atau kata kunci yang diizinkan di depan kelas tingkat atas, publik, abstrak, dan final .
Kelas dalam: kelas yang berada di dalam kelas tingkat atas disebut kelas dalam, yang pada dasarnya adalah konsep kelas bertingkat. Kelas batin bisa statis . Gagasan membuat kelas dalam statis, adalah untuk mengambil keuntungan dari instantiate objek kelas batin tanpa membuat instance objek dari kelas tingkat atas. Ini persis cara yang sama seperti metode dan variabel statis bekerja di dalam kelas tingkat atas.
Karenanya Java Mendukung Kelas Statis di Tingkat Kelas Dalam (di kelas bersarang)
Dan Java Tidak Mendukung Kelas Statis di Kelas Tingkat Atas.
Saya harap ini memberikan solusi yang lebih sederhana untuk pertanyaan untuk pemahaman dasar tentang kelas statis di Jawa.
sumber
Java memiliki metode statis yang dikaitkan dengan kelas (mis. Java.lang.Math hanya memiliki metode statis), tetapi kelas itu sendiri tidak statis.
sumber
Anda tidak dapat menggunakan kata kunci statis dengan kelas kecuali jika itu adalah kelas dalam. Kelas dalam statis adalah kelas bersarang yang merupakan anggota statis dari kelas luar. Itu dapat diakses tanpa membuat instance kelas luar, menggunakan anggota statis lainnya. Sama seperti anggota statis, kelas bersarang statis tidak memiliki akses ke variabel instan dan metode dari kelas luar.
sumber
static
kata kunci dengan kelas kecuali jika itu adalah kelas bersarang . 'Static inner' adalah kontradiksi dalam istilah .Metode statis berarti dapat diakses tanpa membuat objek kelas, tidak seperti publik:
sumber
Semua jawaban yang baik, tetapi saya tidak melihat referensi ke java.util.Collections yang menggunakan banyak kelas dalam statis untuk metode faktor statis mereka. Jadi menambahkan hal yang sama.
Menambahkan contoh dari java.util.Collections yang memiliki beberapa kelas dalam statis. Kelas dalam berguna untuk mengelompokkan kode yang perlu diakses melalui kelas luar.
Berikut adalah metode faktor statis di kelas java.util.Collections
sumber