E:/>javac -X
-Xlint 啟用建議的警告
-Xlint:{all,deprecation,unchecked,fallthrough,path,serial,finally,-deprecat ion
,-unchecked,-fallthrough,-path,-serial,-finally}啟用或禁用特定的警告
-Xbootclasspath/p:<路徑> 置於引導類路徑之前
-Xbootclasspath/a:<路徑> 置於引導類路徑之後
-Xbootclasspath:<路徑> 覆蓋引導類檔案的位置
-Djava.ext.dirs=<目錄> 覆蓋安裝的擴充目錄的位置
-Djava.endorsed.dirs=<目錄> 覆蓋簽名的標準路徑的位置
-Xmaxerrs <編號> 設定要輸出的錯誤的最大數目
-Xmaxwarns <編號> 設定要輸出的警告的最大數目
-Xstdout <檔案名稱> 重新導向標準輸出
這些選項都是非標準選項,注意更新。。。
我們依次來看看其中涉及 lint 的選項:
-Xlint
啟用所有警告。該選項相當於 -Xlint:all 選項。相反,關閉所有警告的選項為 -Xlint:none。
-Xlint:unchecked
啟用對所謂的未經檢查的轉換(unchecked warning)的警告。這個警告涉及 JDK 5.0 中的新特性——範型(Generic
Type),這絕對是另外一個故事了。有興趣的話,可以在 Internet 上搜尋到很多關於範型的文章。
-Xlint:path
當發現不存在的路徑或者目錄時給出警告,比如標準選項中的類路徑(classpath),原始碼路徑(sourcepath)等等。
-Xlint:serial
當在可序列化的類中沒有發現 serialVersionUID 的定義時,給出警告。
Xlint:finally
當發現 finally 子句無法正常結束的情況時給出警告。比如下面這段代碼:
try {
} catch (Exception e) {
} finally {
for (;;);
}
-Xlint:fallthrough
當在 switch 語句塊中發現 fall-through 的情形時給出警告。這裡所說的 fall-through 情形指的是在
switch語句塊中,除了最後一個
case 之外的其它 case 中沒有包含 break 語句,導致執行代碼時從一個 case 直接穿過執行到了下一個 case 中。比如下面這段代碼:
switch (color) {
case GREEN:
System.out.println("green");
// 沒有 break 語句;fall-through
case RED:
System.out.println("red");
break;
case YELLOW:
System.out.println("yellow");
}
-Xlint:deprecation
顯示關於使用了過時的 API 的詳細資料。這個選項等同於一個我們熟悉的標準選項,即 -deprecation 選項。相對其它 lint
選項而言,該選項的特別之處在於,即使你關閉了它,編譯器仍然會簡單地提醒你某個類中使用了過時的 API。只是啟用該項警告時,顯示的資訊將更詳細而以。
上面提到的這些 lint 選項中的警告名稱(冒號後面的部分),可以加以組合,從而有選擇的開啟或者關閉特定的一組 lint 警告選項,比如
-Xlint:deprecation,
finally 表示開啟 deprecation 和 finally 警告。還可以在警告名稱前加上"-"表示關閉該項警告,比如
-Xlint:all,-unchecked 表示開啟除了 unchecked 之外的所有警告。
一個makefile簡單一實例:
# nash635
# RoboCup2009 DUT_rescue
src := $(wildcard *.java */*.java */*/*.java */*/*/*.java */*/*/*/*.java)
sucs := -d .
path := -classpath ./swt.jar
all:
javac -Xlint:all $(path) $(sucs) $(src)
.PHONY: clean
clean:
rm -f *.class */*.class */*/*.class */*/*/*.class */*/*/*/*.class
rm -f *~ */*~