JLS 17.5.4 संरक्षित क्षेत्र लिखें :
आम तौर पर, अंतिम स्थिर क्षेत्रों को संशोधित नहीं किया जा सकता है। हालाँकि System.in, System.outऔर System.errअंतिम स्थिर क्षेत्र हैं, जो विरासत के कारणों के लिए, विधियों द्वारा बदलने की अनुमति दी जानी चाहिए System.setIn, System.setOutऔर System.setErr। हम इन क्षेत्रों को साधारण अंतिम क्षेत्रों से अलग करने के लिए लिखने-संरक्षित होने के रूप में संदर्भित करते हैं।
संकलक को इन क्षेत्रों को अन्य अंतिम क्षेत्रों से अलग तरीके से व्यवहार करने की आवश्यकता है। उदाहरण के लिए, एक साधारण अंतिम क्षेत्र का एक पाठ सिंक्रनाइज़ेशन के लिए "प्रतिरक्षा" है: एक लॉक या वाष्पशील रीड में शामिल बाधा को अंतिम फ़ील्ड से क्या मूल्य पढ़ा जाता है, इसे प्रभावित करने की आवश्यकता नहीं है। चूँकि लेखन-संरक्षित क्षेत्रों के मूल्य में परिवर्तन देखा जा सकता है, इसलिए सिंक्रनाइज़ेशन घटनाओं का उन पर प्रभाव होना चाहिए। इसलिए, शब्दार्थ यह निर्धारित करता है कि इन क्षेत्रों को सामान्य फ़ील्ड के रूप में माना जाता है जिसे उपयोगकर्ता कोड द्वारा परिवर्तित नहीं किया जा सकता, जब तक कि उपयोगकर्ता कोड Systemकक्षा में न हो।
वैसे, वास्तव में आप उन पर finalकॉल setAccessible(true)करके (या Unsafeविधियों का उपयोग करके ) प्रतिबिंब के माध्यम से फ़ील्ड को म्यूट कर सकते हैं । इस तरह की तकनीकों का उपयोग डीबेराइजेशन के दौरान, हाइबरनेट और अन्य रूपरेखाओं आदि द्वारा किया जाता है, लेकिन उनकी एक सीमा है: कोड जिसमें संशोधन से पहले अंतिम क्षेत्र का मूल्य देखा गया है, संशोधन के बाद नए मूल्य को देखने की गारंटी नहीं है। विचाराधीन क्षेत्रों के बारे में विशेष बात यह है कि वे संकलक द्वारा विशेष तरीके से व्यवहार किए जाने के बाद से इस सीमा से मुक्त हैं।