سؤال

بدافع الفضول، لماذا يتم أحيانًا إنشاء ملفات Java .class متعددة لفئة ما بعد التجميع؟على سبيل المثال، طلبي يحتوي على ستة فصول.بالنسبة لفئة واحدة، تم إنشاء إجمالي 10 ملفات .class، بدءًا من MyClass#1 حتى MyClass#10.

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

المحلول

وهذه هي ل الطبقات الداخلية و <ل أ href = "http://java.sun.com/docs/books/tutorial/java/javaOO/nested.html" يختلط = "noreferrer"> الطبقات المتداخلة ثابتة . هم مع الأرقام الطبقات الداخلية مجهولة.

وعلى سبيل المثال:


class Foo {
   class Bar { }
   static class Baz { }
   void run() {
      Helper t = new Helper() {
         int helpMethod() {
            return 2;
         }
      };
    }
}

وهذا سوف ينتج ملفات فئة Foo.class، Foo$Bar.class، Foo$Baz.class وFoo$1.class (لتنفيذ واجهة Helper)

نصائح أخرى

يمكنك الحصول على المزيد من ملفات .class من ملف مصدر واحد إذا

  • يحتوي الفصل على فئات داخلية أو فئات داخلية ثابتة.يمكن للطبقات الداخلية أن تتداخل.أسمائهم هي <outer class name>$<inner class name>.

  • الواجهات الداخلية التي تكون ثابتة دائمًا.

  • فئات داخلية مجهولة (وهي في الواقع فئات داخلية عادية بدون اسم)

  • واجهات وفئات الوصول إلى الحزمة قبل وبعد فصلك الرئيسي.يمكن أن يكون لديك عدد عشوائي من فئات وواجهات الوصول إلى الحزمة في ملف مصدر Java واحد.عادةً ما يتم وضع الكائنات المساعدة الصغيرة التي يستخدمها الفصل فقط في نفس الملف.

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

وكل فئة في جافا ينتمي إلى ملف. JAVA، لكن ملف. JAVA يمكن أن تحتوي على فئات متعددة. ويشمل ذلك الطبقات الداخلية ومجهولة. في ملفات. الطبقة المولدة لفئات داخلية تحتوي على '$' باسمهم. الطبقات الداخلية مجهول الحصول على أرقام.

للإضافة إلى الإجابات أعلاه، يعد هذا مثالًا جيدًا آخر للفئات الداخلية التي تم إنشاؤها بناءً على المقارنات (يتم تجميع كل مقارنة في ملف مختلف ماي كلاس$X.class):

public class MyClass {
    ...

    public void doSomething() {
        ...
        Collections.sort(list, new Comparator<MyObj>() {
            public int compare(MyObj o1, MyObj o2) {
                ...
            }
        });
        ...
    }

    ...
}

إذا كان هناك ملف X.java واحد وإذا كان يحتوي على 4 collections.sort () {} ثم بعد تجميع X.class، X $ 1.class، X $ 2.class، X $ 3.class، X $ 4.class سوف الحصول على ولدت.

في حالة الطبقة الداخلية والطبقة الداخلية ثابتة الحصول على إنشاء ملفات أكثر. الطبقة.

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

وتشير: لماذا كود جافا مع الطبقة الداخلية يولد SomeClass الثالث ملف $ 1.class؟

scroll top