2

ソース ファイルを作成し、そのパブリック クラスをパッケージに入れます。

package abc;
public class Employee
{
    // Constructor
    public Employee(String name, double salary)
    {
        this.name = name;
        this.salary = salary;
    }

    // Methods
    public String getName()
    {
        return this.name;
    }

    public double getSalary()
    {
        return this.salary;
    }

    // instance field
    private String name;
    private double salary;
}    

次に、コマンドjavac Employee.javaを使用してコンパイルしようとします。ソース ファイルと同じディレクトリに .class ファイルが生成されます。

今、このパッケージを使用しようとするので、ソース ファイルを作成します。

import abc.*;
public class HelloWorld
{
    public static void main(String args[]){
        //System.out.println("hello world");

        Employee aEmployee = new Employee("David",1000);
        System.out.println(aEmployee.getName() + aEmployee.getSalary());
    }

}

javac HelloWorld.javaを使用してコンパイルしようとしましたが、「パッケージ abc が存在しません」というエラーが表示されます。

次の質問があります:
1) なぜこのエラーが発生したのですか?
2) この問題を解決するには?
3)いくつかのクラスをパッケージ化するたびに、後で使用するパッケージをどこで見つけることができますか

これについていくつかのドキュメントを読んだことがありますが、それは非常に複雑です。誰かが簡単に説明できますか?

4

5 に答える 5

4

1) なぜこのエラーが発生したのですか?

これは、Java コンパイラがパッケージをロードしようとするときに、クラスパスまたは jar ファイルのいずれかでディレクトリ ツリーを探すためです。これは、 というパッケージabc.foo.barの場合、ディレクトリ ツリーを検索し、/abc/foo/barそのパッケージに属するクラスが存在することを期待することを意味します。Employee クラスをコンパイルしましたが、それをインポートすると、コンパイラはabcクラスパスでディレクトリを探しますが、そこにはありません。

2) この問題を解決するには?

Employee クラスをコンパイルするときに、そのクラスファイルがabcクラスパスのどこかにあるディレクトリにあることを確認する必要があります。最も簡単な方法は、 というディレクトリを作成し、そのディレクトリに Employee.java ファイルを移動してabcからコンパイルabcすることです。

    javac abc/Employee.java

これにより、ディレクトリに Employee.class ファイルが作成されますabc。次に、HelloWorld をコンパイルします。

    javac HelloWorld.java

3)いくつかのクラスをパッケージ化するたびに、後で使用するパッケージをどこで見つけることができますか

パッケージに名前を付けたディレクトリ ツリー内。への回答の後半を参照してください1)

于 2012-08-20T05:30:08.647 に答える
0

このようにコンパイルする必要があります

 javac -cp d:\yourJavaProject\abc Employee.java
 javac -cp d:\yourJavaProject\abc HelloWorld.java

そして、このように実行します。

 java -cp .;d:\yourJavaProject\abc HelloWorld

コマンドラインからパッケージ内のJavaプログラムをコンパイルして実行する方法については、リファレンスを参照してください。

于 2012-08-20T05:37:02.310 に答える