Странное и разное поведение в NetBeans, Eclipse и Compiler - PullRequest
4 голосов
/ 05 февраля 2012

У меня есть этот код в одном файле:

public class genIntro {
    public static void main(String [] args){
     genTest g = new genTest();
     g.add( 10 );
     System.out.println( g.get() == new Integer(10) ? true:false  );
     Integer in = (Integer) g.get();


    }
}

class genTest(){

        private Object object;

        public void add(Object object) {
            this.object = object;
        }

        public Object get() {
            return object;
        }


}

Второй класс genTest имеет неправильное объявление в скобках ().

В Netbeans 6.9.1 код работает правильно и выдает false.

Product Version: NetBeans IDE 6.9.1 (Build 201007282301)
Java: 1.6.0_21; Java HotSpot(TM) 64-Bit Server VM 17.0-b17
System: Windows 7 version 6.1 running on amd64; Cp1252; en_US (nb)
Userdir: C:\Users\Name\.netbeans\6.9

В Eclipse Indigo код выводит:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 

    at genIntro.main(genIntro.java:4)

Version: Indigo Service Release 1
Build id: 20110916-0149

Затем вручную с помощью команды javac я получаю:

    genIntro.java:12: '{' expected
    class genTest(){
         ^
    1 error

Это довольно странно, кто-то может объяснить, почему разница между ними? Поскольку он ошибочен, почему он компилируется и запускается в Netbeans?

Запуск через javac genIntro.java

Все они используют jre6

Снимок экрана:

enter image description here

Ответы [ 2 ]

2 голосов
/ 05 февраля 2012

Я попробовал это с javac 7 из командной строки и NetBeans 7.1, и он выдает ту же ошибку, что и ваш пример javac в обоих. Вы уверены, что источник в вашей версии NetBeans совпадает? Я не вижу, как это вообще скомпилируется.

Изменение строки "class genTest () {" на "class genTest {" позволяет его скомпилировать и вывести «false».

1 голос
/ 07 февраля 2012

Это действительно странное поведение. Я создал новый проект в Netbeans (7.0.1) и добавил к нему свой код в файле genIntro.java. Некоторые наблюдения:

  1. Среда IDE выделяет синтаксическую ошибку в вашем коде
  2. При выборе Запустить в первый раз пользователь получает сообщение об ошибке. Вы можете игнорировать это навсегда, что я и сделал.
  3. Если вы решите игнорировать синтаксическую ошибку, проект будет создан и успешно запущен
  4. В папке bin проекта вы можете найти сгенерированный файл класса для ошибочного источника. Обратная компиляция этого класса показывает, что синтаксическая ошибка была удалена .
  5. Вернувшись в IDE, выполнение «Очистить и построить» (в отличие от прогона) приводит к ожидаемой ошибке:
Compiling 2 source files to /Users/tuoyo/Work/Data/Netbeans/Misc/build/classes
/Users/tuoyo/Work/Data/Netbeans/Misc/src/misc/genIntro.java:14: '{' expected
class genTest(){
1 error
/Users/tuoyo/Work/Data/Netbeans/Misc/nbproject/build-impl.xml:603: The following error occurred while executing this line:
/Users/tuoyo/Work/Data/Netbeans/Misc/nbproject/build-impl.xml:245: Compile failed; see the compiler error output for details.
BUILD FAILED (total time: 0 seconds)

Поскольку Clean and Build вызывает сценарий Ant за кулисами, я предполагаю, что он использует системный JDK в режиме консоли, который будет сочетаться с вашими первоначальными наблюдениями. Оставленный без ответа вопрос о том, как NetBeans компилирует код, когда выбрано Run - похоже, это другой путь выполнения.

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