自動裝箱/拆箱 (Auto-Boxing/Unboxing)
沒有自動裝箱/拆箱:
int int1 = 1;
Integer integer2 = new Integer(int1);
int int3 = integer2.intValue();
有自動裝箱/拆箱:
int int1 = 1;
Integer integer2 = int1; // 自動裝箱
int int3 = integer2; // 自動拆箱
泛型 (Generic Types)
泛型就像是C++的模板。原有的Collection API加上泛型支援後,增加對型別的檢查,減 少程式錯誤的機會。
沒有泛型:
HashMap hm = new HashMap();
int i=1;
String tt="test";
hm.put(new Integer(i), tt);
使用Generic:
HashMap <Integer, String>hm = new HashMap<Integer, String> ();
int i=1;
String tt = "test";
hm.put(i, tt); // 在這裏對int自動裝箱成Integer,也使用了參數的型別檢查
自動裝箱的新功能,可能是從C#語言身上學習來的,Java 已經越來越像C#。然而Java對 自動裝箱/拆箱的支援,僅是利用編譯器實現,在Java Bytecode 中,並無自動裝箱/拆箱的 操作碼 (opcode)。
注釋 (Annotation)
Annotation全名是Program Annotation Facility ,是Java SE 5.0的新功能。Java 的 Annotation 類似於 .NET 的屬性 (Attribute)。Java 的注釋是一種接口 (interface),繼 承自 java.lang.annotation.Annotation。Class File 則貼上 ACC_ANNOTATION 標簽。
// JDK 1.4
/**
* @todo to be implemented
**/
void gimmeSomeLoving() {
throw new Exception("not implemented");
}
// JDK 1.5
@todo void gimmeSomeLoving() {
throw new Exception("not implemented");
}
枚舉類型 (enum)
枚舉類型也是J2SE 5.0的新功能。過去 Java 認為 enum 的關鍵字是不必要的功能,因為 用 public static int field 就可以取代 enum,因此過去一直不用。J2SE 5.0中的 class 如果是 enum,在 class file 中會被貼上一個 ACC_ENUM 標簽。
// JDK 1.4
class JavaTech {
public static final int J2ME = 1;
public static final int J2SE = 2;
public static final int J2EE = 3;
}
// JDK 1.5
public enum NewJavaTech {
J2ME, J2SE, J2EE
}
輸入輸出
試試用位於 java.io 包 (package) 內的BufferedReader。請緊記要 import java.io.*; 。尾部"*"是指示要 import 所有位於 java.io 內的類,。
import java.io.*;
public class TestRead{
public static void main(String[] args) throws IOException{
BufferedReader bufread = new BufferedReader(System.in);
String str;
System.out.print("請輸入一句字串");
str = bufread.readLine();
System.out.println(str);
}
}
程式碼解說: import java.io.* 是把整個包“打開”,那麼你便可以承繼該包的類,用 內裡的類創建一個物件。其實 java.io.* 是默認 import 的,不過 Eclipse 會要求 import java.io 所以功夫不可小!
public class TestRead 是宣告一個“公開”的 class(類別),而名字是TestRead 。
public static void main(String[] args) 是一個主程式。雖然是 Method ,但 main method 對於 Java 執行器來說是第一個執行程式的地方,同樣離開了 main method 就等如 離開了程式。main method 的宣告式是要背的,當然是有解,不過暫且不說。
BufferedReader bufread = new BufferedReader(System.in) 在此創建一個以 BufferedReader 為藍圖的物件 bufread ,bufread名字是任你定的。詳細來說是第一個 BufferedReader 是宣告 bufread 是一個會“存儲”一個BufferedReader類的物件。new BufferedReader(System.in) 是指創建一個 BufferedReader 的物件。由於BufferedReader 需要一個輸入流,因此我們指定了 System.in 給 BufferedReader。
應用程序開發接口
在Java語言中,應用程序接口(API)化身成類,並且分組成為包。每個包中包含有相關 的接口和類。對於不同的平台,Java提供了不同版本的包。
API的設定由升陽公司和其他公司通過JCP(Java社群程序)決定。任何公司和個人都可以 參與這個工程,對API進行設計。
2004年,IBM和BEA公司准備聯合對官方的Java開源軟件工程進行支持,但是2005年初,升 陽公司拒絕了這個支持。
Hello World
下面這個程序顯示“Hello, world!”然後結束運行:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, world!");
}
}
國際化
Java語言嚴格區分字節和字符。字符的存儲格式為UCS-2,從Java 5開始支持UTF-16字符 。Java的程序遂可以使用Unicode字符進行書寫。
下面就是一個合法的Java程序,裡面包含了中文字符作為類的名稱而不是字符串,這個程 序可以在編譯器中運行通過。
public class 哈囉世界 {
private string 文本 = "哈囉世界";
}