【问题标题】:Java newbie problem: classes of the same package accessing one another?Java新手问题:同一个包的类互相访问?
【发布时间】:2013-03-10 11:01:15
【问题描述】:

这些类属于同一个 pkg。它们在 dir 中,pkg 的名称。

  • 一般来说,类如何在同一个 pkg 中相互访问?

错误

javac PackTest.java
PackTest.java:8: cannot find symbol
symbol  : class PriTest
location: class pacc.PackTest
  System.out.println(new PriTest().getSaluto());
                         ^
1 error

PKG pacc 中的类

$ cat PackTest.java 
package pacc;
import java.io.*;

public class PackTest
{
    public static void main(String[] args)
    {
        System.out.println(new PriTest().getSaluto());
    }
}
$ cat PriTest.java 
package pacc;

public class PriTest
{
    public PriTest(){}
    private String saluto="SALUTO FROM PriTest";
    public String getSaluto(){return saluto;}
}

目录名的PKG

$  find .. -type d -name "pacc"
../pacc
$ ls ../pacc 
makefile  PackTest.java  PriTest.java
$ ls
makefile  PackTest.java  PriTest.java

解决了!

$ cat makefile 
p:
    javac ./pacc/PackTest.java
    java pacc/PackTest
$ make p
javac ./pacc/PackTest.java
java pacc/PackTest
SALUTO FROM PriTest

【问题讨论】:

  • @HH:我注意到你最近一直在问很多关于 Java 的问题:你应该花点时间安装一个 IDE。它会让你的时间更有效率。我推荐eclipse.org
  • @poly:我破了太多次了,项目需要快速修改。当项目更加冻结时,我会但还没有。
  • IDE 的重点是能够进行这些快速修改。此外,通配符导入是惰性的——Eclipse 可以帮助您摆脱这些。
  • @HH,Eclipse 是一个非常成熟和稳定的Java IDE。只要您不从主干中提取源代码并自己编译它,它就应该可以很好地工作。伽利略版本已经发布了一段时间,我从来没有遇到过任何问题。您可能需要花一两个小时来安装它并熟悉它。如果您有问题,请在这里提出问题,我相信会很快得到答复。
  • 使用 IDE 就不用担心这种傻事了

标签: java package


【解决方案1】:

确保文件在同一个目录中,与包同名。另外,请确保类路径设置正确。

包模仿目录结构 - 包“org.example.test”中的“Test.java”应该在“org/example/test/Test.java”中找到。

以下为我编译了您的文件:

 $ javac -cp "." *.java

和我一起跑

 $ cd ..
 $ java pacc.PackTest

这里没有问题。

顺便说一句,在 Java 世界中,Apache Ant 通常比 makefile 更受欢迎。

【讨论】:

  • 最后一件事有错误:路径错误。我认为它是“SetWord.java”而不是“tools/setWord.java”。我可以通过在 tools-dir 中使类相互独立来解决——但是有没有更简单的方法呢?
  • 对不起,我不明白你的意思。
  • Adrian Mouat:我有一个包含“scissor”、“camera”、“spell”、“setWord”、“sanitise”的工具包——如何使用“spell”类访问 sanitize ?
  • 如果它们都是公共类,都在“工具”包中并且都在同一个目录中,它应该可以工作。
  • 您现在已经对问题进行了大量编辑 - 这确实是一个不同的问题。尝试添加“。”不过到类路径。
【解决方案2】:

也许(请不要杀我)这是一个解决方案:

在终端中,转到您的 java 项目的根目录(所以默认包,在您的情况下,是文件夹 pacc 的父目录)。
然后输入:javac pacc.PackTest.java

我不手动使用编译器。我的 IDE 为我工作。

【讨论】:

  • 这个观察实际上导致了解决方案。接受,因为它是 CRUX 移动。
  • 你需要降一级。所以你需要运行类似“$ javac ./pacc/PackTest.java; java pacc/PackTest”的命令,参见makefile。
【解决方案3】:

如果您习惯于分别编译每个文件的 C 和 C++ 方法,您可能会惊讶地发现,当您将 整个项目 一次性编译所有 Java 编译器时效果最佳.

Apache Ant是构建Java项目的常用工具。它可以为您调用javac。它比 make(1) 更适用于 Java。


编译为:

H:\test\so>javac pacc/PackTest.java pacc/PriTest.java

您应该位于项目的 root 中,而不是文件夹 pacc

【讨论】:

  • 不,你永远不需要从同一个包中导入类。
【解决方案4】:

获取类似 IntelliJ IDEA 的 ide。 Java 是如此复杂和臃肿,这将有所帮助,因此您甚至不必为这些琐碎的事情而烦恼。

【讨论】:

    【解决方案5】:

    一旦您掌握了基础知识,IDE 就是必不可少的生产力工具。

    在此之前,最好把这些问题想清楚,对 Java 开发有更深入的了解。

    就 ANT 而言,现在值得您花时间进行研究。 Makefile 不会为您提供任何进一步的编程启迪。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-23
      • 1970-01-01
      • 2019-11-01
      • 2017-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多