जब मैं एक उदाहरण के प्रारंभ (नहीं वर्ग आरंभीकरण) ब्लॉक में एक अपवाद फेंक करने की कोशिश मैं त्रुटि मिलती है:जावा इंस्टेंस प्रारंभिक ब्लॉक में अपवाद फेंकने की अनुमति क्यों नहीं है?
initializer must be able to complete normally
क्यों यह अनुमति नहीं है, हालांकि जावा वह खुद करता है?
निम्नलिखित उदाहरण चार कक्षाएं बनाता है। कक्षा A
एक अंकगणितीय अपवाद के कारण तत्काल के दौरान विफल रहता है। यह catch
के साथ किया जा सकता है और संभाला जा सकता है। B
के लिए एक ही जो NullPointerException के साथ विफल रहता है। लेकिन जब मैं C
में अपने आप पर एक NullPointerException फेंकने का प्रयास करता हूं तो प्रोग्राम संकलित नहीं होता है। और जब मैं D
में अपनी खुद की रनटाइम अपवाद को परिभाषित करने का प्रयास करता हूं तो मुझे वही त्रुटि मिलती है। तो:
मैं जावा के समान ही कैसे कर सकता हूं?
// -*- compile-command: "javac expr.java && java expr"; -*-
class expr
{
class A
{
int y;
{{ y = 0/0; }}
}
class B
{
Integer x = null;
int y;
{{ y = x.intValue(); }}
}
class C
{
{{ throw new NullPointerException(); }}
}
class Rex extends RuntimeException {}
class D
{
{{ throw new Rex(); }}
}
void run()
{
try { A a = new A(); }
catch (Exception e) { System.out.println (e); }
try { B b = new B(); }
catch (Exception e) { System.out.println (e); }
try { C c = new C(); }
catch (Exception e) { System.out.println (e); }
try { D d = new D(); }
catch (Exception e) { System.out.println (e); }
}
public static void main (String argv[])
{
expr e = new expr();
e.run();
}
}
@AlexWien आप कक्षा और वस्तु के बीच अंतर जानते हैं? ;-) – ceving
हां, लेकिन उस उदाहरण के प्रारंभकर्ता मौजूद नहीं हैं, मैं केवल स्थिर प्रारंभिक जानता था। – AlexWien