第十章 開發java
10.1 使用javac和java命令數組
考試目標7.1 給定一段代碼示例和一個場景,編寫代碼,使用恰當的訪問修飾符、包聲明和導入語句,與示例中的代碼交互(經過訪問或繼承)。spa
考試目標7.2 給定類的一個示例和一個命令行,肯定指望的運行時行爲。命令行
考試目標7.5 給定類的一個徹底限定名稱,該類在JAR文件的內部和/或外部部署,爲該類構造適當的目錄結構。給定一個代碼示例和一個類路徑,肯定類路徑是否容許代碼成功地編譯。code
10.1.1 用javac編譯blog
考試要求掌握的是 javac [options] [source files]繼承
用-d選項編譯,能夠改變類文件的目標位置.開發
例如部署
myProjectget
|
|--source
| |
| |--com
| |
| |--javaeye
| |
| |--HelloJava.java
|
|--classes
| |
| |--com
| |
| |--javaeye
| |
| |--(HelloJava.class goes here)
若是你在source目錄中編譯HelloJava.java,並想將結果文件HelloJava.class放入class/com/javaeye目錄,則命令以下:
javac -d ../classes com/javaeye/HelloJava.java
其中../classes是編譯將要開始的位置,這個目錄必須是已經存在的,不然會出現編譯錯誤;後面的com/javaeye/目錄若是不存在,會自動建立.
10.1.2 用java命令啓動應用程序
java [options] class [args]
class文件寫.class擴展名
例如: java -DmyProp=myValue HelloJava x 1
意思是:建立名爲myProp的系統屬性(必須緊跟D,不能有空格),並將其值設置爲myValue.而後,啓動名爲HelloJava.class的文件,並向它發送兩個String變元,其值爲x和1.
使用系統屬性
java.util.Properties類
Properties p = System.getProperties(); //得到系統屬性
p.setProperty("key","value"); //添加屬性
p.list(System.out) //打印到系統控制檯上
處理命令行變元
public static void main(String[] args) ,args就是命令行變元數組.也能夠寫成String...args
10.1.3 查找其它類
聲明並使用類路徑
UNIX -classpath /com/foo/acct : /com/foo
WINDOWS -classpath \com\foo\acct ; \com\foo
-classpath簡寫爲-cp
包與查找
在package和import中使用的路徑是絕對路徑.
相對路性與絕對路徑
10.2 JAR文件
考試目標7.5 給定類的一個徹底限定名稱,該類在JAR文件的內部和/或外部部署,爲該類構造適當的目錄結構。給定一個代碼示例和一個類路徑,肯定類路徑是否容許代碼成功地編譯。
10.2.1 JAR文件與查找
建立jar文件: jar -cf MyJar.jar myApp 將myApp下的全部文件打到MyJar.jar中
查看jar中的文件: jar -tf MyJar.jar
jar命令會自動建立META-INF目錄,並在它裏面創建MANIFEST.MF文件.
編譯一個jar包中的.java文件: javac -cp jar包的相對路徑 java文件
10.3 使用靜態導入
考試目標7.1 給定一段代碼示例和一個場景,編寫代碼,使用恰當的訪問修飾符、包聲明和導入語句,與示例中的代碼交互(經過訪問或繼承)。
10.3.1 靜態導入
注意:只能是import static,而不能是static import. 對於有相同常量名,方法名的類型要慎用靜態導入,編譯器分不清楚你到底想用哪個.
public class TestStatic { public static void main(String[] args) { System.out.println(Integer.MAX_VALUE); System.out.println(Integer.toHexString(42)); } } //使用靜態導入以後,變成這樣 import static java.lang.System.out; import static java.lang.Integer.*; public class TestStatic { public static void main(String[] args) { out.println(MAX_VALUE); out.println(toHexString(42)); } }