استفاده از متغیر فاینالی (final) که در خط مقداردهی نشده است، اما با خطای کامپایل مواجه نمی‌شویم در جاوا

0 رأی
میانگین بازدید روزانه 0.19271 بازدید

سلام. لطفا به کد زیر توجه کنید:

public class Main {
  private static final SessionFactory ourSessionFactory;

  static {
    try {
      Configuration configuration = new Configuration();
      configuration.configure();

      ourSessionFactory = configuration.buildSessionFactory();
    } catch (Throwable ex) {
      throw new ExceptionInInitializerError(ex);
    }
  }

همانطور که مشاهده می‌کنید، بنده احتمال می‌دهم که از Chained Exception استفاده شده است؟ سوال من این است که چرا برنامه با خطای کامپایل مواجه نمیشه؟ باتوجه به اینکه آبجکت SessionFactory به صورت final تعریف شده، اما در خط مقدار دهی نشده.

سوال 4 سال قبل در تالار برنامه نویسی توسط deuxshiri (12 امتیاز)

1 جواب

+1 رأی
چون همون مقدار رو دارین تو بلاک استاتیک مقدار دهی می کنین. بلاک استاتیک قبل از هر چیزی حتی Constructor کلاس اجرا می شه. به همین دلیل کامپایلر از Initialize کردن متغیر مطمئن میشه.
جواب 3 سال قبل توسط salar_ai (255 امتیاز)
ابتدا ممنون از پاسختون دوست عزیز.
اما سوال من اینه که (همانطور که در بالا توضیح دادم، از Chained Exception استفاده کرده) و اگر اکسپشنی که در بلاک کچ پرتاب شده را حذف کنیم (متلا stack trace را بنویسیم) با خطای کامپایل مواجه میشه.
خب در سناریویی که Exception پرت شه اصلا initialize نمیشه. چون بلاک استاتیک فقط یکبار در زمان load کلاس اجرا میشه. این که چرا کامپایل اررو نمیگیرین بدلیلی اینه که اگه تو initialize مشکلی پیش بیاد و exception پرت شه، پس آبجکت نال هست و تو همون state اول میمونه و استفاده ازش منطقی نیست. پس یجوری اینو باید به کاربر استفاده کننده از API بگه که از طریق throw اینکار رو انجام میده در حالت قبلی که اگه دوباره re-throw نگنین، چون همینجا خطا رو هندل کردین ارور می گیرین.

سوال های مشابه

0 رأی
1 جواب میانگین بازدید روزانه 0.18392 بازدید
+2 رأی
2 جواب میانگین بازدید روزانه 0.581,960 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.25690 بازدید
0 رأی
2 جواب میانگین بازدید روزانه 0.18609 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.461,592 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.14206 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.14174 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.49996 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.15395 بازدید
کانال تلگرام جواب یاب
...