2

我编写了一个源文件并将该公共类放在一个包中:

package abc;
public class Employee
{
    // Constructor
    public Employee(String name, double salary)
    {
        this.name = name;
        this.salary = salary;
    }

    // Methods
    public String getName()
    {
        return this.name;
    }

    public double getSalary()
    {
        return this.salary;
    }

    // instance field
    private String name;
    private double salary;
}    

然后我尝试使用命令编译它:javac Employee.java,它会在与源文件相同的目录中生成一个 .class 文件

现在我尝试使用这个包,所以我写了一个源文件:

import abc.*;
public class HelloWorld
{
    public static void main(String args[]){
        //System.out.println("hello world");

        Employee aEmployee = new Employee("David",1000);
        System.out.println(aEmployee.getName() + aEmployee.getSalary());
    }

}

我尝试使用:javac HelloWorld.java编译它,但它有一个错误说:包 abc 不存在

我有以下问题
1)为什么会发生这个错误?
2)如何解决这个问题?
3)每次我打包一些类时,我在哪里可以找到之后使用的包

我已经阅读了一些有关此的文档,但这太复杂了,有人可以简单地解释一下吗?

4

5 回答 5

4

1)为什么会发生这个错误?

这是因为 java 编译器在尝试加载包时会在类路径或 jar 文件中查找目录树。这意味着对于名为 的包abc.foo.bar,它将查找目录树:/abc/foo/bar并期望属于该包的类存在。您已经编译了 Employee 类,但是当您导入它时,编译器会abc在您的类路径中查找一个目录,但它并不存在。

2)如何解决这个问题?

您需要确保在编译 Employee 类时,它的类文件位于abc类路径中某处的目录中。最简单的可能是创建一个名为 的目录abc,然后Employee.java 文件移动到该abc目录中,然后编译:

    javac abc/Employee.java

这将在目录中创建一个 Employee.class 文件abc。然后你可以编译你的HelloWorld:

    javac HelloWorld.java

3)每次我打包一些类时,我在哪里可以找到之后使用的包

在您命名包的目录树中。请参阅回复的后半部分1)

于 2012-08-20T05:30:08.647 回答
1

如果您正在使用类文件。您应该将类​​文件放在与包相同的文件夹结构中。(这是惯例)例如,如果“abc”是包。那么您的Employees.java 应该在一个“abc”文件夹中。编译后生成的类文件将填充到 abc 文件夹中。在任何情况下,您都应该确保您的类文件位于 abc 文件夹中。

然后,如果您尝试在另一个类中使用 abc.Employees.class。您必须将 abc 文件夹保留在类路径中,例如,如果您的 abc 文件夹位于 d:/java/sources/bin/abc .. 这就是您的员工类。

别的

使用 -d 选项编译

javac Employee.java -dd:/java/sources/bin

设置类路径=d:/java/sources/bin/:%classpath%`。

javac HelloWorld.java

在此之后,您将能够编译您的代码。

于 2012-08-20T05:30:47.523 回答
0

试试这样。。

javac -sourcepath /path/to/srcdir -cp /path/to/libraries -d /path/to/outputdir

检查此站点以获得良好的教程:

http://www.sergiy.ca/how-to-compile-and-launch-java-code-from-command-line/

于 2012-08-20T05:31:03.647 回答
0

您需要做的几件事:

  1. 将 abc 包的类文件放入名为 abc 的文件夹中。例如

    mkdir abc; mv Employee.class abc

    请参阅下面的评论/其他答案以改用 -d 选项。

  2. 告诉 java 编译器在哪里可以找到类文件。您可以使用 -classpath 选项执行此操作。如果abc在您当前的文件夹中,那么您可以告诉 javac 在 . 像这样:

    javac -classpath . HelloWorld.java

回答你的第一个问题:错误发生是因为 java 编译器不知道在哪里寻找 abc 包。第二个上面已经回答了。这些步骤在将来应该会有所帮助:)。

于 2012-08-20T05:31:17.610 回答
0

你应该像这样编译

 javac -cp d:\yourJavaProject\abc Employee.java
 javac -cp d:\yourJavaProject\abc HelloWorld.java

并像这样运行;

 java -cp .;d:\yourJavaProject\abc HelloWorld

请参阅参考资料以了解如何从命令行编译和运行包中的 Java 程序。

于 2012-08-20T05:37:02.310 回答