java中的包问题

java中的包问题,java,Java,我编写了一个源文件,并将该公共类放在一个包中: package abc; public class Employee { // Constructor public Employee(String name, double salary) { this.name = name; this.salary = salary; } // Methods public String getName() {

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

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

我读过一些关于这方面的文档,但这太复杂了,有人能简单地解释一下吗

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)

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

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

否则

与-d选项组合

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

设置classpath=d:/java/sources/bin/:%classpath%`

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

像这样尝试一下

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

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


您需要做的几件事:

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

    mkdirabc;mv Employee.class abc

    请参阅下面的注释/其他答案以了解如何使用-d选项

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

    javac-classpath。java


  • 回答第一个问题:发生错误是因为java编译器不知道在哪里查找abc包。第二个问题的答案如上所述。这些步骤将来会有所帮助:)。

    您应该这样编译

     javac -cp d:\yourJavaProject\abc Employee.java
     javac -cp d:\yourJavaProject\abc HelloWorld.java
    
    像这样跑,

     java -cp .;d:\yourJavaProject\abc HelloWorld
    
    请参阅以从命令行了解如何在包中编译和运行Java程序。

    (1)因为还没有包abc;您没有包含
    Employee.class
    的名为
    abc
    的目录;(2) 您可以使用
    javac-dabcemployee.java
    来解决这个问题;(3) 我建议您阅读.Java“不会让您这么做”。键入“java-d.Employee.java”无需执行“mv”:)而不是“move”。正如其他人所建议的,您可以(也应该)使用“
    javac-d…
    ”。依我拙见
     java -cp .;d:\yourJavaProject\abc HelloWorld