使用java和javac命令的幾種情況:
1、單獨的一個java主程序;
2、帶包的一個java主程序;
3、同一個包的兩個類,一個引用另一個;
4、引用不同包的其它類。
1、單獨的一個java主程序
public class Joeytang{
public static void main(String[] args) {
System.out.println("I am JoeyTang.");
}
}
將命令行到該java文件同一目錄;直接輸入命令javac Joeytang.java則會在當前的文件夾下出現(xiàn)Joeytang.class類文件。如果想指定編譯的同時將編譯好的類文件放到一個文件夾下則可以使用-d指定路徑。例如javac -d .\ Joeytang.java則是在當前目錄下,javac -d ..\ Joeytang.java 在上一個文件夾,javac -d ..\ a Joeytang.java則是在上一個文件夾下的a文件夾下,但是一定要保證指定的文件路徑存在。運行該類文件,首先保證該類是具有main方法的類。然后編譯完以后,使用java -classpath .; Joeytang就可以運行了。我開始沒有加-classpath選項,老是提示說找不到類。所以一定要記住在這里加入該選項。具體該選項的作用是說在運行時調(diào)用了外部的類或者包時在這里注明,即如果使用了a.jar則要加上-classpath .;a.jar其中前面的那個“.;”我理解成是把環(huán)境變量中配置的jar文件拿進來。
2、帶包的一個java主程序
pakage my.friends
public class Joeytang{
public static void main(String[] args){
System.out.println("I am JoeyTang.");
}
}
這里面將Joeytang放到了my.friends包里面在編譯的時候進入到Joeytang.java同一目錄,使用和上面一樣的javac命令,這時候會在同一目錄創(chuàng)建類文件,但是如果想讓編譯的時候?qū)慕Y(jié)構(gòu)也創(chuàng)建出來則可以使用-d選項,javac -d .\ Joeytang.java,這時候會在當前目錄下自動根據(jù)包的結(jié)構(gòu)形式創(chuàng)建文件目錄,即創(chuàng)建my/friends/文件件,并將編譯好的類文件放在friends文件夾下。運行的時候使用java my.friends.Joeytang來運行。
3、同一個包的兩個類Joeytang.java文件為
pakage my.friends
public class Joeytang{
public String toString(){
return "Joey";
}
}
Sunnylu.java文件為
pakage my.friends
public class Sunnylu{
public static void main(String[] args){
Joeytang joey = new Joeytang();
//System.out.println("I am Sunney."+joey.toString()+" is my friend.");
System.out.println("I am Sunney."+joey+" is my friend.");
}
}
這種情況中Sunnylu類引用了Joeytang所以必須先編譯Joeytang按照第二種情況將Joeytang編譯,此時開始編譯Sunnylu,注意要使用javac -classpath .; -d .\ Sunnylu.java,此時加入了-classpath選項,我也不知道為什么,但是如果不加編譯老是提示找不到Jeoytang這個。編譯完以后,來運行Sunnylu也要加入-classpath選項,java -classpath .; my.friends.Sunnylu
4、引用不同包的其它類
Tom.java文件為
package my.partners;
public class Tom{
public String toString(){
return "It's Tom";
}
}
Sunnylu.java文件為
pakage my.friends
import my.partners.Tom;
public class Sunnylu{
public static void main(String[] args) {
System.out.println( "I am Sunny.");
Tom tom = new Tom();
System.out.println(tom + " is my partner.");
Joeytang joey = new Joeytang();
System.out.println(joey + " is my friends.");
}
}
這種情況首先把Joeytang編譯了,然后編譯Tom類,因為Tom為外部類所以在編譯Sunnylu的時候一定要在-classpath注明Tom的路徑例如如果我把Tom類編譯到當前目錄的上一級目錄上去了,則編譯Sunnylu時使用javac -classpath .;..\ -d .\ Jerry.java,此時編譯時會到上一目錄按照Tom的包結(jié)構(gòu)來找Tom類。運行時一樣要加入這個選項。
××××××××××××××××××××××××××××××××××××××××××
Exception in thread "main" java.lang.NoClassDefFoundError
程序:
public class TEST{
public static void main (String args[]){
System.out.println("HELLO THIS iS A JAVA PROCEDURE");
}
}
在命令提示符下
D:java>javac TEST.java
正常
D:java>java TEST
出現(xiàn)下面問題:Exception in thread "main" java.lang.NoClassDefFoundError: TEST
解決:
Exception in thread "main" java.lang.NoClassDefFoundError: Hello
這個錯誤的原因就是:java解釋器找不到你自己定義的類HelloWorld
假如Hello.class在D盤D:\java目錄下, java.exe在C:\Java\jdk1.5.0_02\bin目錄下
有兩種解決辦法:
1. 在命令行模式下敲入
c:>C:\Java\jdk1.5.0_02\bin\java -classpath D:\java Hello
注意, 在HelloWorld前面有一個空格.
2. 在命令行模式下輸入
c:>set classpath=D:\java
c:>C:\Java\jdk1.5.0_02\bin\java Hello
以上兩種方法的本質(zhì)都是設定正確的classpath, 使得java
能夠找到你自己定義的類.