Java 为什么在不使用';你好像什么都没做?

Java 为什么在不使用';你好像什么都没做?,java,eclipse,Java,Eclipse,我可以用修饰符声明以下包,但它似乎对任何东西都没有任何影响: private public protected static final package com.stackoverflow.mangodrunk // ... class Whatever { // ... } 所以我的问题是,在一个包的decelleration之前添加一个修饰符会有什么作用吗?为什么编译器会允许它 更新:与Eclipse捆绑的编译器似乎存在问题,正如其他人提到的,这是使用Sun的JDK时出现的编

我可以用修饰符声明以下包,但它似乎对任何东西都没有任何影响:

private public protected static final package com.stackoverflow.mangodrunk

// ...
class Whatever {
    // ...
}  
所以我的问题是,在一个包的decelleration之前添加一个修饰符会有什么作用吗?为什么编译器会允许它


更新:与Eclipse捆绑的编译器似乎存在问题,正如其他人提到的,这是使用Sun的JDK时出现的编译器错误。

他们不是。您使用的是哪种编译器

$ javac com/stackoverflow/mangodrunk/Whatever.java

com/stackoverflow/mangodrunk/Whatever.java:1: class, interface, or enum expected
private public protected static final package com.stackoverflow.mangodrunk;
                                      ^
1 error

根据JLS,在
程序包
之前只能有一个注释

但是注释如下所示(为了简洁起见省略了完整语法):

因此,编译器不应该允许标准访问修饰符


来源:

我使用的是JDK1.6.0_17,您是对的,当我尝试使用javac编译它时,它有一个编译器错误。但是在eclipse下没有问题。这说明EclipseJDK有什么问题?可能是语法中的一个小错误导致它忽略了“包”之前的任何内容,而不仅仅是注释?查看是否也忽略了其他关键字。我想你应该报告这个bug,除非它已经被报告过了。它应该忽略
package
关键字之前的注释和注释,但是它忽略了所有内容。Eclipse 3.8/4.2仍然存在问题。天哪,你说得对,Eclipse编译器编译得很好……这是一个相当小的错误,但是如果你想报告它,你可以在这里执行:
PackageDeclaration:
        Annotationsopt package PackageName ;
NormalAnnotation:
        @ TypeName ( ElementValuePairsopt )