java中的包问题

时间:2012-08-20 05:17:55

标签: java

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

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)每次打包某些类时,我在哪里可以找到以后使用的包

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

5 个答案:

答案 0 :(得分:4)

  

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

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

  

2)如何解决这个问题?

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

    javac abc/Employee.java

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

    javac HelloWorld.java
  

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

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

答案 1 :(得分:1)

如果您正在使用类文件。 你应该让你的类文件与包相同的文件夹结构。(其实践)例如,如果" abc"是包。然后你的Employees.java应该在" abc"夹。编译后,生成的类文件将填入abc文件夹。在任何情况下,您都应确保您的类文件位于abc文件夹中。

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

否则

使用-d选项编译

  

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

     

set classpath = d:/ java / sources / bin /:%classpath%`。

javac HelloWorld.java

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

答案 2 :(得分: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/

答案 3 :(得分:0)

您需要做的一些事情:

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

    mkdir abc; mv Employee.class abc

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

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

    javac -classpath . HelloWorld.java

  3. 回答你的第一个问题:错误发生是因为java编译器不知道在哪里查找abc包。第二个是上面的回答。这些步骤将来有助于:)。

答案 4 :(得分:0)

你应该编译喜欢这个

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

并且运行喜欢这个;

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

请参阅reference以了解如何从命令行编译和运行Java程序包。