1

こんにちは、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());
    }
}

奇妙なことに、2 番目の import ステートメントは問題なく動作しますが、3 番目のステートメントでは問題なく動作します。

  • アクセスできません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;
}
}
4

2 に答える 2

1
package admin;  

import java.util.*;

public class Employee
{  

またEmployee.java、ディレクトリにある必要がありますadmin。例えば

./Hello.java  
./admin/Employee.java
于 2013-07-15T12:55:51.907 に答える
0

コードを変更せずに (パッケージ宣言を追加せずに、質問が実際に求めていたものだと思います)、基本的な修正は次のいずれかになります。

  • 両方のクラスをまとめてコンパイルします (javac Hello.java admin/Employee.java)。
  • コンパイル中にクラスパスに admin フォルダーを含めます (既にコンパイルされていると仮定して、.class ファイルを含む admin フォルダーが存在する場所への -cp パス)

import admin.Employee を指定すると、それが同じソース フォルダーにある場合、コンパイラーは暗黙的にコンパイルする必要があると推測できます。admin.* をインポートするときは、コンパイルするために、コマンドラインに .java ファイルを含めるか、.class ファイルへのクラスパスを含める必要があります。

于 2013-07-15T13:06:54.333 に答える