Java导入包错误
嗨,我正在玩创建java包的游戏 我在一个名为admin的文件夹中创建了一个包,其中包含一个名为Employee的文件-这可以正确编译。在这个包之外,我有另一个java文件正在导入它。这是源代码Java导入包错误,java,packages,Java,Packages,嗨,我正在玩创建java包的游戏 我在一个名为admin的文件夹中创建了一个包,其中包含一个名为Employee的文件-这可以正确编译。在这个包之外,我有另一个java文件正在导入它。这是源代码 import java.util.*; // this works --> import admin.Employee; import admin.*; // this doesn't public class Hello { public static void main(String
import java.util.*;
// this works --> import admin.Employee;
import admin.*; // this doesn't
public class Hello {
public static void main(String[] args) {
Employee h = new Employee("James", 20000);
System.out.println(h.getName());
}
}
奇怪的是,第二个import语句工作正常,但第三个import语句工作正常
- 无法访问
员工
- 坏的类文件:
/Employee.class
package admin;
import java.util.*;
public class Employee
{
private static int nextId;
private int id;
private String name = "";
private double salary;
// static initialization block
static
{
Random generator = new Random();
// set nextId to a random number between 0 and 9999
nextId = generator.nextInt(10000);
}
// object initialization block
{
id = nextId;
nextId++;
}
// three overloaded constructors
public Employee(String n, double s)
{
name = n;
salary = s;
}
public Employee(double s)
{
// calls the Employee(String, double) constructor
this("Employee #" + nextId, s);
}
// Default constructor
public Employee()
{
// name initialized to ""--see below
// salary not explicityl set--initialized to 0
// id initialized in initialization block
}
public String getName()
{
return name;
}
public double getSalary()
{
return salary;
}
public int getId()
{
return id;
}
}
而且Employee.java
应该位于目录admin
中。e、 g
./Hello.java
./admin/Employee.java
而且Employee.java
应该位于目录admin
中。e、 g
./Hello.java
./admin/Employee.java
在不更改代码的情况下(不添加包声明,这是我认为真正的问题所在),基本的解决方案是:
- 一起编译这两个类(javac Hello.java admin/Employee.java)
- 在编译时将admin文件夹包括在类路径中(-cp-path-to-where-admin folder with.class file驻留在其中,假设该文件夹已编译)
- 一起编译这两个类(javac Hello.java admin/Employee.java)
- 在编译时将admin文件夹包括在类路径中(-cp-path-to-where-admin folder with.class file驻留在其中,假设该文件夹已编译)
当您告诉它import admin.Employee,并且它位于同一个源文件夹中时,编译器可以推断您希望隐式编译它。导入admin.*时,您需要在命令行中包含.java文件,或包含.class文件的类路径,以便对其进行编译。是否将类Employee公开?什么是
Employee
类的访问说明符?能否向我们展示Employee
的源代码,您的包结构以及您是如何编译文件的?谢谢各位,我现在用包含区分大小写文件路径的员工源代码编辑了它;也许employee.java i.o.employee.java?您是否公开了employee类?employee类的访问说明符是什么?能否向我们展示employee的源代码、包结构以及如何编译文件?谢谢大家,我现在用包含区分大小写的文件路径的员工源代码编辑了它;也许employee.java i.o.employee.java?我做了这两件事。当我复制并粘贴代码以使堆栈溢出时,“package admin;”被省略了,我做了这两件事。当我复制并粘贴代码以使堆栈溢出时,“package admin;”被省略了,很抱歉,但我不完全理解。它们各自编译得很好。我将Employee类放入一个包中,然后将其导入另一个文件中,只是想看看它是否可以这样工作。我想如果我能找到另一个教程会更好。我的书没有很好地解释这一部分。很抱歉,我没有完全理解。它们各自编译得很好。我将Employee类放入一个包中,然后将其导入另一个文件中,只是想看看它是否可以这样工作。我想如果我能找到另一个教程会更好。我的书没有很好地解释这一部分。