熟悉Java的常用命令
面試例題11:使用jar命令。
請使用jar命令,將test文件夾壓縮成.jar文件,並簡述其壓縮包的結構。
考點:對於Java程序員來說,更多情況下是使用集成Java開發工具,例如JBuilder、Eclipse等,而對於最基本的Java編譯和常見的命令行工具往往都不熟悉,這個面試例題主要考查求職者對於Java命令行基本工具的使用,從而瞭解求職者對Java編程的熟悉程度。
出現頻率:★★★
解析
熟練的Java開發者應該掌握常用的Java命令行工具。求職者應該熟練掌握javac、java和jar等工具。
1.javac
javac是JDK的標準編譯工具,常見的形式爲:javac <選項> <源文件>。它可能的選項包括:
-g:生成所有調試信息。
-g:none:生成無調試信息。
-g:{lines,vars,source}:生成只有部分調試信息。
-nowarn:生成無警告。
-verbose:輸出關於編譯器正在做的信息。
-deprecation:輸出使用了不鼓勵使用的API的源程序位置。
-classpath <路徑>:指定用戶類文件的位置。
-sourcepath <路徑>:指定輸入源文件的位置。
-bootclasspath <路徑>:覆蓋自舉類文件的位置。
-extdirs <目錄(多個)>:覆蓋安裝的擴展類的位置。
-d <目錄>:指定輸出類文件的位置。
-encoding <編碼>:指定源文件中所用的字符集編碼。
-target <版本>:生成指定虛擬機版本的類文件。
常見的問題:在使用javac編譯.java源文件時找不到jar包,則需使用-classpath選項。例如:
javac -classpath .;jar01.jar;jar02.jar;……;jarN.jar class_name.java
使用-classpath選項,指定了在編譯Java源代碼時,用到類庫的位置。一般用於該類庫不在當前CLASSPATH的環境變量中。
2.java
java命令是JDK默認的java執行程序,在這裏值得注意的是在執行帶包的.class文件時,需要使用標準的Java包形式。例如:
java com.nsfc.hello
3.jar
隨着JDK安裝,在JDK安裝目錄下的bin目錄中存在一個可執行文件,Windows下文件名爲jar.exe,Linux下文件名爲jar。它的運行需要用到JDK安裝目錄下lib目錄中的tools.jar文件。jar命令行格式爲:
jar {ctxu}[vfm0M] [jar-文件] [manifest-文件] [-C 目錄] 文件名
其中{ctxu}是jar命令的子命令,每次jar命令只能包含一個子命令,這些子命令含義如下。
-c:創建新的JAR文件包。
-t:列出JAR文件包的內容列表。
-x:展開JAR文件包的指定文件或者所有文件。
-u:更新已存在的JAR文件包(添加文件到JAR文件包中)。
[vfm0M]中的選項可以任選,也可以不選,它們是jar命令的選項參數。
-v:生成具體報告並打印到標準輸出。
-f:指定JAR文件名,通常這個參數是必須的。
-m:指定需要包含的MANIFEST清單文件。
-0:只存儲,不壓縮,這樣產生的JAR文件包會比不用該參數產生的體積大,但速度更快。
-M:不產生所有項的清單(MANIFEST〕文件,此參數會忽略-m參數。
[jar-文件]:即需要生成、查看、更新或者解開的JAR文件包,它是-f參數的附屬參數。
[manifest-文件]:即MANIFEST清單文件,它是-m參數的附屬參數。
[-C 目錄]:表示轉到指定目錄下去執行這個jar命令的操作。它相當於先使用cd命令轉到該目錄下,再執行不帶-c參數的jar命令,它只能在創建和更新JAR文件包的時候使用。
文件名:指定一個文件/目錄列表,這些文件/目錄就是要添加到JAR文件包中的文件/目錄。假如指定了目錄,那麼jar命令打包的時候會自動把該目錄中的所有文件和子目錄打入包中。
使用JDK的jar命令打包,會自動在壓縮包中生成一個META-INF目錄,其中有一個MANIFEST.MF文件。
使用jar命令進行如下壓縮:
jar cf test.jar test
即將當前目錄下的test目錄所有文件壓縮到test.jar文件中,使用WinRaR軟件可以看到該壓縮文件的目錄結果如圖2.6所示。
(點擊查看大圖)圖2.6 jar壓縮文檔的結構
答案
可以使用"jar cf test.jar test"命令來完成壓縮。壓縮包中,包含一個test文件夾和一個META-INF文件夾,其中有一個MANIFEST.MF文件。
面試例題12:如何執行main()方法。
利用Java SDK中哪一條命令能夠執行test的main()方法?
(a)java test。
(b)javac test。
(c)java test.java。
(d)java test.class。
(e)java test.main。
考點:考查求職者對java命令的熟悉程度。
出現頻率:★★★
解析
求職者容易出現錯誤的是選擇了(d),實際上,java命令後面只需要class文件的名稱就可以,不用加入.class全名。如果使用java test.class命令,系統會認爲這是一個包的結構,會查找test.class.class文件。會出現如下異常信息:
Exception in thread "main" java.lang.NoClassDefaultError:test/class
提示找不到相應的類文件。
答案:(a)。
4.-Djava.ext.dirs
java命令引入jar時可以-cp參數,但時-cp不能用通配符(多個jar時什麼煩要一個個寫,不能*.jar),面通常的jar都在同一目錄,且多於1個。前些日子找到(發現)-Djava.ext.dirs太好。
如:
java -Djava.ext.dirs=lib MyClass
java -Djava.ext.dirs=d:\Work\eclipse_workspace\Test_Project\lib com.tangqiao.rpctest.ProtocalServer