Java之路----幫你完成HelloWorld<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
轉眼在csdn已經滿月了,看到好多初學java的朋友會有關於錯誤提示Noclassdeffounderror………這樣的問題,想到自己初學的時候也曾被這種鬱悶的問題弄得焦頭爛額,很多問題是不會在教科書裏面有講的,因爲,教科書不會捕捉我們的“異常“:)。於是就整理了一下我見到的朋友們提出的問題,希望能對後來者有所幫助。
1.Java開發中系統環境變量設置(JDK):
工欲善其事,比先利其器。環境變量這一關,大家是必須要過的,下面是各種操作系統裏面的環境設定。
Win2000/winXP中:
右鍵我的電腦à屬性à高級à環境環境變量
classpath=.;jdk安裝目/lib
path=jdk安裝目錄/bin
注意:一定不可忽略“.”,他表示的是我們的當前工作目錄,沒有他,會有很多麻煩出現的。
Winme中:
“開始à程序à附件à系統工具à系統信息“中,選擇工具à系統配置實用程序à環境
設定:
classpath=.;jdk安裝目/lib
path=jdk安裝目錄/bin
Win98中:
修改autocexe.bat 就是修改自動批處理文件。
添加:
set classpath=.;jdk安裝目/lib
set path=jdk安裝目錄/bin;%path%
linuX中:
假設JDK安裝在/home/jdk1.4.0/下,打開/etc/profile,在其中加入:
PATH="/home/jdk1.4.0/bin:$PATH"
CLASSPATH=.:/home/jdk1.4.0/jre/lib/rt.jar:/home/jdk1.4.0/lib/tools.jar
JAVA_HOME=/home/jdk1.4.0
export PATH CLASSPATH JAVA_HOME
2.設定好了我們的工作環境後,讓我們來看一看我們的HelloWorld程序吧。
public Class HelloWorld {
public void HelloWorld(){
//構造函數
}
public static void main ( String args[] )
{
system.out.println ("HelloWorld!");
}
}
上面的程序有三處錯誤,看到了麼?不要笑哦,這種錯誤確實會發生的。下面是把它改正過後的代碼:
public class HelloWorld {
public HelloWorld(){
//構造函數
}
public static void main ( String args[] )
{
System.out.println ("HelloWorld!");
}
}
class和System的大小寫,這個問題雖然一般不會出現,但大小寫問題在整個java世界裏確實是值得重視的一個基本問題,所以我把它寫出來個大家提個醒,只要大家不用爲這樣的錯誤費時費力,大可認爲我只是爲了博您一笑。構造函數本來對HelloWorld來說是可有可無的,但是我有意添加這個構造函數,原因有兩個:第一,構造函數沒有返回值,大家都知道,就算是初學大概也會對此很不屑,1+1=2還拿出來幹嘛。但是確實有很多初學者會返回一個void,void也是一種返回值,這個概念就是我的第一個目的了,有些初學者會認爲void就是沒有返回值,錯!!!第二,你應該爲你的類編寫默認構造函數,就算他什麼也不做,只起到和系統給你的默認構造函數一樣的作用。當你不編寫默認構造函數的時候,系統會給你一個,但是前提是你這個類裏沒有任何構造函數。忽略這個問題,可能會讓你的繼承體系出現問題。(可能這裏說這些太早,所以教材上不會說,但這些東西,總是先記住的好,免得載大跟頭)。(順便說一句構造函數也可以是protected和private的,不是一定要public,別怪我蘑記^^。確實有很多人認爲構造函數一定要public的,錯!!!)。
3程序沒問題,環境變量沒問題,還是會出問題:)看看我們的執行要注意什麼吧
不帶包的編譯:
javac 類名.java
java 類名
不帶包的編譯只要注意大小寫,一般應該不會有問題了。
javac HelloWorld.java 不要寫成 javac helloworld.java
java HelloWorld 不要寫成java HelloWorld.class
另外,一般此時大家的工作目錄和HelloWorld.java所在目錄是相同的,這就是最開始環境變量”.”的作用了。
帶包的編譯:
javac -d 包的父目錄 類名.java
java 包名.類名
這裏要注意的是大家的工作目錄要與包的父目錄所在目錄相同。
還有另外一個問題,大家先看一下問題的提出(跟HelloWorld關係雖然不大,但是問題也很有代表性)
我的包如下:
package c05;
public class PackagedClass{
public PackagedClass(){
System.out.println("Creating a packaged class");
}
public static void main(String[] args){}
}
程序如下:
//package c05;
import c05.PackagedClass;//如果換成import c05.*;就報錯
public class Foreign{
public static void main(String[] args){
PackagedClass pc = new PackagedClass();
}
}
PackagedClass不是c05的子包阿,就是一個類阿,爲什麼用* 不行那?
這是論壇裏一個朋友的問題。很鬱悶吧:)
這裏因爲要import c05.PackagedClass;的類和c05.PackagedClass;在同一個目錄內,就會出現上
面的問題,兩個類不要放同一個地方了,赫赫,大家自己解決吧^^.希望這篇文章會對初學的你有
所幫助,如果你遇到過跟”HelloWorld”有關的問題這裏沒有提及,也希望幫忙填補一下:)。
By 笑着 b[email protected]