2009-07-02 213 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

传递给java.exe的参数是类名(带有可选包),而不是文件名。

问候。

2

'点'是一个分隔符。当您编写Welcome.class时,它正在寻找名为'class'的'Welcome'包中的类。

1

它将文件名中的点解释为包名称。随着您对java的了解提高,您将了解包,并发现通常您的类文件位于包中,例如,如果Welcome类位于包“com.ericasberry”中,则可以通过键入java com.ericasberry.Welcome

2

java程序需要一个类名作为参数,而不是文件名。作为Java手册规定:(java

的java [选项]类[参数...]

一旦这是关于classpath清晰读取。

-2

首先你需要给javac file_name.java编译后编译java程序,它会生成点(。)类文件,所以你不能直接给这个类文件编译程序。

+1

-1。 OP非常清楚地做到了这一点。 – 2013-10-03 13:41:18