JDK1.5新特性
"JDK1.5"的一個重要主題就是通過新增一些特性來簡化開發,這些特性包括:泛型,for-each 循環, 自動裝箱/拆箱,枚舉,可變參數, 靜態導入,註解, 格式化輸出。使用這些特性有助於我們編寫更加清晰,精悍,安全的代碼。
JDK1.5新特性之泛型(Generic)
泛型只是編譯時的概念。供編譯器進行語法檢查時用的。目的是努力將運行時異常轉換爲編譯時錯誤,解決模板編程問題。示例如下:import java.util.Date;
/**
* JDK1.5新特性驗證
* 泛型
*
* @author cKF61853
* @version 1.0, 2012-11-25
*/
public class Demo
{
public static <T> T create(Class<T> cls)
{
try
{
return cls.newInstance();
}
catch (InstantiationException e)
{
e.printStackTrace();
}
catch (IllegalAccessException e)
{
e.printStackTrace();
}
return null;
}
public static void main(String[] args)
{
Date d = Demo.create(Date.class);
System.out.println(d);
StringBuffer str = Demo.create(StringBuffer.class);
System.out.println(str.getClass().getName());
}
}
//控制檯輸出Fri Nov 30 16:33:49 CST 2012
java.lang.StringBuffer
JDK1.5新特性之增強for循環(Enhanced "for" loop)
遍歷數組或者集合中的元素,減少編程量。示例如下:public static void main(String[] args)
{
Collection<String> c = new ArrayList<String>();
c.add("aa");
c.add("bb");
for (String str : c)
{
System.out.println(str);
}
}
//控制檯輸出aa
bb
JDK1.5新特性之自動拆箱/裝箱(Automatic boxing/unboxing)
Integer i = new Integer(2);
//i自動拆箱爲int類型
System.out.println(i == 2);
//3自動裝箱爲Integer類型
System.out.println(i.equals(3));
JDK1.5新特性之可變參數(Variable parameters)
方法的參數是不固定的我們一般會使用重載或者使用數組參數。重載需要些更多寫更多的方法,數組需要在使用時先聲明。可變參數是一個不錯的解決方案。示例如下:
public static void main(String[] args)
{
VariableDemo vd = new VariableDemo();
vd.speak("悟空", "人和妖精都是媽生的,");
vd.speak("悟空", "人和妖精都是媽生的,", "妖是妖他媽生的,", "N...", 123456);
}
public void speak(String name, Object... arguments)
{
System.out.print(name + ": ");
for (Object object : arguments)
{
System.out.print(object);
}
System.out.println();
}
//控制檯輸出悟空: 人和妖精都是媽生的,
悟空: 不同的人是人他媽生的,妖是妖他媽生的,N ...123456
JDK1.5新特性之註解(Annotation)
jdk1.5以後,系統提供單個 annotation
@Override 用來說明一個方法是覆寫方法,並檢查其是否符合覆寫規則。
@Deprecated 用來說明某個類或者方法已經不建議使用,提供警告信息。
@SuppressWarnings(value) 用來壓制某個警告信息。
JDK1.5新特性之枚舉(Enumerate)
當每一類型可取值範圍是有限的時候,可以使用枚舉,例如每個學生登記只能用ABCD表示,如果直接用E的話,那麼編譯不會出錯,但是卻不符合輸入要求,而使用枚舉增加程序的易讀性和健壯性。
JDK1.5新特性之格式化輸出(Formatted print)
C語言中printf()風格的格式化輸出。示例如下:
public static void main(String[] args)
{
int x = 5;
double y = 5.332542;
//The old way
System.out.println("Row 1: ["+x+" "+y+"]");
//The new way
System.out.format("Row 2: [%d %f]\n", x,y);
//or
System.out.printf("Row 3: [%d %f]\n", x, y);
}
JDK1.5新特性之靜態導入(Static import)
//靜態成員定義
package cn.j5newfeatures.staticimport;
/**
* JDK1.5新特性驗證
* 靜態導入
*
* @author cKF61853
* @version 1.0, 2012-2-9
*/
public class StaticImportInstance
{
public static final int A = 10;
public static final double B = 20.00;
public static final double C = 30.00;
public static double add (double one, double two)
{
return one + two;
}
public static double adder (double one, double two, int three)
{
return one + two + three;
}
public static void print(String str)
{
System.out.println("OMG:" + str);
}
}
//靜態成員調用
package cn.j5newfeatures.staticimport;
//此處部分是關鍵
import static cn.j5newfeatures.staticimport.StaticImportInstance.A;
import static cn.j5newfeatures.staticimport.StaticImportInstance.B;
import static cn.j5newfeatures.staticimport.StaticImportInstance.C;
import static cn.j5newfeatures.staticimport.StaticImportInstance.add;
import static cn.j5newfeatures.staticimport.StaticImportInstance.adder;
import static cn.j5newfeatures.staticimport.StaticImportInstance.print;
/**
* JDK1.5新特性驗證
* 靜態導入測試
*
* @author cKF61853
*/
public class TestStaticImport
{
public static void main(String[] args)
{
print("A的值是" + A);
print("B的值是" + B);
print("C的值是" + C);
System.out.println(add(A, B));
System.out.println(adder(B, C, A));
print("靜態導入測試...");
}
}
//控制檯輸出OMG:C的值是30.0
30.0
60.0
OMG:靜態導入測試...