एक और पहलू:
जावा काफी सख्त विशेषताओं के साथ एक स्थिर भाषा है। इसका मतलब यह है कि कई चीजें जो अन्य भाषाओं (सी / एफ रूबी, लिस्प आदि) में काफी खुली या गतिशील होंगी, सख्ती से निर्धारित की जाती हैं।
यह एक सामान्य डिजाइन निर्णय है। "क्यों" का जवाब देना मुश्किल है (अच्छी तरह से, क्योंकि भाषा के डिजाइनरों ने सोचा कि यह अच्छा होगा!)। "क्या" के लिए बहुत स्पष्ट है: यह संकलक को बहुत सारी त्रुटियों का पता लगाने देता है , जो आमतौर पर किसी भी भाषा के लिए एक बहुत अच्छी सुविधा है। दूसरे, यह भाषा के बारे में तर्क करने के लिए तुलनात्मक रूप से आसान बनाता है। उदाहरण के लिए, जावा भाषा की औपचारिक शुद्धता (उपसमुच्चय) में सिद्ध करना अपेक्षाकृत आसान है; तुलना के रूप में, रूबी एट अल जैसी गतिशील भाषा में यह लगभग असंभव होगा।
यह सोच, भाषा को अनुमति देती है, उदाहरण के लिए, संभावित अपवादों की लागू घोषणा जो एक विधि को फेंक सकती है, अस्पष्ट एकाधिक वंशानुक्रम से बचने के लिए interface
बनाम class
का अलग प्रकार , और इसी तरह। यह क्या है (संकलन समय त्रुटि से निपटने पर मजबूत ध्यान देने के साथ एक स्थिर अनिवार्य OOP वास्तविक दुनिया की भाषा) उन चीजों को वास्तव में काफी सुंदर और शक्तिशाली हैं। वे सैद्धांतिक (विज्ञान) भाषाओं के करीब आते हैं, जो उद्देश्यपूर्ण रूप से सिर्फ किसी भी अन्य वास्तविक दुनिया की भाषा (उस समय, आपके दिमाग में) की तुलना में इनमें से कुछ मुद्दों का पता लगाने के लिए बनाई गई हैं।
इसलिए। एक सख्त void
प्रकार होना एक स्पष्ट संदेश है: यह विधि कुछ भी नहीं लौटाती है, अवधि। यह है जो यह है। हमेशा कुछ वापस करने के लिए प्रवर्तन द्वारा इसे प्रतिस्थापित करने से या तो बहुत अधिक गतिशील व्यवहार हो सकता है (जैसे कि रूबी में जहां हर डीप में एक स्पष्ट या निहित वापसी मूल्य होता है, हमेशा), जो कि अस्थिरता और तर्क के लिए बुरा होगा; या यहाँ कुछ अन्य तंत्र का उपयोग करके बड़े पैमाने पर ब्लोट के लिए।
(और एनबी, रूबी (उदाहरण के लिए) इसे अलग तरीके से संभालती है, और इसका समाधान अभी भी जावा के रूप में बिल्कुल स्वीकार्य है , क्योंकि इसमें एक पूरी तरह से अलग दर्शन है। उदाहरण के लिए यह एक बड़ा ध्यान केंद्रित करते हुए खिड़की से पूरी तरह से बाहर निकलना और तर्कशीलता फेंकता है। भाषा की अत्यधिक उच्च अभिव्यक्ति।)