Java新手问题:相同包的类互相访问?

时间:2010-05-03 14:38:28

标签: java package

这些类属于同一个pkg。它们在dkg中,是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;}
}

dir名称的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

5 个答案:

答案 0 :(得分:6)

确保文件位于同一目录中,并与程序包同名。另外,请确保正确设置了类路径。

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

以下为我编译了文件:

 $ javac -cp "." *.java

我跑了

 $ cd ..
 $ java pacc.PackTest

这里没问题。

BTW Apache Ant通常比Java Universe中的makefile更受欢迎。

答案 1 :(得分:2)

可能(所以请不要杀我)这是一个解决方案:

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

我不手动使用编译器。我的IDE对我有用。

答案 2 :(得分:1)

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

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


编译为:

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

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

答案 3 :(得分:0)

获得像IntelliJ IDEA这样的ide。 Java是如此复杂和臃肿,这将有所帮助,所以你甚至不必费心这些琐碎的东西。

答案 4 :(得分:0)

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

在此之前,您可以通过这些问题来深入了解Java开发。

至于ANT,现在值得你花时间去做。 Makefile不会为您提供任何进一步的编程启发。