java5的學習總結(ZT)
1 循環操作的增強
import java.util.*;
public class GenericArrayExample {
public static void main(String args[])
{
//Vector<Integer> vectorList[] = new Vector<Integer>[10];
//Vector<Integer> vectorList[] = new Vector<Integer>[];
//Vector vector[] = new Vector[10];
int sum = 0;
for ( int number: computeNumbers() )
sum += number;
System.out.println(sum);
Integer[] numbers = computeNumbers();
for (int i=0; i < numbers.length ; i++) {
if (i != 0) System.out.print(",");
System.out.print(numbers[i]);
}
}
private static Integer[] computeNumbers() {
// TODO Auto-generated method stub
return new Integer[]{new Integer(1),new Integer(2),new Integer(3)};
}
}
2注釋(Annotations)
注釋是可以添加到代碼中的修飾符,可以用于包聲明、類型聲明、構造函數、方法、字段、參數和變量。Tiger 包含內置注釋,還支持您自己編寫的定制注釋。
它的三種內置注釋:SuppressWarnings, Deprecated, and Override。
SuppressWarnings
這種注釋在類和方法級別阻止編譯器拋出的警告。有時你知道使用一些不被推薦使用的方法更好一些或者必須執行一些存在型別安全的靜態方法,如果使用這些方法將不斷地收到根本無關的事情的警告。SuppressWarnings能使編譯器不給您增添麻煩!
SupressWarnings 是具有變量的 — 所以您將單一注釋類型與該變量一起使用。可以以值數組來提供變量,其中每個值指明要阻止的一種特定警告類型。
@SuppressWarnings("deprecation")//使用不被推薦的方法
public static void selfDestruct() {
Thread.currentThread().stop();
}
@SuppressWarings("unchecked")
public void nonGenericsMethod() {
List wordList = new ArrayList(); // 沒有指明List中值的類型
wordList.add("foo"); // 可能引發異常
}
SuppressWarnings 中變量的值采用數組,使您可以在同一注釋中阻止多個警告。例如,
@SuppressWarnings("unchecked", "fallthrough") 使用兩個值的數組。此功能為處理
錯誤提供了非常靈活的方法,無需進行大量的工作。
Deprecated
Deprecated的用處不是很大。使用 Deprecated 來對不應再使用的方法進行注釋。大多數
情況下@Deprecated和javadoc同時使用。
public class DeprecatedClass {
@Deprecated public void doSomething() {
// 代碼
}
//替換doSomething()的方法,可能實現更好一點
public void doSomethingElse() {
// 代碼 }
}
如果通過覆蓋或調用來使用聲明為過時的方法,編譯器將處理注釋,發現不應該使用該
方法,并發出錯誤消息。
Override
Override 應該僅用于方法(不用于類、包聲明或其他構造)。它指明注釋的方法將覆蓋超
類中的方法。
@Override
public int hashCode() {
...
}
如果你將hashCode() 寫成hashcode() "C",編譯時不會出錯,只有在運行時才會報錯。
通過使用Override注釋,如果實際沒有執行重載編譯時就會報錯。Override注釋在父類方法改
變時也會發生效用。比如父類方法新增了一個參數或者方法改名了,那么子類編譯時就會出錯,就
不會令人很迷惑了。
3 Enumerations 枚舉
Enums很像public static final int聲明,它原來常被用于enum values。它比ints最大的優點在于它是類型安全的,你不能錯誤的用一種類型代替另一種類型的枚舉(Enums),不同于ints,他們對編譯器來說都是一樣的。
Enums只提供了一點點新增的功能。EnumMap 和 EnumSet這兩個工具類,是對Enums進行了特殊優化的標準集合(collection )類。如果你確定你的集合(collection )里只包含(Enums),你就可以使用這兩個經過優化的標準工具集合類來代替HashMap 或 HashSet。
在很多情況下,你的程序里可以用Enums代替public static final int。他們的功能是相當的,你也可以靜態引入Enums(那樣它的調用和對public static final int的調用是一致的)即使是在內置類或內置enum中。注意:在比較Enums時,他們的排列順序將代表他們的索引。
隱含的靜態方法
兩個靜態方法將會隱含在你寫的Enums聲明中。他們不會實現在java.lang.Enum中,因為他們在java.lang.Enum的子類中,而不是聲明在java.lang.Enum本身。
第一個方法values()返回Enums的所有制的一個值數組。
第二個方法valueOf()返回特定String對應的值,特定String必須精確的吻合。
方法
最令人興奮的就是每一個enums都可以有自己的方法。過去你可能書寫很多代碼對public static final int(代表特定的數據庫)執行switch 操作將其轉換為JDBC連接字符串。現在你可以直接使用enums的方法達到你的目的。
下面的例子DatabaseType enum有一個抽象方法,每個enum實例將會提供這個方法的實現。
public enum DatabaseType {
ORACLE {
public String getJdbcUrl() {...}
},
MYSQL {
public String getJdbcUrl() {...}
};
public abstract String getJdbcUrl();
}
現在你可以直接使用這個enum 提供的有效方法:
DatabaseType dbType = ...;
String jdbcURL = dbType.getJdbcUrl();
一些完整的代碼段:
EnumExample1.java
enum OperatingSystems {
windows, unix, linux, macintosh
}
public class EnumExample1 {
public static void main(String args[])
{
OperatingSystems os;
os = OperatingSystems.windows;
switch(os) {
case windows:
System.out.println("You chose Windows!");
break;
case unix:
System.out.println("You chose Unix!");
break;
case linux:
System.out.println("You chose Linux!");
break;
case macintosh:
System.out.println("You chose Macintosh!");
break;
default:
System.out.println("I don't know your OS.");
break;
}
}
}
EnumBitmapExample.java
enum ProgramFlags {
showErrors(0x01),
includeFileOutput(0x02),
useAlternateProcessor(0x04);
private int bit;
ProgramFlags(int bitNumber)
{
bit = bitNumber;
}
public int getBitNumber()
{
return(bit);
}
}
public class EnumBitmapExample {
public static void main(String args[])
{
ProgramFlags flag = ProgramFlags.showErrors;
System.out.println("Flag selected is: " +
flag.ordinal() +
" which is " +
flag.name());
}
}
posted on 2008-07-05 23:05 Dony 閱讀(157) 評論(0) 編輯 收藏 所屬分類: Java Basic