Существуют незначительные различия, если Вы, оказывается, объявляете больше чем одну переменную в том же объявлении:
int[] a, b; // Both a and b are arrays of type int
int c[], d; // WARNING: c is an array, but d is just a regular int
Примечание, что это - плохой стиль кодирования, хотя компилятор почти наверняка зафиксирует Вашу ошибку момент, Вы пытаетесь использовать d
.
Возможно. Для этого вам понадобится декомпилятор Java.
Вы обнаружите, что в основном он справится с задачей на удивление хорошо. Вы получите действительный файл .java
, который будет компилироваться в файл .class
, но этот файл .java
не обязательно будет таким же, как оригинальный исходный код. Такие вещи, как циклические конструкции, могут выглядеть по-другому, и все, что только время компиляции, например универсальные шаблоны и аннотации, не будет воссоздано.
У вас может возникнуть проблема, если код был обфусцирован . Это процесс, который изменяет файлы классов, чтобы их было трудно декомпилировать. Например, имена классов и переменных изменены, чтобы все они были похожими, поэтому вы получите код вроде aa.a (ab)
вместо employee.setName (name)
, и это очень сложно понять, что происходит.
Я помню, как использовал JAD для этого, но не думаю, что это активно поддерживается, поэтому он может не работать с никогда не работающими версиями Java. Поиск в Google декомпилятора Java предоставит вам множество вариантов.
Я получу код вроде aa.a (ab)
вместо employee.setName (name)
, и очень сложно понять, что происходит.
Я помню, как использовал JAD , но я не думаю, что это активно поддерживается, поэтому он может не работать с никогда-версиями Java. Поиск в Google декомпилятора Java предоставит вам множество вариантов.
Я получу код вроде aa.a (ab)
вместо employee.setName (name)
, и очень сложно понять, что происходит.
Я помню, как использовал JAD , но я не думаю, что это активно поддерживается, поэтому он может не работать с никогда-версиями Java. Поиск в Google декомпилятора Java предоставит вам множество вариантов.
Это возможно с помощью одного из доступных декомпиляторов Java . Поскольку вы работаете с байтовым кодом, который, возможно, был оптимизирован компилятором (встраивание статических переменных, реструктуризация потока управления и т. Д.), То, что вы получаете, может не быть точно таким же, как код, который был изначально скомпилирован, но он будет функционально эквивалентен.
Не совсем декомпилятор, но JDK содержит javap, дизассемблер :
javap -c org.example.MyClass
В зависимости от вашего сценария использования, это может быть интересно узнать или использовать.
Обратите внимание, что результаты декомпиляции файла класса зависят от информации, содержащейся в файле класса. Если я правильно помню, включенная отладочная информация ( см. Флаг -g javac ) важна, особенно для именования переменных и т.п.
Это всегда возможно. Найдите "java disassembler".
Но комментарии к исходному коду и временные переменные будут недоступны.
Если вы декомпилируете класс и увидите, что код слишком сложен с именами переменных, а имена методов похожи на a, b, c ... это означает, что проект запутан.
DJ - простой в использовании декомпилятор Java . Просто откройте любой файл .class, и он покажет вам его код java
.
Кроме того, вы можете использовать плагин jadClipse для eclipse, чтобы напрямую декомпилировать .class в .java
] А как насчет правильности кода, извлеченного из этой опции?
В любом случае код, который будет сгенерирован любым декомпилятором java, не будет таким же, как он был написан в исходном классе java. Поскольку он просто декодирует байт-код в Java-код. Единственное, в чем вы можете быть уверены, это то, что результат будет таким же, как и исходный код Java.