【问题标题】:Why does javac not find my class file in the same package?为什么 javac 在同一个包中找不到我的类文件?
【发布时间】:2017-05-20 14:07:15
【问题描述】:

我正在尝试理解 Java 包。

我在同一个包中有两个类,A.java 和 B.java。 A 类引用 B 类。

两者都有包语句package world.example;并保存在目录.../world/example/中。

B 编译正常,但是在尝试编译 A 时,javac 找不到 B 的类文件。

我尝试从/world 的父级以及/example 运行javac。我在这里和其他地方搜索了很多答案,但无济于事。大多数类似主题的问题似乎都有很多无关的代码和信息,所以我试图将我的问题提炼到最简单的部分,但仍然看不到我遗漏了什么。

附录:如果我删除包语句,两个类都可以编译,前提是我在编译 A 时指定了类路径,因此:javac -classpath . A.java

代码如下:

package world.example;

public class A {    
  public static void main(String[] args) {
    String msg = B.getMessage();
    System.out.println(msg);
  }     
}

...和...

package world.example;

public class B {    
    protected static String getMessage() {
        return "Hello world!";
    }       
}

...以及 javac 的输出...

17-04-17◆23:03 example »javac B.java 
17-04-17◆23:04 example »javac A.java 
A.java:5: error: cannot find symbol
        String msg = B.getMessage();
                     ^
  symbol:   variable B
  location: class A
1 error
17-04-17◆23:04 example »javac -classpath . A.java
A.java:5: error: cannot find symbol
        String msg = B.getMessage();
                     ^
  symbol:   variable B
  location: class A
1 error

【问题讨论】:

  • 从包含子目录“word”的目录编译它们。 IE。 javac word/example/A.java
  • 如果您转到world 的父级并输入javac world/example/*.java 会发生什么?

标签: java package javac


【解决方案1】:
I have two classes, A.java and B.java, in the same package. Class A references class B

您必须采用实用的分离方法将 .java 文件与 .class 文件分开。

和我重复整个编译过程。

首先,在 CMD 中编译 .java 文件时使用此命令,以便将 .java 文件与 .class 文件分开并避免混淆。

javac -d Target_Location Filename.java  >>>> Spaces are important

Target_location = C:\blah\blah

编译后,您将在您之前选择的 Target_Location 上获取类文件。因此,现在您必须将类路径环境变量更改为该目标位置,因为您提供了第三方包。

执行并查看。

如何在 CMD 中设置你的类路径。

set classpath = c:\blah\blah;

【讨论】:

    猜你喜欢
    • 2012-07-16
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 2016-05-09
    • 2012-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多