Java कुछ अन्य मॉडिफायर्स प्रदान करता है जो विजिबिलिटी के अलावा कार्यक्षमता प्रदान करते हैं। इन मॉडिफायर्स को नॉन-एक्सेस मॉडिफायर्स (Non-Access Modifiers) कहा जाता है।
Java के नॉन-एक्सेस मॉडिफायर्स
| मॉडिफायर | लागू होता है | विवरण |
|---|---|---|
| static | वेरिएबल्स, मेथड्स, नेस्टेड क्लासेस, इनिशियलाइजर ब्लॉक्स | मेंबर्स जो static घोषित हैं, क्लास के सभी इंस्टेंसेस के लिए सामान्य होते हैं। Static मेंबर्स क्लास-लेवल मेंबर्स होते हैं जो क्लास मेमोरी में स्टोर होते हैं। |
| final | वेरिएबल्स, मेथड्स, क्लासेस | वेरिएबल, मेथड या क्लास के आगे संशोधन को प्रतिबंधित करता है। final वेरिएबल का मान एक बार असाइन होने के बाद बदला नहीं जा सकता। final मेथड को सबक्लास में ओवरराइड नहीं किया जा सकता और final क्लास का सबक्लास नहीं बनाया जा सकता। |
| abstract | क्लासेस, मेथड्स | क्लास या मेथड के साथ उपयोग किया जा सकता है। वेरिएबल और कंस्ट्रक्टर पर लागू नहीं होता। abstract मेथड को सबक्लास में इम्प्लीमेंट करना आवश्यक है। abstract क्लास को इंस्टेंशिएट नहीं किया जा सकता। |
| synchronized | मेथड्स, ब्लॉक्स | किसी विशेष मेथड या ब्लॉक की एकाधिक थ्रेड्स द्वारा एक्सेस को नियंत्रित करता है। केवल एक थ्रेड synchronized घोषित मेथड या ब्लॉक में प्रवेश कर सकता है। |
| transient | वेरिएबल्स (इंस्टेंस) | सीरियलाइजेशन प्रक्रिया में उपयोग होता है। transient घोषित वेरिएबल ऑब्जेक्ट सीरियलाइजेशन के दौरान सीरियलाइज़ नहीं होगा। |
| volatile | वेरिएबल्स (इंस्टेंस/स्टेटिक) | मल्टी-थ्रेडेड प्रोग्रामिंग में उपयोग होता है। यदि आप किसी फील्ड को volatile घोषित करते हैं, तो यह थ्रेड्स को संकेत देता है कि इसका मान उनके अपने स्टैक के बजाय मुख्य मेमोरी (main memory) से पढ़ा जाना चाहिए। क्योंकि volatile फील्ड सभी थ्रेड्स के लिए सामान्य होता है और एकाधिक थ्रेड्स द्वारा बार-बार अपडेट किया जाता है। |
| strictfp | क्लासेस, इंटरफेस, मेथड्स | फ्लोटिंग-पॉइंट गणनाओं के लिए उपयोग होता है। यह कीवर्ड सुनिश्चित करता है कि आपको हर प्लेटफॉर्म पर समान फ्लोटिंग-पॉइंट प्रस्तुति मिले। यह मॉडिफायर फ्लोटिंग-पॉइंट वेरिएबल को कई प्लेटफॉर्म्स पर अधिक सुसंगत बनाता है। |
विस्तृत विवरण
1. static
public class Counter {
static int count = 0; // क्लास लेवल - सभी इंस्टेंसेस साझा करते हैं
public Counter() {
count++;
}
static void printCount() { // static मेथड
System.out.println("Count: " + count);
}
}
2. final
public class FinalDemo {
final int CONSTANT = 10; // फाइनल वेरिएबल
final void cannotOverride() {} // फाइनल मेथड
}
final class ImmutableClass {} // फाइनल क्लास - एक्सटेंड नहीं कर सकते
3. abstract
abstract class Shape {
abstract void draw(); // एब्स्ट्रैक्ट मेथड - बॉडी नहीं
void printInfo() { // कंक्रीट मेथड
System.out.println("I am a shape");
}
}
class Circle extends Shape {
@Override
void draw() { System.out.println("Drawing circle"); }
}
4. synchronized
public class Counter {
private int count = 0;
// synchronized मेथड - एक समय में एक थ्रेड
public synchronized void increment() {
count++;
}
// synchronized ब्लॉक - फाइन-ग्रेन्ड लॉकिंग
public void incrementBlock() {
synchronized(this) {
count++;
}
}
}
5. transient
import java.io.Serializable;
public class User implements Serializable {
private String username;
private transient String password; // सीरियलाइज़ नहीं होगा
private transient Logger logger = Logger.getLogger(); // रनटाइम ऑब्जेक्ट
}
6. volatile
public class SharedFlags {
private volatile boolean running = true; // सभी थ्रेड्स के लिए विजिबल
private volatile int counter = 0; // एटॉमिक रीड/राइट
public void stop() { running = false; }
public void run() { while (running) { counter++; } }
}
7. strictfp
strictfp class Calculator {
strictfp double calculate(double a, double b) {
return a * b; // IEEE 754 स्ट्रिक्ट अनुपालन
}
}
संगतता मैट्रिक्स
| मॉडिफायर | क्लास | इंटरफेस | मेथड | वेरिएबल | कंस्ट्रक्टर |
|---|---|---|---|---|---|
| static | नेस्टेड क्लास* | नहीं (अंतर्निहित) | हां | हां | नहीं |
| final | हां | हां | हां | हां | नहीं |
| abstract | हां | हां | हां | नहीं | नहीं |
| synchronized | नहीं | नहीं | हां | नहीं | नहीं |
| transient | नहीं | नहीं | नहीं | हां | नहीं |
| volatile | नहीं | नहीं | नहीं | हां | नहीं |
| strictfp | हां | हां | हां | नहीं | नहीं |
* केवल नेस्टेड/इनर क्लास के लिए
मॉडिफायर संयोजन (कुछ सामान्य संयोजन)
public static final- कॉन्स्टेंट (कन्वेंशन: UPPER_SNAKE_CASE)private static final- प्राइवेट कॉन्स्टेंटpublic static- यूटिलिटी मेथड/फैक्टरीprotected abstract- सबक्लास के लिए टेम्पलेट मेथडstatic final- कंपाइल-टाइम कॉन्स्टेंटtransient volatile- दुर्लभ लेकिन वैध
निष्कर्ष: Java में 7 नॉन-एक्सेस मॉडिफायर्स हैं: static, final, abstract, synchronized, transient, volatile, strictfp। प्रत्येक का विशिष्ट उपयोग मामला है और इन्हें एक्सेस मॉडिफायर्स (public, private, protected, डिफ़ॉल्ट) के साथ जोड़ा जा सकता है।