ما هي الفوائد التي يقوم بها (...) توفر أكثر من تهيئة ثابتة كأداة دخول زائفة؟

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

سؤال

نقطة الدخول في برنامج في Java هو عادة شيء مثل هذا


    // MyMain.java
    public class MyMain{  
      //whatever 
        public static void main(String args[]){ 
        System.out.println("balderdash");
        }
    }

ومع ذلك، نظرا لأن هناك فقط SOP واحد في Main، فقد يكون الفصل أعلاه مثل هذا بدلا من ذلك


    // MyMain.java
    public class MyMain{
        //whatever
        static {    
        System.out.println("balderdash");
        }
    }

ميزة واحدة واضحة لاستخدام الرئيسية (...) هي أن الحجج قد يتم تمريرها إلى البرنامج. آخر (أنا أظن هنا) قد تضطر إلى القيام به مع كائنات علاج مجمع القمامة التي تم إنشاؤها داخل كتلة ثابتة بشكل مختلف.

ما هي الفوائد الأخرى التي تأتي من استخدام نقطة الدخول المحددة من اللغات - الفراغ الثابت العام (String Mergs []) بدلا من استخدام المهاجية الثابتة.

PS المقتطفات المذكورة أعلاه هي للتوضيح فقط، وقد لا يكون compaLable

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

المحلول

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

تحرير: إليك مثال على هذه المشكلة:

class SampleTask implements Runnable
{
    public void run()
    {
        System.out.println("Calling someStaticMethod");
        Test.someStaticMethod();
        System.out.println("someStaticMethod returned");
    }
}

public class Test
{
    static
    {
        System.out.println("Starting new thread...");
        new Thread(new SampleTask()).start();
        System.out.println("Thread started. Sleeping");
        try
        {
            Thread.sleep(5000);
        }
        catch (InterruptedException e)
        {
            System.out.println("Interrupted!");
        }
        System.out.println("Finished sleeping");          
    }

    public static void someStaticMethod()
    {
        System.out.println("In someStaticMethod");
    }

    public static void main(String[] args)
    {
        System.out.println("In main. Sleeping again.");
        try
        {
            Thread.sleep(5000);
        }
        catch (InterruptedException e)
        {
            System.out.println("Interrupted!");
        }
    }
}

انتاج:

Starting new thread...
Thread started. Sleeping
Calling someStaticMethod
Finished sleeping
In someStaticMethod
someStaticMethod returned
In main. Sleeping again.

لاحظ كيف الدعوة إلى someStaticMethod من مؤشر الترابط الجديد يجب أن تنتظر حتى تنتهي المهيمة الثابت قبل تشغيله.

نصائح أخرى

تستطيع الاتصال main() لكائنات أخرى من أي مكان آخر في التعليمات البرمجية الخاصة بك عدة مرات كما تريد. التهيئة الثابتة سوف يعمل فقط مرة واحدة. أيضا، يمكنك تمرير المعلمات من سطر الأوامر إلى main().

اثنين من البلوز الكبير ل main() في كتابي.

السبب الرئيسي وراء ذلك أفضل استخدام main() هل يمكن أن يكون لديك العديد من الطرق الرئيسية في طلبك (في فئات مختلفة). إذا قمت بتحميل فئة، main() لم يتم تنفيذها تلقائيا static يتم تنفيذ كتل التعليمات البرمجية دائما مرة واحدة في المرة الأولى في المرة الأولى التي يتم تحميل فئة ولا توجد طريقة لمنع ذلك.

حسنا، سأعترف بأنني لم أحاول ذلك بصفته المهيئة الثابتة، لكنه لن يكتب

java StaticInitializedClass

في سطر الأوامر طباعة

Exception in thread "main" java.lang.NoSuchMethodError: main

لأنه ليس لديه main(String[]) طريقة؟

دعونا لا ننسى القدرة على الصيانة. عندما يذهب شخص آخر لتغيير التعليمات البرمجية، فإنها ستبحث دائما عن طريقة رئيسية () لبدء البرنامج. ما لم يكن هناك سبب لا يمكنك التجول فيه (وأنا أظن أنه لا يوجد)، فستستخدم الطريقة الرئيسية فقط.

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

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