मुझे भाषा परिभाषा में कुछ भी नहीं मिला है जो कोटलिन में कक्षा के प्रारंभिकरण को समझाता है।कोटलिन क्लास प्रारंभिक अर्थशास्त्र क्या हैं?
import java.util.Properties
fun main(args: Array<String>) {
val out = MyClass()
out.fn()
}
class MyClass {
private val a = Properties() // 1
init {
fn()
}
public fun fn() {
println("Fn called. a = $a")
}
// private val a = Properties() // 2
}
इस कार्यक्रम को चलाने का परिणाम इस बात पर निर्भर करता है कि संपत्ति (1) या (2) पर शुरू हुई है या नहीं।
मुझे आश्चर्य है कि घोषणा आदेश भाषा में प्रासंगिक है और इसके पीछे के फैसलों को समझना चाहता हूं। मेरी उम्मीद यह होगी कि कन्स्ट्रक्टर बॉडी के आने से पहले संपत्तियों को शुरू किया जाएगा।
यह पूरी तरह से सही नहीं है। 'init' ब्लॉक में कोड होता है जो प्राथमिक कन्स्ट्रक्टर में शामिल होता है। आपके उदाहरण में, उन्हें निष्पादित किया जाता है क्योंकि माध्यमिक कन्स्ट्रक्टर ': (0) 'वाक्यविन्यास का उपयोग करके प्राथमिक कन्स्ट्रक्टर को प्रतिनिधि करता है। यदि कोई माध्यमिक कन्स्ट्रक्टर प्राथमिक कन्स्ट्रक्टर को प्रतिनिधि नहीं देता है, तो उस कन्स्ट्रक्टर का उपयोग करके कक्षा प्रारंभ होने पर 'init' ब्लॉक निष्पादित नहीं किए जाएंगे। – yole
हाय आगा/योल - आपके उत्तरों के लिए धन्यवाद। मुझे शायद यह कहना चाहिए था कि मैं एक कोटलिन एन 00 बी हूं, लेकिन यह शायद मेरे प्रश्न से स्पष्ट है। मुझे लगता है कि आपकी प्रतिक्रियाएं भाषा के साथ परिचितता से आती हैं। जब मैंने कोटलिन https://kotlinlang.org/docs/kotlin-docs.pdf की इस परिभाषा को पढ़ा तो मुझे केवल एक ही संदर्भ में शामिल किया गया है: "प्राथमिक निर्माता में कोई कोड नहीं हो सकता है। आरंभिक कोड प्रारंभकर्ता ब्लॉक में रखा जा सकता है , जो कि init कीवर्ड " प्रारंभिकरण के क्रम के बारे में कुछ भी नहीं कहा गया है। (जो मैं देख सकता हूं) स्पष्टीकरण के लिए –
@Yole धन्यवाद।:) – aga