.class файл в Java - PullRequest
       1

.class файл в Java

0 голосов
/ 28 марта 2011

Может ли кто-нибудь помочь мне в этой проблеме (помните, что эта проблема находится в контексте Java Reflection)

Существует класс Java с именем "A" , имеющий внутренний класс с именем "B" . Когда я компилирую этот файл Java, создает 2 версии. файл класса с именем "A.class" & "A $ B.class" и If "A" класс имеет 2 внутренние классы т.е. B, C , тогда будет создано 3 версии "A.class" & "A $ B.class " & "A $ C.class"
Почему это случилось?

И если я захочу прочитать файл .class, то какой файл .class я прочитал b / c, когда дал A.class, тогда он запросит A $ B.class и даст Вызывается: java.lang.ClassNotFoundException: A $ B.class

И если мы дали A $ B.class, тогда он даст исключение

java.lang.NoClassDefFoundError: 
java.lang.ClassNotFoundException


class A {
 String _name="Tom";
    class B{
        int _phoneNo=8384040;  
    }
}

Ответы [ 2 ]

3 голосов
/ 28 марта 2011

Существует класс Java с именем "A", имеющий внутренний класс с именем "B"

Итак, у вас есть два класса, и у вас должно быть два файла классов.

Если у класса "А" есть 2 внутренних класса, т. Е. B, C

У вас есть три класса и три файла классов.

И если я захочу прочитать файл .class, то какой файл .class я прочитал b / c, когда дал A.class, тогда он запросит A $ B.class

Когда вы читаете файл A.class, вы просто читаете файл. Больше ничего не просит.

и дать Причины: java.lang.ClassNotFoundException: A $ B.class

Это произойдет только в том случае, если этот класс не находится в вашем пути к классам, что является совершенно другой и не связанной вещью.


Вот как вы загружаете классы, но создаете экземпляры этих классов. Нет необходимости читать базовые классы или даже знать, как они расположены на диске.

 A a = new A(); // creates an instance of A
 A.B b = a.new A.B(); // creates an instance of A.B which is "inside" 'A a'.
0 голосов
/ 28 марта 2011

Ответ на вопрос «почему он это делает» заключается в том, что каждый класс получает свой собственный файл класса: даже анонимные классы сохраняются в виде отдельных файлов классов с именами «A $ 1», «A @ 2» и т. Д.

Класс с именем «A.B» в Java всегда будет храниться в файле с именем A $ B.class. Если вам нужно найти файл класса по какой-то причине, вот куда вам следует обратиться. Но в отраженных вызовах вы по-прежнему называете класс «A.B», а не «A $ B».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...