JDK1.5 泛型之外的其它新特性

JDK1.5泛型之外的其它新特性,泛型相关看这里
  
For-Each循环
For-Each循环得加入简化了集合的遍历。假设我们要遍历一个集合对其中的元素进行一些处理。典型的代码为:

1 ExpandedBlockStart.gif ContractedBlock.gif class  Bean dot.gif {
2 ExpandedSubBlockStart.gifContractedSubBlock.gif  public   void  run() dot.gif {
3 InBlock.gif  // dot.gif.
4 ExpandedSubBlockEnd.gif  }

5 ExpandedBlockEnd.gif}

6 None.gif

 

 1 None.gif ArrayList list  =   new  ArrayList();
 2 None.giflist.add( new  Bean());
 3 None.giflist.add( new  Bean());
 4 None.giflist.add( new  Bean());
 5 None.gif
 6 ExpandedBlockStart.gifContractedBlock.gif for (Iterator ie = list.iterator(); list.hasNext();) dot.gif {
 7 InBlock.gif Bean bean  =  (Bean)ie.next();
 8 InBlock.gif bean.run();
 9 InBlock.gif 
10 ExpandedBlockEnd.gif}

11 None.gif
12 None.gif

使用For-Each循环,配合泛型,我们可以把代码改写成,

 1 None.gif ArrayList < Bean >  list  =   new  ArrayList < Bean > ();
 2 None.giflist.add( new  Bean());
 3 None.giflist.add( new  Bean());
 4 None.giflist.add( new  Bean());
 5 None.gif
 6 ExpandedBlockStart.gifContractedBlock.gif for (Bean bean : list ) dot.gif {
 7 InBlock.gif bean.run();
 8 ExpandedBlockEnd.gif}

 9 None.gif
10 None.gif

这段代码要比上面清晰些,少写些,并且避免了强制类型转换。
  
  
2.枚举(Enums)
JDK1.5加入了一个全新类型的“类”-枚举类型。为此JDK1.5引入了一个新关键字enmu.
我们可以这样来定义一个枚举类型。
public enum Color{
    Red,
    White,
    Blue
}
然后可以这样来使用Color myColor = Color.Red.
枚举类型还提供了两个有用的静态方法values()和valueOf(). 我们可以很方便地使用它们,例如
for(Color c : Color.values())
   System.out.println(c);  

6.静态导入(Static Imports)
要使用用静态成员(方法和变量)我们必须给出提供这个方法的类。使用静态导入可以使被导入类的所有静
态变量和静态方法在当前类直接可见,使用这些静态成员无需再给出他们的类名。
import static java.lang.Math.*;
r = round(); //无需再写r = Math.round();
不过,过度使用这个特性也会一定程度上降低代码地可读性

5.可变参数(Varargs)
可变参数使程序员可以声明一个接受可变数目参数的方法。注意,可变参数必须是函数声明中的最后一个参数。
假设我们要写一个简单的方法打印一些对象

例如:我们要实现一个函数,把所有参数中最大的打印出来,如果没有参数就打印一句话。
需求:
prtMax();
prtMax(1);
prtMax(1,2);
prtMax(1,2,3);
......
prtMax(1,2,3...n);
以前的实现方式:

 1 ExpandedBlockStart.gif ContractedBlock.gif prtMax() dot.gif {
 2 InBlock.gif System.out.println( " no parameter " );
 3 ExpandedBlockEnd.gif}

 4 ExpandedBlockStart.gifContractedBlock.gifprtMax( int  a) dot.gif {
 5 InBlock.gif System.out.println(a);
 6 ExpandedBlockEnd.gif}

 7 ExpandedBlockStart.gifContractedBlock.gifprtMax( int  a, int  b) dot.gif {
 8 ExpandedSubBlockStart.gifContractedSubBlock.gif  if (a > b) dot.gif {
 9 InBlock.gif  System.out.println(a);
10 ExpandedSubBlockStart.gifContractedSubBlock.gif }
else dot.gif {
11 InBlock.gif  System.out.println(b);
12 ExpandedSubBlockEnd.gif }

13 ExpandedBlockEnd.gif}

14 None.gifdot.gifdot.gif
15 None.gif

我们发先写多少个都不够,子子孙孙无穷尽也
改造一下,在上边的基础上,再加上
prtMax(int a,int b,int[] c){
 //....比较最大的输出
 这样能实现了,但是要求使用的人必须要在输入前把数字做成int[]
}
看看现在使用新特性怎么实现:

 1 ExpandedBlockStart.gif ContractedBlock.gif prtMax( int  dot.gif nums) dot.gif {
 2 ExpandedSubBlockStart.gifContractedSubBlock.gif  if (nums.length == 0 ) dot.gif {
 3 InBlock.gif  System.out.println( " no parameter " );
 4 ExpandedSubBlockStart.gifContractedSubBlock.gif }
else dot.gif {
 5 InBlock.gif   int  maxNum  =   0 ;
 6 ExpandedSubBlockStart.gifContractedSubBlock.gif   for ( int  num :nums) dot.gif {
 7 ExpandedSubBlockStart.gifContractedSubBlock.gif    if (num  > maxNum) dot.gif {
 8 InBlock.gif    maxNum  =  num;
 9 ExpandedSubBlockEnd.gif   }

10 ExpandedSubBlockEnd.gif  }

11 InBlock.gif  System.out.println(maxNum);
12 ExpandedSubBlockEnd.gif }

13 ExpandedBlockEnd.gif}

14 None.gif

好了,无论多少个参数都可以了
prtMax();
prtMax(1);
prtMax(1,2);
prtMax(1,2,3,4,5,6,7,8, ....,n);

另外JDK1.5中可以像c中这样用了
String str="dd";
int k =2;
System.out.printf("str=%s k=%d",str,k);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值