2009-07-02 22 views
1
C:\Program Files\Java\jdk1.6.0_05\CoreJava\v1\v1ch2\Welcome>javac Welcome.java 

C:\Program Files\Java\jdk1.6.0_05\CoreJava\v1\v1ch2\Welcome>java Welcome.class 
Exception in thread "main" java.lang.NoClassDefFoundError: Welcome/class 
Caused by: java.lang.ClassNotFoundException: Welcome.class 
     at java.net.URLClassLoader$1.run(Unknown Source) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
     at java.lang.ClassLoader.loadClassInternal(Unknown Source) 

C:\Program Files\Java\jdk1.6.0_05\CoreJava\v1\v1ch2\Welcome>java Welcome 
Welcome to Core Java 
by Cay Horstmann 
and Gary Cornell 

私の問題は、 "java"がクラスを見つけて実行するのはなぜですか?なぜクラスファイルを直接指定できないのですか?javaコマンドライン実行

答えて

2

.class javaを追加すると、 "Welcome"パッケージで "class"という名前のクラスが検索されていると考えられます。 1つではないので、エラーが発生します。

1

java.exeに渡すパラメータは、ファイル名ではなくクラス名(オプションパッケージ付き)です。

よろしくお願いいたします。

2

「ドット」は区切り文字です。 Welcome.classを書いたとき、 'Welcome'パッケージにある 'class'という名前のクラスを探していました。

1

ファイル名のドットをパッケージ指定として解釈します。 javaについての知識を進めていくうちに、パッケージについて学び、通常はクラスファイルがパッケージ内にあることを確認します。たとえば、Welcomeクラスが "com.ericasberry"パッケージに入っていた場合、 java com.ericasberry.Welcome

2

Javaプログラムはファイル名ではなく、クラス名をパラメータとして想定しています。 Javaのマニュアルに記載されているように:(java

javaの[オプション]クラス[引数...]

これはclasspathについて明確に読み込まれたら。

-2

最初にjavac file_name.javaを与える必要があります。そのコンパイラがJavaプログラムをコンパイルし、ドット(。)クラスfile.soを生成した後、プログラムをコンパイルせずにクラスファイルを直接与えることはできません。

+1

-1。 OPは非常にはっきりとそれをしました。 –

関連する問題