【问题标题】:Java import package errorJava导入包错误
【发布时间】:2013-07-15 12:04:03
【问题描述】:

您好,我正在玩创建 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());
    }
}

奇怪的是,第二个 import 语句工作正常,但第三个我得到了

  • 无法访问Employee
  • 错误的类文件:./Employee.class

我只是用javac Hello.java来编译

员工类在 admin 包中。结构是

文件夹“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;
}
}

【问题讨论】:

  • 您是否公开了 Employee 类?
  • Employee 类的访问说明符是什么?
  • 你能告诉我们Employee的源代码,你的包结构以及你是如何编译文件的吗?
  • 谢谢大家,我现在编辑了它,包含员工源代码
  • 区分大小写的文件路径;也许employee.java i.o. Employee.java?

标签: java packages


【解决方案1】:
package admin;  

import java.util.*;

public class Employee
{  

Employee.java 也应该在目录admin 中。例如

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

【讨论】:

  • 这两件事我都做了。当我复制并粘贴代码以堆栈溢出时,“包管理员;”被省略了
【解决方案2】:

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

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

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

【讨论】:

  • 对不起,我不完全明白。它们都分别编译得很好。我将 Employee 类放入一个包中,然后将其导入另一个文件,以查看它是否可以这样工作。我认为如果我只是找到另一个教程会更好。我的书没有很好地解释这部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-02
  • 2010-10-09
  • 1970-01-01
  • 2023-03-30
  • 2016-11-12
  • 1970-01-01
相关资源
最近更新 更多