【问题标题】:Two java files, in same directory, one accessing the others class/s?两个 java 文件,在同一个目录中,一个访问其他类/s?
【发布时间】:2013-02-24 13:49:27
【问题描述】:

我正在尝试授予一个 .java 文件访问另一个 .java 文件中的类的权限。我想在命令行上执行此操作。例如,我将如何使用下面的两个文件来做到这一点?

文件:“ToImport.java”

package ABC;
public class ToImport {
    private String aName;
    public ToImport(String Name)  {
        aName = Name;
    }
    public String toString() {
        return("Text: " + aName);
    }
}

文件:“TheImport.java”

package ABC;
public class TheImport {
        public static void main(String[] args) {
        ToImport abc = new ToImport("a");
        System.out.println("TEST: " + abc);
    }
}

当我输入 javac ToImport.java 时,我没有收到任何错误,但是当我输入 javac TheImport.java 时,我收到以下错误,

【问题讨论】:

  • 类被放置在什么目录以及如何以及从哪里运行java
  • 您很可能从这两个文件所在的目录调用javac。它们都需要位于名为“ABC”(包名)的目录中,您需要从包含“ABC”的目录中调用javac ABC\TheImport.java。无论如何,这是我的猜测。
  • 因为这两个文件都在同一个包中并声明为public,所以你不必担心调用,只需创建对象就足够了,但问题是,正如jigar所说,你好吗?编译它

标签: java command-line javac


【解决方案1】:

TheImport 依赖于类ToImport。因此,当您编译 TheImport 时,编译器必须同时编译 ToImport 或访问已编译的 ToImport 类。

假设您有一个如下所示的目录,

src
└── ABC
    ├── TheImport.java
    └── ToImport.java 

此外,假设您在目录src 中并希望编译为../classes。您必须使用以下命令之一:

javac -d ../classes ABC/ToImport.java ABC/TheImport.java

javac -d ../classes ABC/ToImport.java
javac -cp ../classes -d ../classes ABC/TheImport.java

如果两个 .java 文件相互依赖,那么您必须像在第一个命令中那样一次编译它们。

另请注意,包应全部小写以遵守 Java 命名约定。

要运行您可以键入的主程序,

cd ../classes
java ABC.TheImport

【讨论】:

  • 完美答案。您可以在编译 -cp 本身时添加外部 jar,它们应该 : 分开。您还必须在使用 java 命令运行类文件时传递 jar。
【解决方案2】:

从包含 .java 文件的包中运行:

javac *.java

javac TheImport.java ToImport.java

编译器需要同时编译两个类,它不能单独编译一个依赖于另一个类的类。

【讨论】:

  • 编译器不必同时编译两个类。它可以编译一个,然后使用 javac 参数 -cp 编译依赖它的另一个,如 JB Nizet 对这个问题的回答。
猜你喜欢
  • 2017-08-25
  • 1970-01-01
  • 2011-01-25
  • 2014-01-02
  • 2015-10-15
  • 2019-03-05
  • 2018-11-02
  • 1970-01-01
  • 2012-08-04
相关资源
最近更新 更多