Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对导入包的正确方式感到困惑_Java_Packages - Fatal编程技术网

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

Java 对导入包的正确方式感到困惑,java,packages,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.prin

我的目录结构非常简单:在一个目录中,我有一个名为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

我做错了什么?

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


您必须使用
javac-d“path to classes dir here”Foo/Foo.java
javac-d“path to classes dir here”Bar.java
如果
Foo.java
Bar.java
都在同一个
Foo
包中,则无需导入
Foo.
包(这样可以导入Foo类的静态方法和共享常量);您只需编写:

package Foo;

public class Bar {
    public static void main(String[] args) {
        Foo foo;
        System.out.println("Hello World");
    }
}
如果您制作了两个不同的软件包:
Foo
用于
Foo.java
Bar
用于
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");
    }
}

对于这类问题,最重要的是永远不要对不同的类、包和变量使用相同的名称,保持唯一性,根据项目类型声明包名,根据功能类型声明类名,根据值类型声明变量名,这样您就永远不会遇到这种问题