في جاوة، يمكن Class.forName من أي وقت مضى العودة باطل؟

StackOverflow https://stackoverflow.com/questions/430089

  •  08-07-2019
  •  | 
  •  

سؤال

في جاوة، يمكن Class.forName من أي وقت مضى العودة لاغيا، أم أنها دائما رمي ClassNotFoundException أو NoClassDefFoundError إذا كانت الطبقة لا يمكن أن يكون موجودا؟

هل كانت مفيدة؟

المحلول

وجافا مستندات تقول انها لن رمي ClassNotFoundException إذا لم يمكن العثور على الطبقة ذلك أود أن أقول أنه لم يعود لاغية.

نصائح أخرى

وبما أنه لا يذكر لاغية في أي مكان في وثائق هذا الأسلوب، ولأن هناك لا يبدو أن هناك أي الوضع الذي من شأنه أن يجعل الشعور لطريقة للعودة لاغية بدلا من رمي استثناء، وأعتقد انها آمنة جدا ل نفترض أنه لا يعود لاغية.

وانها لن رمي NoClassDefFoundError، ولكن قد رمي ClassNotFoundException.

<ع> استخدام محمل فئة الافتراضية، وبالتأكيد سوف تتلقى أي بالقيم الخالية. ولكن، كما يقول jdigital، قد تكون عرضة إلى أي عدد من classloaders المخصصة اعتمادا على ما نموذج أمني أو أي نوع آخر من محمل الوكيل الذي قد تستخدم (عن قصد أو غير ذلك).

وهيك، حتى 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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top