2010-05-22 16 views
7

यह अजीब लग सकता है ...
लेकिन मैं इसे समझ में नहीं आया।जावा शब्दावली: क्यों संकलन-समय त्रुटि और संकलन-समय अपवाद नहीं है?

क्यों हम compile-time error और नहीं compile-time exception जावा में क्या ज़रूरत है?

मैं कहना है कि हम कभी नहीं कहते हैं कि compile-time exception.
हम compile-time error के रूप में यह कहने के लिए करते हैं मतलब है।

वहाँ उसी के लिए कोई विशेष कारण है ??
किसी भी सुझाव का स्वागत है ....

धन्यवाद!

+0

@ सभी: हम 'अनुमोदित समय अपवाद 'क्यों कहते हैं और' संकलित-समय त्रुटि 'नहीं,' चेक अपवाद 'के रूप में क्यों ?? –

+2

एक अपवाद हमेशा कार्यक्रम के साथ एक समस्या नहीं है। 'अपवाद' शब्द का कंप्यूटर प्रोग्राम के संदर्भ में एक विशिष्ट तकनीकी अर्थ है। मैंने जो स्पष्टीकरण पोस्ट किया है उसे देखें। – RMorrisey

उत्तर

10

इसका कारण यह है कि एक कार्यक्रम के निष्पादन के दौरान एक अपवाद फेंक दिया जाता है। जावा के लिए Exception कक्षा के लिए एक विशिष्ट प्रकार है।

संकलन समय पर, आपका कोड निष्पादित नहीं हो रहा है, इसलिए यह अपवाद नहीं फेंक सकता है। वास्तव में, यह आपके कोड में त्रुटियों को खोजने के लिए संकलक का उचित निष्पादन है - निश्चित रूप से अपवाद मामला नहीं!

0

एक अपवाद एक त्रुटि के लिए विशिष्ट नाम है जिसे आपके सॉफ़्टवेयर के तर्क में संभाला जा सकता है। एक त्रुटि बस यह है कि, एक टाइपो या सिर्फ सादा गलत कोड।

+0

जावा हर रनटाइम * त्रुटियां * साथ ही। – aioobe

+0

रनटाइम त्रुटियां हैं जिन्हें हम अनचाहे अपवाद कहते हैं – blissapp

+0

शायद आप उन्हें इस तरह कहते हैं, सूर्य पर लोग नहीं करते हैं। (java.lang.Error के लिए c.f. javadoc)। – meriton

1

संकलन समय त्रुटियों को सॉफ़्टवेयर की अक्षमता के परिणामस्वरूप निर्देशित किया जाता है। उदाहरण के लिए:

String myString = new ButtonEvent(); 

एक संकलित समय त्रुटि है। जबकि अपवाद कुछ ऐसा है जो सॉफ़्टवेयर प्रोसेसिंग के दौरान पकड़ा जाता है।

try{ 
    while(file.readNextLine() != file.EOF){ 
    } 
} 
catch(UnopenedException ex){ 
} 

यहां, हमने धारणा की है कि फ़ाइल को ठीक से खोला जा सकता है और किया गया था। अपवाद उन "असाधारण" मामलों के लिए है जहां फ़ाइल खोलना नहीं हुआ था। जावा में

4

अपवाद त्रुटि संकलन से वास्तव में अलग है। हमारे पास समय अपवाद संकलित शब्द नहीं है। क्योंकि अपवाद कुछ होता है कि आप ऐसा होने की उम्मीद नहीं करते हैं। हमने केवल अपवाद की जांच की है और अनचेक किया है। चेक अपवाद के साथ, संकलन समय में, संकलक आपको इसे पकड़ने के लिए मजबूर करेगा, लेकिन यह त्रुटि नहीं है। इसे पकड़ न लें, आप प्रोग्राम को संकलित नहीं कर सकते हैं लेकिन यह एक संकलित त्रुटि नहीं है।

2

अपवाद एक अप्रत्याशित प्रवाह कि संभाला जा सकता है की कुछ और है। संकलन समय त्रुटि अधिक अवैध code..so कोड भी संकलन नहीं है .. इसलिए शब्द "त्रुटि" के बाद से यह ज्यादा गंभीर समस्या है जो तय हो गया है दर्शाता है की तरह है।

3

एक त्रुटि इंगित करता है कि कार्यक्रम में कोई समस्या है। एक अपवाद एक विशिष्ट निर्माण है जो प्रोग्राम के नियंत्रण प्रवाह में बाधा डालता है, और ढेर को खोलता है, ढेर की स्थिति के बारे में जानकारी कैप्चर करता है ताकि इसकी सूचना दी जा सके।

एक अपवाद एक त्रुटि इंगित करने के लिए इस्तेमाल किया जा सकता, लेकिन हमेशा नहीं।उदाहरण के लिए:

void startOperation() { 
try { 
    while (someComplexOperationIsOnGoing()) { 
    checkRestart(); 
    } 
} 
catch (RestartException re) { 
    startOperation(); 
} 
} 

void checkRestart() { 
if (shouldRestart()) { 
    throw new RestartException(); 
} 
} 

यह अपूर्ण कोड नमूना एक ऐसा मामला दिखाने के लिए है जहां कोई अपवाद त्रुटि नहीं है। यह हमेशा सर्वोत्तम अभ्यास नहीं है; लेकिन इसका उपयोग कुछ मामलों में किया जाता है जहां इरादा प्रोग्राम में गहराई से नियंत्रण प्रवाह को बाधित करना है (जैसे वेब फ्रेमवर्क में पृष्ठ को रीडायरेक्ट करना, HTTP अनुरोध का जवाब देते समय) और स्टैक के उच्च-स्तर स्तर पर नियंत्रण वापस करना । शब्द अपवाद उस तंत्र को संदर्भित करता है जो प्रोग्राम को बाधित करता है।

जावा में, अपवाद कक्षा है जो इस व्यवहार को समाहित करती है। त्रुटि कक्षा भी एक अपवाद के रूप में नियंत्रण प्रवाह में बाधा डालती है; लेकिन यह केवल गंभीर, अप्राप्य समस्याओं के लिए आरक्षित है जो रनटाइम पर होते हैं। इसका उपयोग किया जाता है, उदाहरण के लिए, जब JVM स्मृति से बाहर हो जाता है और नई ऑब्जेक्ट्स नहीं बना सकता है।

+1

अनुपूरक: और चूंकि एक संकलन समय त्रुटि अप्राप्य है, इसलिए यह अपवाद से त्रुटि को कॉल करने के लिए अधिक समझ में आता है। – meriton

संबंधित मुद्दे