netbeans,eclipse和编译器的奇怪和不同的行为

时间:2012-02-05 18:27:56

标签: java eclipse netbeans

我将此代码放在一个文件中:

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 个答案:

答案 0 :(得分:2)

我在命令行和NetBeans 7.1中使用javac 7进行了尝试,它在两者中都给出了与javac示例相同的错误。您确定netbeans版本中的源代码是否相同?我根本看不出它是如何编译的。

将行“class genTest(){”更改为“class genTest {”允许它编译,并打印'false'。

答案 1 :(得分:1)

这确实是奇怪的行为。我在Netbeans(7.0.1)中创建了一个新项目,并在genIntro.java文件中添加了代码。一些观察:

  1. IDE会突出显示代码中的语法错误
  2. 第一次选择“运行”会提示用户存在错误。您可以选择永久忽略这一点,我这样做了。
  3. 如果您选择忽略项目似乎构建并成功运行的语法错误
  4. 在项目的bin文件夹中,您实际上可以找到错误源的生成的类文件。反向编译此类显示语法错误已被删除
  5. 返回IDE,执行清理和构建(而不是运行)会生成预期的错误:
  6. 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和Build在幕后调用Ant脚本,我假设它在控制台模式下使用系统JDK,这将与您的原始观察结果一致。左边没有答案的是NetBeans在选择Run时如何编译代码的问题 - 它看起来确实是一个不同的执行路径。