SlideShare a Scribd company logo
主讲人     张龙



All Rights Reserved
• 教学目标
 – 掌握jdk5.0中出现的新特性
  •   泛型(Generics)
  •   增强的“for”循环(Enhanced For loop)
  •   自动装箱/自动拆箱(Autoboxing/unboxing)
  •   类型安全的枚举(Type safe enums)
  •   静态导入(Static import)
  •   可变参数(Var args)
• 泛型是JDK1.5中一个最重要的特征。通过
  引入泛型,我们将获得编译时类型的安全
  和运行时更小地抛出
  ClassCastExceptions的可能。
• 在JDK1.5中,你可以声明一个集合将接收
  /返回的对象的类型
• 参见程序 BooleanFoo.java
• 参见程序 IntegerFoo.java
• 类别定义时的逻辑完全一样,只是里面成
  员变量的类型不同
• 如果需要多个相似的类,需要定义多个文
  件,不同的只是变量的类别,而逻辑是完
  全一样的
• 对之前代码的一些改写
• 参见程序 ObjectFoo.java
•   参见程序   GenericFoo.java
•   参见程序   Generic.java
•   参见程序   Generic2.java
•   参见程序   SimpleCollection.java
•   参见程序   WrapperFoo.java
• 如果使用泛型,只要代码在编译时没有出
  现警告,就不会遇到运行时
  ClassCastException
• 在定义泛型类别时,预设可以使用任何的类
  型来实例化泛型类型中的类型,但是如果想
  要限制使用泛型类别时,只能用某个特定类
  型或者是其子类型才能实例化该类型时,可
  以在定义类型时,使用extends关键字指定
  这个类型必须是继承某个类,或者实现某个
  接口
• 参见程序 ListGenericFoo.java
• 当没有指定泛型继承的类型或接口时,默认
  使用T extends Object,所以默认情况下任
  何类型都可以作为参数传入
• public class GenericFoo<T>
  {
     private T foo;

      public void setFoo(T foo)
      {
             this.foo = foo;
      }

      public T getFoo()
      {
              return foo;
      }
  }
• GenericFoo<Integer> foo1 =
  null;
  GenericFoo<Boolean> foo2 =
  null;
• 那么 foo1 就只接受
  GenericFoo<Integer>的实例,而foo2
  只接受GenericFoo<Boolean>的实例。
• 現在您有這麼一個需求,您希望有一個參考名称
  foo可以接受所有下面的实例
• foo = new GenericFoo<ArrayList>();
  foo = new GenericFoo<LinkedList>();
• 简单的说,实例化类型持有者时,它必須是实现
  List的类别或其子类别,要定义这样一个名称,
  您可以使用 ‘?’ 通配字元,并使用“extends”
  关键字限定类型持有者的型态
• GenericFoo<? extends List> foo
  = null;
  foo = new
  GenericFoo<ArrayList>();
  foo = new
  GenericFoo<LinkedList>();
• 参见程序 GenericTest.java
• 使用<?>或是<? extends SomeClass>
  的声明方式,意味著您只能通过该名称來
  取得所参考实例的信息,或者是移除某些
  信息,但不能增加它的信息,因为只知
  道当中放置的是SomeClass的子类,但不
  确定是什么类的实例,编译器不让您加入
  信息,理由是,如果可以加入信息的話,
  那么您就得記得取回的实例是什么类型,
  然后转换为原來的类型方可进行操作,这
  就失去了使用泛型的意义。
•   参见程序   Parent.java
•   参见程序   Child.java
•   参见程序   ParentInterface.java
•   参见程序   ChildClass.java
• For-Each循环的加入简化了集合的遍历
• 其語法如下
 – for(type element : array) {
       System.out.println(element)....
   }

• 参见程序 ForTest.java
• 自动装箱/拆箱大大方便了基本类型数据和
  它们包装类的使用。
• 自动装箱:基本类型自动转为包装类.(int
  >> Integer)
• 自动拆箱:包装类自动转为基本类型
  .(Integer >> int)
• 参见程序 BoxTest.java
• 参见程序 Frequency.java
• 参加程序 BoxTest2.java
• JDK1.5加入了一个全新类型的“类”-枚举类型。为此
  JDK1.5引入了一个新关键字enum. 我们可以这样来定
  义一个枚举类型
• public enum Color
  {
        Red,
        White,
        Blue
  }

• 然后可以这样来使用Color   myColor   = Color.Red.
• 枚举类型还提供了两个有用的静态方法
  values()和valueOf(). 我们可以很方便
  地使用它们,例如
• for (Color c : Color.values())

 System.out.println(c);
• 参见程序 EnumTest.java
• 参见程序 Coin.java
• 定义枚举类型时本质上就是在定义一個类
  别,只不过很多细节由编译器帮您完成了
  ,所以某些程度上,enum关键字的作用就
  像是class或interface。
• 当您使用“enum”定义 枚举类型时,
  实质上您定义出來的类型继承自
  java.lang.Enum 类型,而每个枚举
  的成员其实就是您定义的枚举类型的
  一個实例(Instance),他们都被预
  设为 final,所以您无法改变他们,他
  们也是 static 成員,所以您可以通过
  类型名称直接使用他们,当然最重要
  的,它們都是公开的(public)。
• 枚举的比较
 – 参见程序 ShowEnum.java
• 枚举的顺序
 – 参见程序 ShowEnum2.java
• 枚举的方法
 – 参见程序 ShowEnum3.java
• EnumSet的名称说明了其作用,它是在
  J2SE 5.0后加入的新类别,可以协助您建
  立枚举值的集合,它提供了一系列的静态
  方法,可以让您指定不同的集合建立方式
• 参见程序 EnumSetDemo.java
• 参见程序 EnumSetDemo2.java
• 参见程序 EnumSetDemo3.java
• EnumMap是个专为枚举类型设计的类别,
  方便您使用枚举类型及Map对象
• 参见程序 EnumMapDemo.java
• 与单纯的使用HashMap比较起來的差別是
  ,在上面的程序中,EnumMap將根据枚
  举的順序來维护对象的排列顺序
• 参见程序 EnumMapDemo2.java
 – 从遍访的结果可以看出,对象的順序是根据枚
   举順序來排列的。
• 要使用静态成员(方法和变量)我们必须
  给出提供这个静态成员的类。使用静态导
  入可以使被导入类的所有静态变量和静态
  方法在当前类直接可见,使用这些静态成
  员无需再给出他们的类名
• 参见程序 Common.java
• 参见程序 StaticImport.java
• 参见程序 StaticImport2.java
• 不过,过度使用这个特性也会
  一定程度上降低代码的可读性
• 可变参数使程序员可以声明一个接受可变
  数目参数的方法。注意,可变参数必须是
  方法声明中的最后一个参数
• 参见程序 TestVarargs.java

More Related Content

PDF
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行API
PPT
Java SE 8 技術手冊第 5 章 - 物件封裝
PDF
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
PDF
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出
PDF
Java SE 7 技術手冊投影片第 12 章 - 通用API
PPTX
2, object oriented programming
PDF
Java SE 7 技術手冊第二章草稿 - 從 JDK 到 IDE
PPTX
12, string
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行API
Java SE 8 技術手冊第 5 章 - 物件封裝
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出
Java SE 7 技術手冊投影片第 12 章 - 通用API
2, object oriented programming
Java SE 7 技術手冊第二章草稿 - 從 JDK 到 IDE
12, string

What's hot (20)

PPT
Java SE 8 技術手冊第 18 章 - 自訂泛型、列舉與標註
PDF
Java SE 7 技術手冊投影片第 16 章 - 自訂泛型、列舉與標註
PDF
Java SE 7 技術手冊投影片第 04 章 - 認識物件
PDF
從模組到類別
PPT
Java SE 8 技術手冊第 11 章 - 執行緒與並行API
PPT
Java SE 8 技術手冊第 15 章 - 通用API
PDF
5. 從模組到類別
PDF
《Python 3.5 技術手冊》第六章草稿
PPT
Java SE 8 技術手冊第 14 章 - NIO 與 NIO2
PPT
Java SE 8 技術手冊第 4 章 - 認識物件
PPT
Java SE 8 技術手冊第 12 章 - Lambda
PPT
Java SE 8 技術手冊第 2 章 - 從JDK到IDE
PPTX
從模組到類別
PDF
Java SE 7 技術手冊投影片第 06 章 - 繼承與多型
PDF
Java SE 7 技術手冊投影片第 09 章 - Collection與Map
PPT
Java SE 8 技術手冊第 10 章 - 輸入輸出
PPTX
5. 建構式、原型與類別
PDF
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
PPTX
流程語法與函式
PPTX
資料永續與交換
Java SE 8 技術手冊第 18 章 - 自訂泛型、列舉與標註
Java SE 7 技術手冊投影片第 16 章 - 自訂泛型、列舉與標註
Java SE 7 技術手冊投影片第 04 章 - 認識物件
從模組到類別
Java SE 8 技術手冊第 11 章 - 執行緒與並行API
Java SE 8 技術手冊第 15 章 - 通用API
5. 從模組到類別
《Python 3.5 技術手冊》第六章草稿
Java SE 8 技術手冊第 14 章 - NIO 與 NIO2
Java SE 8 技術手冊第 4 章 - 認識物件
Java SE 8 技術手冊第 12 章 - Lambda
Java SE 8 技術手冊第 2 章 - 從JDK到IDE
從模組到類別
Java SE 7 技術手冊投影片第 06 章 - 繼承與多型
Java SE 7 技術手冊投影片第 09 章 - Collection與Map
Java SE 8 技術手冊第 10 章 - 輸入輸出
5. 建構式、原型與類別
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
流程語法與函式
資料永續與交換
Ad

Viewers also liked (12)

PPTX
2009 bia agm presentation
PPT
Constitution day
KEY
Lester Allen Designer
ODP
Prezentácia: Diplomový seminár 3
PPTX
2011 bia agm presentation
PPTX
2010 bia agm presentation
PDF
[圣思园][Java SE]Java se lesson 1
PPTX
2014 bia agm powerpoint
PPTX
2012 bia agm powerpoint
PDF
Why Infrastructure matters?!
PPT
2013 bia expansionmay6
PPT
2013 bia agm powerpoint
2009 bia agm presentation
Constitution day
Lester Allen Designer
Prezentácia: Diplomový seminár 3
2011 bia agm presentation
2010 bia agm presentation
[圣思园][Java SE]Java se lesson 1
2014 bia agm powerpoint
2012 bia agm powerpoint
Why Infrastructure matters?!
2013 bia expansionmay6
2013 bia agm powerpoint
Ad

Similar to [圣思园][Java SE]Jdk5 (10)

PDF
DOC
泛型总结
PDF
[圣思园][Java SE]Reflection
PPT
PPTX
5, initialization & cleanup
PDF
[圣思园][Java SE]Java se lesson 3
PPT
3 hibernate映射元素和类型
DOC
应聘Java笔试时可能出现问题及其答案
PDF
Java Jdk6学习笔记[Ppt]
DOC
Java面试笔试题大汇总
泛型总结
[圣思园][Java SE]Reflection
5, initialization & cleanup
[圣思园][Java SE]Java se lesson 3
3 hibernate映射元素和类型
应聘Java笔试时可能出现问题及其答案
Java Jdk6学习笔记[Ppt]
Java面试笔试题大汇总

More from ArBing Xie (20)

PDF
[圣思园][Java SE]Swing
PDF
[圣思园][Java SE]Java se lesson 15
PDF
[圣思园][Java SE]Websphere.application.developer(wsad)使用外置win cvs解决方案
PDF
[圣思园][Java SE]Strategy
PDF
[圣思园][Java SE]Ooad与uml lesson 2
PDF
[圣思园][Java SE]Observer
PDF
[圣思园][Java SE]Network
PDF
[圣思园][Java SE]Java se lesson 22
PDF
[圣思园][Java SE]Java se lesson 21
PDF
[圣思园][Java SE]Java se lesson 20
PDF
[圣思园][Java SE]Java se lesson 17
PDF
[圣思园][Java SE]Java se lesson 16
PDF
[圣思园][Java SE]Java se lesson 13
PDF
[圣思园][Java SE]Java se lesson 12
PDF
[圣思园][Java SE]Java se lesson 11
PDF
[圣思园][Java SE]Java se lesson 10
PDF
[圣思园][Java SE]Java se lesson 9
PDF
[圣思园][Java SE]Java se lesson 8
PDF
[圣思园][Java SE]Java se lesson 5
PDF
[圣思园][Java SE]Java se lesson 4
[圣思园][Java SE]Swing
[圣思园][Java SE]Java se lesson 15
[圣思园][Java SE]Websphere.application.developer(wsad)使用外置win cvs解决方案
[圣思园][Java SE]Strategy
[圣思园][Java SE]Ooad与uml lesson 2
[圣思园][Java SE]Observer
[圣思园][Java SE]Network
[圣思园][Java SE]Java se lesson 22
[圣思园][Java SE]Java se lesson 21
[圣思园][Java SE]Java se lesson 20
[圣思园][Java SE]Java se lesson 17
[圣思园][Java SE]Java se lesson 16
[圣思园][Java SE]Java se lesson 13
[圣思园][Java SE]Java se lesson 12
[圣思园][Java SE]Java se lesson 11
[圣思园][Java SE]Java se lesson 10
[圣思园][Java SE]Java se lesson 9
[圣思园][Java SE]Java se lesson 8
[圣思园][Java SE]Java se lesson 5
[圣思园][Java SE]Java se lesson 4

[圣思园][Java SE]Jdk5