Static Nested Classes
Enclosing instance के reference के बिना संबंधित helper types के रूप में static nested classes परिभाषित करें।
Static Nested Classes, CoddyKit पर Java Academy का एक निःशुल्क पाठ है। यह 4 में से 1वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Java Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
स्टैटिक नेस्टेड क्लास
स्टैटिक नेस्टेड क्लास किसी दूसरी क्लास के अंदर static कीवर्ड के साथ परिभाषित की जाती है। इसका बाहरी क्लास के इंस्टेंस से कोई संदर्भ नहीं होता — इसे केवल तार्किक रूप से उस क्लास के साथ समूहित किया जाता है।
स्टैटिक नेस्टेड क्लास घोषित करना
बाहर से नेस्टेड क्लास तक पहुँचने के लिए बाहरी क्लास के नाम का उपयोग करें।
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;
}
}बाहर से पहुँच बनाना
पब्लिक स्टैटिक नेस्टेड क्लास का संदर्भ 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:8080स्टैटिक नेस्टेड और इनर क्लास की तुलना
मुख्य अंतर: स्टैटिक नेस्टेड क्लास में बाहरी इंस्टेंस का कोई अंतर्निहित संदर्भ नहीं होता। इनर (गैर-स्टैटिक) क्लास में ऐसा संदर्भ होता है।
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
}
}
}स्टैटिक नेस्टेड क्लास के साथ बिल्डर पैटर्न
क्लासिक Builder पैटर्न स्टैटिक नेस्टेड क्लास का उपयोग करता है, इसलिए बिल्डर बनाने के लिए कॉल करने वाले को बाहरी इंस्टेंस की आवश्यकता नहीं होती।
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); }
}
}मैप में प्रविष्टि
Map.Entry एक प्रसिद्ध स्टैटिक नेस्टेड इंटरफ़ेस है, जिसका उपयोग कुंजी-मान युग्मों पर पुनरावृत्ति करने के लिए किया जाता है।
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());
}स्टैटिक नेस्टेड क्लास के साथ परीक्षण
यूनिट परीक्षणों में, स्टैटिक नेस्टेड क्लास परीक्षण फ़िक्स्चर या परीक्षण क्लास के दायरे में मॉक कार्यान्वयन रख सकती है।
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();
// ...
}
}डोमेन लॉजिक के लिए स्टैटिक नेस्टेड क्लास
डोमेन मॉडल में बेहतर संगठन के लिए संबंधित प्रकारों को स्टैटिक नेस्टेड क्लास का उपयोग करके एक साथ समूहित करें।
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; }
}
// ...
}तुलना: स्टैटिक नेस्टेड और शीर्ष-स्तरीय क्लास
जब किसी क्लास का उपयोग केवल बाहरी क्लास के संदर्भ में होता हो, तब स्टैटिक नेस्टेड क्लास को प्राथमिकता दें। जब उसका उपयोग अधिक व्यापक हो, तब शीर्ष-स्तरीय क्लास का उपयोग करें।
जेनेरिक प्रकारों के साथ स्टैटिक नेस्टेड क्लास
स्टैटिक नेस्टेड क्लास भी शीर्ष-स्तरीय क्लास की तरह जेनेरिक प्रकारों में भाग लेती हैं।
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 30मेमोरी दक्षता
स्टैटिक नेस्टेड क्लास बाहरी इंस्टेंस का संदर्भ नहीं रखती हैं। इससे लंबे समय तक जीवित रहने वाली संरचनाओं में बाहरी ऑब्जेक्ट के मेमोरी में अनजाने में बने रहने से बचाव होता है, जो मेमोरी लीकेज का कारण बन सकता है।
त्वरित जाँच
स्टैटिक नेस्टेड क्लास और इनर (गैर-स्टैटिक) क्लास में क्या अंतर होता है?
पुनरावलोकन: स्टैटिक नेस्टेड क्लास
मुख्य बातें:
- स्टैटिक नेस्टेड क्लास बाहरी क्लास के साथ समूहित होती हैं, लेकिन उनमें बाहरी इंस्टेंस का संदर्भ नहीं होता
- बाहर से पहुँच: OuterClass.NestedClass
- अंतर्निहित संदर्भ न होने से बाहरी इंस्टेंस अनजाने में मेमोरी में बने नहीं रहते
- Builder पैटर्न में सामान्यतः स्टैटिक नेस्टेड Builder क्लास का उपयोग किया जाता है
- Map.Entry एक प्रसिद्ध स्टैटिक नेस्टेड इंटरफ़ेस है
- जब इनर क्लास को बाहरी इंस्टेंस तक पहुँच की आवश्यकता न हो, तब स्टैटिक नेस्टेड क्लास को प्राथमिकता दें
एआई शिक्षक के साथ Java सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 104
- पाठ
- 374
अक्सर पूछे जाने वाले प्रश्न
क्या “Static Nested Classes” पाठ निःशुल्क है?
हाँ—“Static Nested Classes” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Java Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“Static Nested Classes” में मैं क्या सीखूँगा?
Enclosing instance के reference के बिना संबंधित helper types के रूप में static nested classes परिभाषित करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Java Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Java Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Java Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 1वाँ पाठ है।
“Static Nested Classes” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Java Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Java Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- Static Nested Classes
- Inner Classes और Outer Access
- Local और Anonymous Classes
- सही Nesting Strategy चुनना