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

嗨,我正在玩创建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语句工作正常,但第三个import语句工作正常

  • 无法访问
    员工
  • 坏的类文件:
    /Employee.class
我只是使用javac Hello.java来编译

employee类位于package 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.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驻留在其中,假设该文件夹已编译)
当您告诉它import admin.Employee,并且它位于同一个源文件夹中时,编译器可以推断您希望隐式编译它。导入admin.*时,需要在命令行中包含.java文件,或包含.class文件的类路径,以便对其进行编译。

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

  • 一起编译这两个类(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类放入一个包中,然后将其导入另一个文件中,只是想看看它是否可以这样工作。我想如果我能找到另一个教程会更好。我的书没有很好地解释这一部分。