成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JDK1.5中新的語言特征淺析

開發 后端
在JDK1.5中新的語言特征有哪些呢?具體都是什么特點呢,那么這篇JDK1.5中新的語言特征淺析將會給你解答。

本文中,我們將討論幾個在JDK1.5中新的語言特征,包括:

在JDK1.5中泛型(Generics)--為集合(collections)提供編譯時類型安全,無需每刻從Collections取得一個對象就進行強制轉換(cast)

在JDK1.5中增強的“for”循環(Enhanced For lOOp)--減少迭代器(iterator)的潛在錯誤(error-proneness)

在JDK1.5中自動置入/自動取出(Autoboxing/unboxing)--無需在基本類型(primitive types)(例如double)和包裝類型(wrapper types)(例如Double)之間人工地進行轉換。

在JDK1.5中類型安全的枚舉(Typesafeenums)--提供類型安全枚舉模式的各項好處。

在JDK1.5中靜態導入(Static import)--無需在使用其他類的靜態成員變量前綴其類名.這將使得代碼更為簡潔。

在JDK1.5中元數據(Metadata)--使編程人員避免編寫樣板化代碼(boiler plate code),并提供機會進行宣告式程式設計(declarative programming)。

讓我們詳細討論每個新特性,并看一些例子。

◆泛型(Generics)

泛型是JDK1.5中一個最“酷”的特征。通過引入泛型,我們將獲得編譯時類型的安全和運行時更小地拋出ClassCastExceptions的可能。在JDK1.5中,你可以聲明一個集合將接收/返回的對象的類型。在JDK1.4中,創建雇員名字的清單(List)需要一個集合對象,像下面的語句:

List listOfEmployeeName = new ArrayList();

在JDK1.5中,你將使用下面語句

  1. List<String> listOfEmployeeName = new ArrayList<String>(); 

最“酷”的是,如果你試圖插入非string類型的值,你將在編譯時發現并且修正這類問題。沒有泛型,你會發現這樣一個bug,當你的客戶調用后會告訴你,你所編寫的程序拋出ClassCastException異常而崩潰。

另外,當你從集合中得到一個元素時你無需進行強制轉換。故原先為:

  1. String employeeName = ((String) listOfEmployee.get(i)); 

而下面的語句將比上面的更加簡單:

  1. String employeeName = listOfEmployee.get(i); 

不清楚對象的類型而強制轉換對象是不合理的,并且更重要的是,它將在運行時失敗。假使用戶無意間傳入一個包含string buffers類型而非string類型的集合,那結果會怎樣呢。在Listing A中,客戶被要求傳入一個編譯器無法強制的strings類型集合。Listing B中顯示了同樣的方法使用泛型是如何實現的。

Listing A

  1. staticbOOleancheckName(Collection employeeNameList, String name) {  
  2.  
  3.  for (Iteratori = employeeNamList.iterator(); i.hasNext(); ) {  
  4.  
  5. String s = (String) i.next();  
  6.  
  7. if(s.equals(name)){  
  8.  
  9.  return true;  
  10.  
  11. //print employee name here ......  
  12.  
  13. }  
  14.  
  15. }  
  16.  
  17. return false;  
  18.  

Listing B

  1. staticbooleancheckName(Collection<String> employeeNameList, String name) {  
  2.  
  3. for (Iteratori = employeeNamList.iterator(); i.hasNext(); ) {  
  4.  
  5.  if(i.next().equals(name)){  
  6.  
  7.  return true;  
  8.  
  9.  //print employee name here ......  
  10.  
  11.  }  
  12.  
  13.  }  
  14.  
  15. return false;  
  16.  

現在,通過方法簽名可以清楚知道輸入集合必須只能包含strings。如果客戶試圖傳入一個包含string buffers的集合,程序將不會編譯。同時注意,該方法不包含任何強制轉換。它只需要短短一行,一旦你習慣泛型后,它也更加清晰。

在jdk當前版本下的For循環語法如下:

  1. void printAll(Collection c) {  
  2.   for (Iteratori = c.iterator(); i.hasNext(); ) {  
  3.   Employee emp = (Employee)i.next();  
  4.   System.out.println(emp.getName());  
  5.   }  

◆用增強的For語句實現相同方法:

  1. voidprintAll(Collection c) {  
  2.   for (Object o : c)  
  3.   System.out.println((TimerTask)o).getName());  

在這類For循環中,你應該將":"看成"in",所以,在該例中可以看成"for Object o in c"。你可以發現這種For循環更具可讀性。

◆在JDK1.5中自動置入/自動取出(Autoboxing/unboxing)

Java有基本數據類型,在這些基本數據類型周圍又有包裝類。通常,編程人員需要將一種類型轉換成另一種。看看Listing C.中的代碼片斷。

Listing C

  1. public class Employee {  
  2.  
  3. private static final Integer CHILD = new Integer(0);  
  4.  
  5. public static void main(String args[]) {  
  6.  
  7. //code for adding n to an Integer  
  8.  
  9. int n=10;  
  10. Integer agenew Integer(30);  
  11.  
  12. Integer ageAfterTenYearnew Integer(age.intValue +10);  
  13. }  

請注意,用于計算ageAfterTenYear的內循環代碼看上去是多么雜亂。現在,在Listing D.中看看相同的程序使用autoboxing重寫后的樣子。

Listing D

  1. public class Employee {  
  2.  
  3.   public static void main(String args[]) {  
  4.  
  5.  int n=10;  
  6.  
  7.  Integer agenew Integer(30);  
  8.  
  9.  Integer ageageAfterTenYear= age +10;  
  10.  
  11.   }  
  12.  

有一件事值得注意的:在先前,如果你取出(unbox)Null值,它將變為0。在次代碼中,編譯器將自動地轉換Integer為int然后加上10,接著將其轉換回Integer.。

◆在JDK1.5中類型安全的枚舉(Typesafeenums)

類型安全枚舉提供下列特性:

他們提供編譯時類型安全。

他們都是對象,因此你不需要將他們放入集合中。

他們作為一種類的實現,因此你可以添加一些方法。

他們為枚舉類型提供了合適的命名空間。

他們打印的值具有情報性(informative)— 如果你打印一個整數枚舉(intenum),你只是看見一個數字,它可能并不具有情報性。

例一:

  1. enum Season { winter, spring, summer, fall } 

例二:

  1. public enum Coin {  
  2.   penny(1), nickel(5), dime(10), quarter(25);  
  3.  
  4.   Coin(int value) { this.value = value; }  
  5.  
  6.   private final int value;  
  7.  
  8.   public int value() { return value; }  

◆在JDK1.5中靜態導入(Static import)

靜態導入使代碼更易讀。通常,你要使用定義在另一個類中的常量(constAnts),像這樣:

  1. importorg.yyy.pkg.Increment;  
  2.  
  3. class Employee {  
  4.   public Double calculateSalary(Double salary{  
  5.  return salary + Increment.INCREMENT * salary;  
  6.   }  

當時使用靜態導入,我們無需為常量名前綴類名就能使用這些常量,像這樣:

  1. import static org.yyy.pkg.Increment;  
  2.  
  3. class Employee {  
  4.   public Double calculateSalary(Double salary{  
  5.   return salary + INCREMENT * salary;  
  6.   }  

注意,我們可以調用INCREMENT這一常量而不要使用類名Increment.。

◆元數據(Metadata)

元數據特征志于使開發者們借助廠商提供的工具可以進行更簡易的開發。看一看Listing E.中的代碼。

Listing E

  1. importorg.yyy.hr;  
  2.  
  3. public interface EmployeeI extends java.rmi.Remote {  
  4.  
  5.   public String getName()  
  6.  
  7.   throwsjava.rmi.RemoteException;  
  8.  
  9.   public String getLocation ()  
  10.  
  11.   throwsjava.rmi.RemoteException;  
  12.  
  13. }  
  14.  
  15. public class EmployeeImpl implements EmployeeI {  
  16.  
  17.   public String getName(){  
  18.   }  
  19.  
  20.   public String getLocation (){  
  21.   }  

通過元數據的支持,你可以改寫Listing E中的代碼為:

  1. importorg.yyy.hr;  
  2.  
  3. public class Employee {  
  4.   @Remote public String getName() {  
  5.   ...  
  6.   }  
  7.   @Remote public public String getLocation() {  
  8.   ...  
  9.   }  

正像你所看到的,所有樣板化的代碼都不見了。

在JDK1.5中這些新特性和規格說明將實現。它將提供Java編程社區更多的選擇以編寫魯棒的、可擴展的代碼。認真的Java編程人員將感到著手去熟悉這一Java編程語言的新版本是很有益的。希望這些對于JDK1.5特性的信息對你在編程時起到引導作用。

【編輯推薦】

  1. Java 7新特性展望 語言本身的改變會很少
  2. Java垃圾回收機制淺析
  3. 關于Java繼承的一些復習
  4. Java中兩個特殊變量this和super 的使用
  5. 3.6.3 this關鍵字和構造方法的調用
責任編輯:仲衡 來源: diyjava
相關推薦

2009-07-07 18:06:14

JDK1.5枚舉類型

2009-07-08 16:02:49

JDK1.5String

2009-07-08 18:06:39

JDK1.5系統性能監測

2010-02-23 14:35:48

CentOS vsft

2022-05-25 07:22:07

ES12JavaScript語言

2009-07-07 17:56:00

JDK1.5封箱及拆箱

2009-07-08 14:06:22

ClassLoaderJDK源碼

2011-01-21 15:02:14

jQuerywebJavaScript

2009-07-08 15:31:40

JDK 6.0web service

2021-05-21 09:34:40

React React 17前端

2009-07-09 14:57:56

Java Consol

2009-06-29 15:23:00

2009-07-08 17:59:51

JDK JRE

2009-07-01 17:30:14

樣式生成器Visual Stud

2010-05-17 15:55:18

JavaEE6數據源

2009-07-09 16:29:19

JDK版本

2010-06-22 11:07:42

JDK 7Java開發Java

2009-07-07 16:39:40

JDK Observe

2009-07-08 12:53:29

JDK源碼Java.lang.B

2009-07-09 11:02:37

JDK5.0內置工具
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 高清色视频 | 91激情视频 | 国产精品乱码一二三区的特点 | 草草草影院 | 欧美精品国产一区二区 | 亚洲国产精品99久久久久久久久 | 久草免费在线视频 | 嫩草视频入口 | 最新av在线播放 | 久久国产精品视频 | 亚洲精品久久国产高清情趣图文 | 日韩精品久久一区二区三区 | 操夜夜| 国产欧美一区二区精品久导航 | 日韩成人精品一区二区三区 | 久久久久国产一区二区三区四区 | 在线欧美小视频 | 精品国产乱码久久久久久图片 | 美女久久 | 久久久久久久久一区 | 狠狠骚| 国产999精品久久久 日本视频一区二区三区 | 国产精品成人一区二区 | 日本xx视频免费观看 | 国产一区二区三区 | 一区二区三区不卡视频 | 国产无套一区二区三区久久 | 国产午夜精品一区二区三区嫩草 | 99热在线免费 | 国产精品日韩一区二区 | 国产精品久久久久久久久久久免费看 | 日本电影网站 | 麻豆va | 在线一区视频 | 91亚洲国产成人久久精品网站 | 日本一区二区三区在线观看 | 成人久久久 | 精品国产乱码久久久久久88av | 性一区 | 色婷婷精品国产一区二区三区 | 国产精品a久久久久 |