java基础(十二)jdk1.5 新特性

 

jdk5.0中出现的新特性 

• 泛型(Generics)  

• 增强的“for”循环(Enhanced For loop)  

• 自动装箱/自动拆箱(Autoboxing/unboxing)  

• 类型安全的枚举(Type safe enums)  

• 静态导入(Static import)  

• 可变参数(Var args)  

 

(一)泛型

 

泛型是JDK1.5中一个最重要的特征。通过引入泛型,我们将获得编译时类型的安全和运行时更小地抛出ClassCastExceptions的可能。

1) 简单泛型类的定义

 

public class Pair<T> {
	private T first;
	private T second;
	
	public Pair()
	{
		first = null;
		second = null;
	}
	public Pair(T first, T second) 
	{
		this.first = first;
		this.second = second;
	}
	public T getFirst() {
		return first;
	}
	public void setFirst(T first) {
		this.first = first;
	}
	public T getSecond() {
		return second;
	}
	public void setSecond(T second) {
		this.second = second;
	}
}

 Pair类引入了一个类型变量T,用<>括起来,并放在类名的后面。泛型类可以有多个类型变量。例如:

 

public class Pair<T,U>{}

类定义中的类型变量指定方法的返回类型以及域和局部变量的类型。

在java库中,使用变量E表示集合的元素类型,K和V分别表示表的关键字与值的类型。T表示任意类型。

2)泛型方法

 

public class ArrayAlg {

	public static <T> T getMiddle(T[] a)
	{
		return a[a.length /2];
	}
}

 3) 限制泛型可用类型

 

 

在定义泛型类别时,预设可以使用任何的类型来实例化泛型类型中的类型,但是如果想要限制使用泛型类别时,只能用某个特定类型或者是其子类型才能实例化该类型时,可以在定义类型时,使用extends关键字指定这个类型必须是继承某个类,或者实现某个接口

public static <T extends Comparable> T min(T[] a)

 

当没有指定泛型继承的类型或接口时,默认使用T extends Object,所以默认情况下任何类型都可以作为参数传入

4)通配符类型

 

現在您有這麼一個需求,您希望有一個參考名称foo可以接受所有下面的实例 

foo = new GenericFoo<ArrayList>(); 

foo = new GenericFoo<LinkedList>(); 

简单的说,实例化类型持有者时,它必須是实现List的类别或其子类别,要定义这样一个名称,您可以使用 ‘?’ 通配字元,并使用“extends”关键字限定类型持有者的型态 

 

GenericFoo<? extends List> foo = null;

 

使用<?>或是<? extends SomeClass>的声明方式,意味著您只能通过该名称來取得所参考实例的信息,或者是移除某些信息,但不能增加它的信息,因为只知道当中放置的是SomeClass的子类,但不确定是什么类的实例,编译器不让您加入信息,理由是,如果可以加入信息的話,那么您就得記得取回的实例是什么类型,

然后转换为原來的类型方可进行操作,这就失去了使用泛型的意义。

 

 

 

(二)For-Each循环

 

for(type element : array) { 

   System.out.println(element).... 

}

 

 

 

(三)自动装箱/拆箱

自动装箱/拆箱大大方便了基本类型数据和它们包装类的使用。 

自动装箱:基本类型自动转为包装类.(int >>  Integer) 

自动拆箱:包装类自动转为基本类型.(Integer  >>  int) 

Integer 类有一个缓存,它会缓存介于-128~127之间的整数。

 

(四)枚举

JDK1.5加入了一个全新类型的“类”-枚举类型。为此 JDK1.5引入了一个新关键字enum.  我们可以这样来定 义一个枚举类型  

 

public  enum  Color 

    Red, 

    White, 

    Blue 

 

 

然后可以这样来使用Color  myColor  =  Color.Red. 

 

枚举类型还提供了两个有用的静态方法values()和valueOf().

 

当您使用“enum”定义 枚举类型时,实质上您定义出來的类型继承自 java.lang.Enum 类型,而每个枚举

的成员其实就是您定义的枚举类型的一個实例(Instance),他们都被预设为 final,所以您无法改变他们,他

们也是 static 成員,所以您可以通过类型名称直接使用他们,当然最重要的,它們都是公开的(public)。 

 

 

 

(五)静态导入

 

要使用静态成员(方法和变量)我们必须给出提供这个静态成员的类。使用静态导入可以使被导入类的所有静态变量和静态

方法在当前类直接可见,使用这些静态成员无需再给出他们的类名

 

a)  import static com.shengsiyuan.common.Common.Age; 

b)  import static com.shengsiyuan.common.Common.output; 

 

(六)可变参数

可变参数使程序员可以声明一个接受可变数目参数的方法。注意,可变参数必须是方法声明中的最后一个参数  

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值