जेएलएस में एक खंड पाया जा सकता है: in12.4.2 ।
विस्तृत प्रारंभिक प्रक्रिया:
9. अगला, या तो वर्ग चर initializers और वर्ग के स्थिर initializers, या इंटरफ़ेस के क्षेत्र initializers, पाठ क्रम में, हालांकि वे एक ही ब्लॉक थे, कि अंतिम वर्ग चर और इंटरफेस के क्षेत्र जिसका मान संकलित है को छोड़कर निष्पादित समय से पहले स्थिरांक शुरू होते हैं
अतः तीन स्थैतिक चर को एक-एक करके क्रमबद्ध रूप से आरंभ किया जाएगा।
इसलिए
static A obj = new A();
//num1 = 1, num2 = 1;
static int num1;
//this is initilized first, see below.
static int num2=0;
//num1 = 1, num2 = 0;
यदि मैं आदेश को इसमें परिवर्तित करता हूं:
static int num1;
static int num2=0;
static A obj = new A();
परिणाम होगा 1,1
।
ध्यान दें कि static int num1;
चर वेरिएबल नहीं है क्योंकि ( .28.3.2 ):
यदि किसी क्षेत्र घोषणाकर्ता में एक वैरिएबल इनिशियलाइज़र होता है, तो उसके पास घोषित चर के लिए असाइनमेंट (.215.26) का शब्दार्थ होता है, और: यदि डिक्लेयर एक वर्ग चर (यानी, एक स्थिर क्षेत्र) के लिए है, तो वैरिएबल इनिशियलाइज़र है मूल्यांकन और असाइनमेंट बिल्कुल एक बार प्रदर्शन किया, जब कक्षा आरंभीकृत की जाती है
और यह क्लास वेरिएबल इनिशियलाइज्ड होता है जब क्लास बनाई जाती है। यह पहले ( .124.12.5 ) होता है ।
किसी प्रोग्राम के हर वेरिएबल का वैल्यू यूज़ होने से पहले एक वैल्यू होनी चाहिए: प्रत्येक क्लास वेरिएबल, इंस्टेंस वेरिएबल, या एरे कंपोनेंट को डिफॉल्ट वैल्यू के साथ इनिशियलाइज़ किया जाता है जब इसे बनाया जाता है (§15.9, .1015.10): टाइप बाइट के लिए, डिफॉल्ट वैल्यू शून्य है, अर्थात, (बाइट) का मान 0 है। छोटे प्रकार के लिए, डिफ़ॉल्ट मान शून्य है, अर्थात (छोटा) 0 का मान। टाइप इंट के लिए, डिफ़ॉल्ट मान शून्य है, अर्थात, प्रकार लंबे समय के लिए, डिफ़ॉल्ट मान शून्य है, अर्थात 0 एल। प्रकार फ़्लोट के लिए, डिफ़ॉल्ट मान सकारात्मक शून्य है, अर्थात 0.0f है। टाइप डबल के लिए, डिफ़ॉल्ट मान धनात्मक शून्य है, अर्थात 0.0 डी। प्रकार चार के लिए, डिफ़ॉल्ट मान अशक्त वर्ण है, अर्थात '\ u0000'। प्रकार बूलियन के लिए, डिफ़ॉल्ट मान गलत है। सभी संदर्भ प्रकारों (.34.3) के लिए, डिफ़ॉल्ट मान शून्य है।