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
查看此站点以获得良好的教程:
您需要做的几件事:
mkdirabc;mv Employee.class abc
请参阅下面的注释/其他答案以了解如何使用-d选项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