最近Java試験のために勉強を始めました。
パッケージの学習中にこれを試してみると、エラーメッセージが表示されました。私がしたことは、
//Creating class A (Within package the package: com.test.helpers)
package com.test.helpers;
public class A {
public void sayHello(){
System.out.println("Hello World");
}
}
//And then the class App utilizing the class A
import com.test.helpers.*;
public class App{
public static void main(String args[]){
A a = new A();
a.sayHello();
}
}
私はこれらのファイルを両方とも「JavaTest」(Windows 7)と呼ばれるディレクトリに置き、最初にコマンドjavac -d . A.Java
を使用してA.Javaをコンパイルしました
そして、App.Javaをコンパイルしようとすると、次のエラーメッセージが表示されました。
App.Java:5: error: cannot access A
A a = new A();
^
bad source file: .\A.Java
file does not contain class A
Please remove or make sure it appears in the correct subdirectory of the source path.
1 error
ただし、問題は2つの方法で解決するようです。
import com.test.helpers.*;
からimport com.test.helpers.A
に変更します。ここで何が起こるか説明していただければ幸いです。または私は間抜けな人間の間違いや構文エラーをしているかもしれません。
どうもありがとうございました
フォルダーJavaTestの下のA.Javaをcom/test/helpersに移動します。表示されているエラーは、A.Javaがそのパッケージ宣言と一致しないフォルダーにあるとコンパイラーが不平を言っているためです。パッケージ内にAがないと、アプリからAにアクセスできないことに注意してください。
src driectoryの下から次のコマンドを実行してクラスをコンパイルします
src> javac ./*.Java ./com/test/helpers/*.Java
次に、srcフォルダの下から
src>Java App
これでプログラムが実行されます。
こんにちは、ここでの問題は、両方のディレクトリ(ambiguous
およびcom.test.helpers
ディレクトリ)のJavaTest
クラスファイル名が原因で、JVMがクラスファイルを混乱させることです。
javac -d . A.Java
を実行すると、コンパイラはcom.test.helpers
ディレクトリにクラスファイルを作成し、JavaTest
にあるソースファイルと混同します。
Deleting the Source file A.Java
ソースファイルA.Java
をJavaTest
から削除すると、JVMはcom.test....
のクラスファイルが使用されることを認識し、あいまいさがなくなります。
Changing the import statement from 'import com.test.helpers.*;' to 'import com.test.helpers.A' in the file, 'App.Java'.
ここで、クラスの実装で使用する特定のファイルを指定しています。つまり、JavaTest
パッケージではなくA.Java
からのファイルcom.test...
を使用するようコンパイラーに指示しています
さて、このあいまいさの解決策が問題になることはありません。特定のファイルをインポートステートメントでインポートする必要があります。つまり、import com.test.helpers.A;
またはimport com.test.helpers.*;
を実行する場合は、com.test.helpers.A
A
の代わりに、現在のクラス実装のすべての場所で、コンパイラにJavaTest
のソースと混同しないように指示します
私はこの特定の答えにはかなり遅れていることを知っていますが、今後の読者に私の見解を共有したいと思いました。何らかの形で彼らを助けることができれば、それは素晴らしいことです。ありがとう!
Javaは、ヘルパーフォルダにA.Javaファイルを置くように要求しません
a.Javaファイルを削除してコードを実行した理由は、app.Java(またはメインのJavaファイルに他のクラスをインポートしている場合)、-> )はデフォルトのパッケージにあり、クラスをインポートする際に、パッケージディレクトリではなく同じディレクトリを優先します(クラスファイルと同じ名前のファイルが存在する場合->これがエラーのあるソースファイルです。 A.Java->必要に応じてA.class)
そして、そのため、Javaにルールがあります。それは、パッケージと並行して(同じ名前の).Javaファイルを配置することはありません。
この問題を解決するには、ファイルA.Javaを削除するか、ファイル名を変更する(パッケージに存在しない他の名前に変更する)か、完全修飾インポートステートメントを使用する必要があります。
ファイルA.JavaはパスJavaTest\com\test\helpers\A.Javaにある必要があります
次のようにコンパイルすることを忘れないでください:javac -d。 com\test\helpers\A.Java
やっと同じ問題が
解決しました。
//Use like this
import com.test.helpers.A;
com.test.helpersにクラス以上がある場合、uはimport com.test.helpers。*;を使用できます