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

时间:2016-06-18 03:42:27

标签: java packages

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

Foo.java:

package Foo;

public class Foo {
}

Bar.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

我做错了什么?

2 个答案:

答案 0 :(得分:2)

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

package Foo;

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

如果您制作了两个不同的套餐:FooFoo.javaBarBar.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");
    }
}

答案 1 :(得分:1)

javac Bar.java Foo.java,这是完全错误的。Foo位于名为Foo的包中(请使用其他名称以避免混淆)。

您必须使用javac -d "path to classes dir here" Foo/Foo.javajavac -d "path to classes dir here " Bar.java