"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > لماذا تثير Java خطأً للمتغيرات المحلية غير المهيأة ولكن ليس لمتغيرات المثيلات غير المهيأة؟

لماذا تثير Java خطأً للمتغيرات المحلية غير المهيأة ولكن ليس لمتغيرات المثيلات غير المهيأة؟

تم النشر بتاريخ 2024-11-22
تصفح:451

Why Does Java Raise an Error for Uninitialized Local Variables but Not for Uninitialized Instance Variables?

المتغيرات والأعضاء غير المهيأين في Java

خذ بعين الاعتبار المقتطف التالي:

public class TestClass {

    private String a;
    private String b;

    public TestClass() {
        a = "initialized";
    }

    public void doSomething() {
        String c;

        a.notify(); // This is fine
        b.notify(); // This is fine - but will end in an exception
        c.notify(); // "Local variable c may not have been initialized"
    }
}

على الرغم من عدم تهيئة كل من "b" و"c"، إلا أن المترجم يظهر خطأ في وقت الترجمة لـ "c" ولكن ليس لـ "b". ينبع هذا الاختلاف من قواعد اللغة لتهيئة متغيرات الحالة والمتغيرات المحلية.

متغيرات الحالة من نوع الكائن (مثل "a" و "b") تتم تهيئتها افتراضيًا إلى قيمة خالية عندما لا تتم تهيئتها بشكل صريح. ولهذا السبب فإن الوصول إلى "b.notify()" لا يؤدي إلى خطأ فوري، لأنه يعادل فعليًا "null.notify()". ومع ذلك، سيؤدي هذا الوصول في النهاية إلى تشغيل NullPointerException عند تنفيذ التعليمات البرمجية.

في المقابل، لا تتم تهيئة المتغيرات المحلية لنوع الكائن بشكل افتراضي. تؤدي محاولة الوصول إلى متغير محلي غير مهيأ، مثل "c"، إلى حدوث خطأ في وقت الترجمة مباشرةً. يضمن هذا المطلب الصارم أن يتم دائمًا تهيئة المتغيرات المحلية بشكل صحيح قبل استخدامها.

بيان الافراج تم استنساخ هذه المقالة في: 1729738619 إذا كانت هناك انتهاكات ، فيرجى الاتصال بـ [email protected] لحذف
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3