Kelas Bersarang Statik
Takrifkan kelas bersarang statik sebagai jenis pembantu berkaitan tanpa rujukan kepada tika kelas luar.
Kelas Bersarang Statik ialah pelajaran Java Academy percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Java Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Java Academy merangkumi sejumlah 4 pelajaran.
Kelas Bersarang Statik
Kelas bersarang statik ditakrifkan di dalam kelas lain menggunakan kata kunci static. Kelas ini tidak mempunyai rujukan kepada instans kelas outer — ia hanya dikumpulkan secara logik bersamanya.
Mengisytiharkan Kelas Bersarang Statik
Gunakan nama kelas outer untuk mengakses kelas bersarang dari luar.
class LinkedList<T> {
private Node<T> head;
// Static nested class — no outer instance reference
private static class Node<T> {
T data;
Node<T> next;
Node(T data) { this.data = data; }
}
public void addFirst(T item) {
Node<T> node = new Node<>(item);
node.next = head;
head = node;
}
}Mengakses dari Luar
Rujuk kelas bersarang statik public sebagai OuterClass.InnerClass.
class Builder {
public static class Config {
public final String host;
public final int port;
Config(String host, int port) {
this.host = host; this.port = port;
}
}
}
Builder.Config config = new Builder.Config("localhost", 8080);
System.out.println(config.host + ":" + config.port); // localhost:8080Bersarang Statik berbanding Dalaman
Perbezaan utama: kelas bersarang statik NOT mempunyai rujukan tersirat kepada instans outer. Kelas Inner (bukan statik) DO mempunyai rujukan sedemikian.
class Outer {
private int x = 10;
// Static nested: no access to x
static class StaticNested {
void doSomething() {
// System.out.println(x); // compile error — no outer reference!
System.out.println("Static nested");
}
}
// Inner class: has access to x
class Inner {
void doSomething() {
System.out.println(x); // 10 — can access outer fields
}
}
}Corak Builder dengan Kelas Bersarang Statik
Corak Builder klasik menggunakan kelas bersarang statik supaya pemanggil tidak memerlukan instans outer untuk mencipta pembina.
class Pizza {
private final String size, crust;
private final List<String> toppings;
private Pizza(Builder b) {
this.size = b.size; this.crust = b.crust; this.toppings = List.copyOf(b.toppings);
}
public static class Builder {
private String size = "medium", crust = "thin";
private List<String> toppings = new ArrayList<>();
public Builder size(String s) { this.size = s; return this; }
public Builder crust(String c) { this.crust = c; return this; }
public Builder topping(String t) { this.toppings.add(t); return this; }
public Pizza build() { return new Pizza(this); }
}
}Entri dalam Map
Map.Entry ialah antara muka bersarang statik yang terkenal dan digunakan untuk mengulangi pasangan kunci-nilai.
import java.util.*;
Map<String, Integer> scores = Map.of("Alice", 95, "Bob", 87, "Carol", 92);
for (Map.Entry<String, Integer> entry : scores.entrySet()) {
System.out.printf("%-10s: %d%n", entry.getKey(), entry.getValue());
}
// Modern: using var
for (var entry : scores.entrySet()) {
System.out.println(entry.getKey() + " -> " + entry.getValue());
}Pengujian dengan Kelas Bersarang Statik
Dalam ujian unit, kelas bersarang statik boleh menyimpan lekapan ujian atau pelaksanaan olok-olok yang dikhususkan kepada kelas ujian.
class UserServiceTest {
// Static nested fake/stub — no outer instance needed
static class FakeUserRepository implements UserRepository {
private final Map<Long, User> store = new HashMap<>();
public void save(User u) { store.put(u.id(), u); }
public Optional<User> findById(long id) {
return Optional.ofNullable(store.get(id));
}
}
// @Test methods use FakeUserRepository
void testFindUser() {
FakeUserRepository repo = new FakeUserRepository();
// ...
}
}Kelas Bersarang Statik untuk Logik Domain
Kumpulkan jenis yang berkaitan menggunakan kelas bersarang statik untuk organisasi yang lebih baik dalam model domain.
class Order {
private final long id;
private final List<LineItem> items;
// Static nested — logically belongs to Order, no outer reference needed
public static class LineItem {
public final String sku;
public final int quantity;
public final double unitPrice;
public LineItem(String sku, int qty, double price) {
this.sku = sku; this.quantity = qty; this.unitPrice = price;
}
public double total() { return quantity * unitPrice; }
}
// ...
}Perbandingan: Bersarang Statik berbanding Peringkat Atas
Utamakan kelas bersarang statik apabila sesuatu kelas hanya digunakan dalam konteks kelas outer. Gunakan kelas peringkat atas apabila kelas itu mempunyai kebolehgunaan yang lebih luas.
Kelas Bersarang Statik dengan Generik
Kelas bersarang statik mengambil bahagian dalam generik sama seperti kelas peringkat atas.
class Pair<A, B> {
// Static nested with its own type params
public static class Mutable<X, Y> {
public X first;
public Y second;
public Mutable(X first, Y second) {
this.first = first; this.second = second;
}
}
public static <X, Y> Mutable<X, Y> mutableOf(X x, Y y) {
return new Mutable<>(x, y);
}
}
Pair.Mutable<String, Integer> p = Pair.mutableOf("Alice", 30);
System.out.println(p.first + " is " + p.second); // Alice is 30Kecekapan Memori
Kelas bersarang statik tidak menyimpan rujukan kepada instans outer. Hal ini mengelakkan objek outer tertahan secara tidak sengaja dalam memori, yang boleh menyebabkan kebocoran memori dalam struktur yang berjangka hayat panjang.
Semakan Pantas
Apakah perbezaan antara kelas bersarang statik dengan kelas dalaman (bukan statik)?
Ringkasan: Kelas Bersarang Statik
Perkara utama:
- Kelas bersarang statik dikumpulkan bersama kelas outer tetapi tidak mempunyai rujukan kepada instans outer
- Akses dari luar: OuterClass.NestedClass
- Tanpa rujukan tersirat, tiada pengekalan memori instans outer secara tidak sengaja
- Corak Builder biasanya menggunakan kelas Builder bersarang statik
- Map.Entry ialah antara muka bersarang statik yang terkenal
- Utamakan kelas bersarang statik apabila kelas dalaman tidak memerlukan akses kepada instans outer
Pelajari Java dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 104
- Pelajaran
- 374
Soalan Lazim
Adakah pelajaran “Kelas Bersarang Statik” percuma?
Ya — teks penuh “Kelas Bersarang Statik” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Java Academy, tingkat taraf kepada CoddyKit PRO. Kursus Java Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Kelas Bersarang Statik”?
Takrifkan kelas bersarang statik sebagai jenis pembantu berkaitan tanpa rujukan kepada tika kelas luar. Anda berlatih Java Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Java Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Java Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 4.
Berapa lamakah pelajaran “Kelas Bersarang Statik” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Java Academy ini?
Ya. Setiap pelajaran Java Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Kelas Bersarang Statik
- Kelas Dalaman dan Akses Luaran
- Kelas Setempat dan Tanpa Nama
- Memilih Strategi Pembenaman yang Sesuai