java - 对导入包的正确方法感到困惑

标签 java package

我的目录结构很简单:在一个目录中,我有一个名为 Foo.java 的文件和一个名为 Bar.java 的文件

Foo.java:

package Foo;

public class Foo {
}

酒吧.java:

import Foo.*;

public class Bar {
  public static void main(String argv[]) {
    Foo foo; // This line breaks compilation

    System.out.println("Hello world!");
  }
}

没有 Foo foo 这行,一切都可以正常编译。但是当我添加它时,我得到:

$ javac Bar.java Foo.java 
Bar.java:5: error: cannot access Foo
    Foo foo;
    ^
  bad class file: ./Foo.class
    class file contains wrong class: Foo.Foo
    Please remove or make sure it appears in the correct subdirectory of the classpath.
1 error

我做错了什么?

最佳答案

如果Foo.javaBar.java都在同一个Foo包中,则不需要导入 Foo.* 包(通过这种方式导入 Foo 类的静态方法和共享常量);你只要写:

package Foo;

public class Bar {
    public static void main(String[] args) {
        Foo foo;
        System.out.println("Hello World");
    }
}

如果你制作了两个不同的包:Foo 用于 Foo.javaBar 用于 Bar.java ,你写:

package Bar;

import Foo.Foo; // or import Foo.*;

public class Bar {
    public static void main(String[] args) {
        Foo foo;
        System.out.println("Hello World");
    }
}

关于java - 对导入包的正确方法感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37893011/

相关文章:

java - 如何在 Netbeans JavaDB 中使用 SQL RANDOM() 函数

java - 使用 Java 的 Azure 服务总线中继

r - 平台中立的方式来在创建晕影时检查程序是否存在(例如pdfcrop)

android - java.lang.NoClassDefFoundError 在 Android 1.5 中用我自己的包抛出

javascript - 如何更改 NPM 版本?

java - 为什么 Libgdx Bullet 中的 ContactListener 派生类中的数组大小始终为零?

java - 引用中的编译模式引用

java - ClassLoader 不提供 'addTransformer(ClassFileTransformer)' 方法

java - 无法从 gradle 解析 com.google.guava

actionscript-3 - 是否可以从其他包访问包外的类?