Java导入包错误

时间:2013-07-15 12:04:03

标签: 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[] args) {
        Employee h = new Employee("James", 20000);
        System.out.println(h.getName());
    }
}

奇怪的是,第二个导入语句工作正常,但第三个导入语句

  • 无法访问Employee
  • 错误的班级档案:./Employee.class

我只是使用javac Hello.java来编译

员工类在包管理员中。结构是

文件夹“admin” - >包含“Employee.class”和“Employee.java” 这个文件夹外面是hello.java文件。

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;
}
}

2 个答案:

答案 0 :(得分:1)

package admin;  

import java.util.*;

public class Employee
{  

Employee.java也应位于目录admin中。例如

./Hello.java  
./admin/Employee.java

答案 1 :(得分:0)

在不更改代码的情况下(不添加包声明,这就是我认为问题的真正要求),基本修复方法是:

  • 将两个类一起编译(javac Hello.java admin / Employee.java)
  • 编译时在您的类路径中包含admin文件夹(-cp路径指向.class文件所在的admin文件夹,假设已经编译)

当你告诉它导入admin.Employee,并且它在同一个源文件夹中时,编译器可以推断你想要隐式编译。导入admin。*时,需要在命令行中包含.java文件,或者将类路径包含在.class文件中,以便进行编译。