不含包层ơ的HelloWorld.java
public class HelloWorld
E:\java\src>javac HelloWorld.java
q行Q?/span>
E:\java\src>java HelloWorld
屏幕打印出:
Hello World!
初学者常犯的错误
1. q行Ӟ带了.class后缀
如果你试图用如下命令:
E:\java\src>java HelloWorld.class
pȝ会误认ؓ你运行的?/span>HelloWorld包下的名?/span>class的类文gQ会到系l的CLASSPATH下(一般都包括当前目录Q企囑֯?/span> HelloWorld.class.classq样的类Q这Lcd然不存在了;q且也不可能存在Q因?/span>class是关键字Q不能作Z个类的名字。所?/span> 会报如下错误信息Q?/span>
Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld/class
2. 文g名大写错误
对于?/span>Windowsq样的系l,~译时可以不兛_大小写。比如编?/span>HelloWorld.javaӞ也可以用:
E:\java\src>javac helloworld.java
也可以编译通过Q但产生的类文g仍然是和源文件相W的Q?/span>HelloWorld.class?/span>
但在q行时一定要注意大小写,比如试图使用如下命oq行Q?/span>
E:\java\src>java helloworld
报cM?/span>1中的错误Q?/span>
Exception in thread "main" java.lang.NoClassDefFoundError: helloworld (wrong name: HelloWorld)
包含包层ơ的HelloWorld.java
比如上面?/span>HelloWorld.java修改如下Q?/span>
package org.javaresearch;
~译时有两种Ҏ
1. 直接~译
E:\java\src>javac HelloWorld.java
此时在当前目录下输出HelloWorld.class。此Ӟq行不能使用上面相同的方法,使用Q?/span>
E:\java\src>java HelloWorld
q行Ӟ出现如下错误Q?/span>
Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld (wrong name: org/javaresearch/HelloWorld)
从上q错误信息你也可以看刎ͼpȝ可以扑ֈHelloWorldc(因ؓ当前路径包含?/span>CLASSPATH中,具体Z么会提示wrong nameQ有兴趣的朋友参?/span>Java语言规范Q,但这个类属于org.javaresearch包。所以,你要做的是按照上述包层ơ,相应的创建目录层 ơ,把上面生成的HelloWorld.class攑ֈE:\java\src\org\javaresearch\目录下。运行(q时候是在包层次的最高层目录下运行的Q:
E:\java\src >java org.javaresearch.HelloWorld
pȝ打印出:
Hello World!
q儿要注意的是,不能使用java org\javaresearch\HelloWorld来运行,此时同样会出现如下错误:
Exception in thread "main" java.lang.NoClassDefFoundErrorrg\javaresearch\HelloWorld (wrong name: org/javaresearch/HelloWorld)
因ؓcd的书写是用句Ҏ分割包名的层ơ的Q引用javacd里面的类也可以这样写Qjava.util.List
那么Q就不用写全名了Q直接写 List list = new ...;java ~译器就可以知道?List 什么类.但是Q由于,java.util q个??java.sql q个包都有一?Date c,所以,如果 同时导入q两个包Q那么会
Djava ~译器不知道引用那个c,有两U解军_法:
a. 用全名来引用c:java.util.Date date1 = ...;java.sql.Date date2 = ...;
b. 不要导入整个包,只导入所需要的c,如果你同旉要这两个 Date c,那么只能写全名了Q如?/p>
你不是同旉要这两个c,你可以只导入需要的包:
比如Qimport java.util.List; import java.sql.Date;q样׃会冲H,因ؓ~译器可以十分清楚的区分
q个 Date cL java.sql 包中的, java.util 包中?Date cL本就没有导入q来?/p>
q一点,可以按照常理来理解,q是比较好理解的?br />
2. 使用 -d <directory>~译选项
是不是觉得上面的~译Ҏ有点ȝQ能不能自动在当前\径(或Q意指定的路径Q下生成包层ơ呢Q有Q?/span>-d <directory>~译选项p做到?/span>
E:\java\src >javac