संभव डुप्लिकेट:
Is 1/0 a legal Java expression?शून्य निरंतर संकलित समय त्रुटि द्वारा जावा जावा को विभाजित क्यों नहीं किया जाता है?
इस कोड को क्यों संकलित करता है?
class Compiles {
public final static int A = 7/0;
public final static int B = 10*3;
public static void main(String[] args) {}
}
अगर मैं संकलित वर्ग फ़ाइल में एक बार देख ले, मैं देख सकता है कि बी 30 के लिए मूल्यांकन किया गया है, और कहा कि एक अभी भी 7/0 है।
जहां तक मैं जेएसएल को एक अभिव्यक्ति समझता हूं जहां आप शून्य से विभाजित होते हैं, स्थिर नहीं है।
रेफरी:
एक संकलन समय निरंतर अभिव्यक्ति एक अभिव्यक्ति आदिम प्रकार का एक मूल्य दर्शाने
इसलिए से विभाजित है: JLS 15.28
मेरे ऊपर बयान इस लाइन की वजह से है शून्य का मूल्यांकन एक आदिम मूल्य पर नहीं किया जाता है।
जो मैं वास्तव में नहीं समझता कि संकलक इसे वैसे भी क्यों अनुमति देता है? बस स्पष्ट होने के लिए, "java.lang.ExceptionInInitializerError" के साथ क्रैश रनटाइम के ऊपर मेरा कोड
जैसा कि मुझे लगता है कि संकलक किसी स्थिर स्थिर चर को स्थिर के रूप में धमकाता है और इसे संकलित समय का मूल्यांकन करता है। इसका मतलब है कि संकलक ने पहले ही ए का मूल्यांकन करने की कोशिश की है, लेकिन चूंकि यह शून्य से एक प्रभाग था, इसलिए इसे जाने दें। कोई संकलन समय त्रुटि नहीं है। लेकिन यह बहुत ही विचित्र लगता है ... संकलक जानता है कि यह शून्य से विभाजित है और यह रनटाइम को क्रैश करेगा लेकिन फिर भी यह एक संकलन त्रुटि को ध्वजांकित नहीं करता है!
क्या कोई मुझे बता सकता है क्यों?
शून्य उत्पादन संकलन-समय त्रुटियों द्वारा शून्य का विभाजन का कोई उदाहरण है? यदि आप सामान्य प्रक्रियात्मक कोड में शून्य से विभाजित होते हैं तो आपको रनटाइम में 'अंकगणितीय अपवाद' प्राप्त होगा, इसलिए मुझे संकलक के माध्यम से भी इस बारे में आश्चर्य की बात नहीं है। – BoltClock