2015-03-12 2 views
0

У меня есть следующая часть кода в одной из моих java-программ.Некомпилированный класс java, но все еще выполняется

public class Solution { 

    public static void main(String[] args) { 
     System.out.print("Hello World"); 
} 

    public static void printOutput(String[] arr){ 

     //Note: The semi colon is omitted intentionally. 
     System.out.print("Hello Incomplete World") 
} 

Когда я его создаю, я получаю ошибку компиляции, но все же она генерирует файл .class. когда я запускаю файл .class, он выводит результат «Hello World».

Как это возможно? Я всегда считал, что файл .class, имеющий нерешенные проблемы с компиляцией, никогда не будет исполняемым. Может ли кто-нибудь предоставить некоторую информацию об этом?

+7

Выполняется ранее скомпилированная версия класса. –

ответ

1

Что, вероятно, происходит здесь, так что уже скомпилированный файл класса уже существует. Когда выполняется компилятор Java, он создаст файл .class, если он успешно скомпилирует исходный файл, но не удалит последующую компиляцию.

+1

Downvoted, потому что нет «вероятно» об этом. Компилятор не будет случайно создавать файл рабочего класса, если в источнике возникла синтаксическая ошибка. –

+0

@ AndyTurner Вероятно, не было ссылок на то, должен ли компилятор создавать файл. Он даже не появляется в том же предложении, что и объяснение этого. Вероятно, это было связано с примерной последовательностью событий, которые привели к этой проблеме. –

+0

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

1

Вы предполагаете, что компилятор очистит ваши старые файлы классов - это не так.

Проверьте дату изменения в текущем файле .class - вы увидите, что она старше вашей компиляции. Это потому, что он был создан из рабочего кода, а не из вашего текущего исходного файла. Если вы удалите этот файл класса, попробуйте перекомпилировать, вы увидите, что новый файл класса не создается.

0

Файл класса, который вы используете, относится к предыдущей компиляции. Скомпилируйте свою программу еще раз и посмотрите, когда ранее был изменен файл класса.

Смежные вопросы