Мне нравится знать, как найти имя класса из файла .class. Надеюсь, вы объясните это как можно яснее, потому что я знаю только основы Java.find class Name
ответ
Обычно имя класса предшествует классу .class, поэтому ClassName.class - это соглашение.
Имя класса обычно, но не всегда, имя файла. Попробуйте использовать следующую команду:
javap -public -classpath . FileName
Где «имя файла» не включает в себя «.class» суффикс.
javap - это дизассемблер файла Java, а переключатель -public покажет вам общедоступные классы и члены. В Java путь к классам - это каталог или каталоги, на которые будет работать среда выполнения Java для файлов классов. Замените "." для каталога интересующего вас файла, если он не находится в вашем текущем каталоге.
Файл класса java - это структура данных, которая следует за specified format.
ClassFile { u4 magic; u2 minor_version; u2 major_version; u2 constant_pool_count; cp_info constant_pool[constant_pool_count-1]; u2 access_flags; u2 this_class; u2 super_class; u2 interfaces_count; u2 interfaces[interfaces_count]; u2 fields_count; field_info fields[fields_count]; u2 methods_count; method_info methods[methods_count]; u2 attributes_count; attribute_info attributes[attributes_count]; }
Постоянные записи пула данных следуют следующие общие specified format где тег определяет длину информации.
cp_info {
u1 tag;
u1 info[];
}
за исключением того, если тег = CONSTANT_Utf8 то следующий specified format следует.
CONSTANT_Utf8_info {
u1 tag;
u2 length;
u1 bytes[length];
}
- Чтение constant_pool_count - Он находится в фиксированном положении в структуре. constant_pool_count = размер пула констант + 1. Поскольку постоянный пул не является структурой фиксированного размера, необходимо знать константу_путь_компонент, чтобы прочитать остальную часть структуры.
- Прочитайте постоянный пул. Начало постоянного пула находится в фиксированном положении. Прочтите тег i-й записи. Если tag == CONSTANT_Utf8_info, вам нужно прочитать длину, иначе вы можете определить длину записи только тегом. Независимо от того, вы знаете начальное местоположение i + 1-й записи. Повторите эту процедуру до тех пор, пока вы не закончите постоянный пул. Запишите начальное местоположение всех записей с постоянным пулом.
- Теперь вы знаете местоположение этого_класса. Он фиксируется относительно конца пула констант. Это индекс в постоянный пул.
- Поскольку вы записали начальное местоположение всех постоянных записей в пул, вы можете посмотреть его. Вы должны обнаружить, что тег == Constant_ClassInfo и его информация также являются индексом в пуле констант.
- Посмотрите. Вы должны найти тег == Constant_Utf8_info. Информация, связанная с этой записью, - это полное имя класса, закодированное в internal form. «java/lang/Thread» вместо «java.lang.Thread».
. Вероятно, это связано с именем файла.
+1 Для этого подробного и правильного ответа вы заслуживаете гораздо больше, чем один или два оборота. Хорошая работа! – PeterK
- 1. Sublime Text - Find Class Name
- 2. jquery find next element with class name
- 3. Разница между `find. -name` и `find -name` в оболочке?
- 4. элемент [class = "name"] вместо .class
- 5. Javascript find class
- 6. Register Polymer Class Name
- 7. codeigniter class name convention
- 8. poco class custom name
- 9. неизвестный тип name 'class'
- 10. Ruby Class Name
- 11. Ruby - :: in class name
- 12. Randoop Test Class Name
- 13. Couldnt find class memcached
- 14. Код cant find class
- 15. Swift Find Scene By Name
- 16. BASH find -name (переменная чтения)
- 17. log4net logging find method name
- 18. C++ String to class name
- 19. javac cant find referenced class
- 20. jquery find previous td with class
- 21. Ruby Mechanize Find Form w/No Name
- 22. О пользователе getElementById find mutiple id name?
- 23. clearcase: find -name не разрешает несколько шаблонов?
- 24. раздувание переменной: = `find. -name 'Top' -type d`
- 25. find -amin не работает, если -name исключено
- 26. `find -name` pattern, который соответствует нескольким шаблонам
- 27. Что делает двойное цитирование в find -name?
- 28. jquery find next class outside parent div
- 29. swift mirror return class name in class function
- 30. parse output like id: name/class: id to id: class: name with bash awk
Это не поможет, если разработчик имеет более одного класса в файле. – duffymo
У меня создалось впечатление, что компилятор создаст несколько файлов .class из одного .java-файла, если это так. – plor