في جاوة، يمكن Class.forName من أي وقت مضى العودة باطل؟
-
08-07-2019 - |
سؤال
في جاوة، يمكن Class.forName من أي وقت مضى العودة لاغيا، أم أنها دائما رمي ClassNotFoundException أو NoClassDefFoundError إذا كانت الطبقة لا يمكن أن يكون موجودا؟
المحلول
وجافا مستندات تقول انها لن رمي ClassNotFoundException إذا لم يمكن العثور على الطبقة ذلك أود أن أقول أنه لم يعود لاغية.
نصائح أخرى
وبما أنه لا يذكر لاغية في أي مكان في وثائق هذا الأسلوب، ولأن هناك لا يبدو أن هناك أي الوضع الذي من شأنه أن يجعل الشعور لطريقة للعودة لاغية بدلا من رمي استثناء، وأعتقد انها آمنة جدا ل نفترض أنه لا يعود لاغية.
وانها لن رمي NoClassDefFoundError، ولكن قد رمي ClassNotFoundException.
وهيك، حتى forName يمكن أن تأخذ ClassLoader كمعلمة ...:)
وPiko
وDan داير من الخطأ، Class.forName <م> يمكن م> رمي NoClassDefFoundError
، إذا كانت الطبقة انها تحاول يحصل على خطأ ClassNotFoundException في initialiazer لها ساكنة. ما يلي هو unte
class Outer {
public static final void main(final String[] args) throws Exception{
Class.forName("Inner");
}
}
إذا تجميع وتشغيل هذا في دليل مع أي ملف آخر تحصل ClassNotFoundException: Inner
والآن إضافة ما يلي إلى في نفس الدليل، تجميع كل شيء وjava Outer
مرة واحدة لرؤية تشغيله يرام.
class Inner {
static Inner2 _i2 = new Inner2();
}
class Inner2 {}
وأخيرا، حذف Inner2.class وأعد تشغيل الخارجي، وكنت <م> سوف م> الحصول على NoClassDefFoundError: Inner2
، caused by ClassNotFoundException: Inner2