《转》JAVA5.0新特性

一、自动封箱和自动解箱技术

1、          自动封箱技术:编译器会自动将简单类型转换成封装类型。

2、          编译器会自动将封装类型转换成简单类型

3、          注:自动封箱和自动解箱只会在必要的情况下执行。

 

二、静态引用概念:

      如:import static java.lang.System.*;

           out.println(“a”);

 

三、新型for循环for—each,用于追求数组与集合的遍历方式统一

1、          数组举例:

String[]  ss  =  {“a”,”b”,”c”};

for(String  s : ss){  // s:遍历元素类型 ss:要遍历的对象

                       System.out.println(s);

}

2、          集合举例:

List  ll  =  new       ArrayList();

  for(Object  o : ll ){

         System.out.println(o);

}

注:凡是实现了java.lang.Iterable接口的类就能用for—each遍历;

 

四、可变长的参数

一个关于变长参数的例子:

/**********************************************************/

import static java.lang.System.*;

public class TestVararg {

   public static void main(String... args){

      m();

      m("Liucy");

      m("Liucy","Hiloo");

   }

   static void m(String... s){

//s可以看作是一个字符串数组String[] s

      out.println("m(String...)");

   }

   static void m(){

      out.println("m()");

   }

   static void m(String s){

      out.println("m(String)");

   }

}

/**********************************************************/

注:一个方法的参数列表中最多只能有一个变长参数,而且这个变长参数必须是最后一个参数。方法调用时只会在必要时去匹配变长参数。

 

五、枚举enum

1、           定义:枚举是一个具有特定值的类型,对用户来说只能任取其一。对于面向对象来说时一个类的对象已经创建好,用户不能新生枚举对象,只能选择一个已经生成的对象。

2、           枚举本质上也是一个类。枚举值之间用逗号分开,以分号结束。

3、           枚举分为两种:类型安全的枚举模式和类型不安全的枚举模式

4、           枚举的超类是:Java.lang.Enum。枚举的构造方法默认也必须是private并且枚举是一个final类所以不能有子类。

5、           一个枚举值实际上是一个公开静态的常量,也是这个类的一个对象。

6、           枚举中可以定义抽象方法,其实现在个个枚举值中(匿名内部类的方式隐含继承)

/**********************************************************/

final class Season1{

   public static final Season1 SPRING=new Season1("春");

   public static final Season1 SUMMER=new Season1("夏");

   public static final Season1 AUTUMN=new Season1("秋");

   public static final Season1 WINTER=new Season1("冬");

   private Season1(){}

   String name;

   private Season1(String name){

      this.name=name;

   }

   public String getName(){

      return this.name;

   }

}

/**********************************************************/

/**********************************************************/

enum Season2{

   SPRING("春"),

   SUMMER("夏"),

   AUTUMN("秋"),

   WINTER("冬");

   String name;

   Season2(String name){

      this.name=name;

   }

   public String getName(){

      return this.name;

   }

}

/**********************************************************/

 

7、           一个关于枚举的例子

 

/**********************************************************/

import static java.lang.System.*;

public class TestTeacher {

   public static void main(String[] args) {

      for(TarenaTeacher t:TarenaTeacher.values()){

        t.teach();

      }

   }

}

 

enum TarenaTeacher{

   LIUCY("liuchunyang"){

void teach(){out.println(name+" teach UC");}},

   CHENZQ("chenzongquan"){

void teach(){out.println(name+" teach C++");}},

   HAIGE("wanghaige"){

void teach(){out.println(name+" teach OOAD");}};

   String name;

   TarenaTeacher(String name){

      this.name=name;

   }

   abstract void teach();

}

/**********************************************************/

 

六、泛型

1、          为了解决类型安全的集合问题引入了泛型。

泛型是一个编译时语法。

2、          List<String>  l  =  new  ArrayList<String>();

<String>:表示该集合中只能存放String类型对象。

3、          使用了泛型技术的集合在编译时会有类型检查,不再需要强制类型转换。String str  =  l.get(2);

注:一个集合所允许的类型就是这个泛型的类型或这个泛型的子类型。

4、      List<Object>  l  =  new  ArrayList<Integer>×

                            必须类型一致,泛型没有多态

5、      泛型的通配符<?>

           泛型的通配符表示该集合可以存放任意类型的对象。

           static void print( Cllection<?> c ){

                            for( Object o : c )

                                          out.println(o);

              }

6、        带范围的泛型通配符

              (1)、向下匹配:<?  extends  Number>

                      表示该集合元素可以为Number类型及其子类型(包括接口)

              (2)、向上匹配:<?  super  Number>

                      表示该集合元素可以为Number类型及其父类型

(3)、接口实现:<? extends Comparable>

      表示该集合元素可以为实现了Comparable接口的类

7、        泛型方法

在返回值与修饰符之间可以定义一个泛型方法

Public static <T> void copy(T[] array,Stack<T> sta){……}

              public static <T,E extends T> void copy (T[] array,Stack<E> sta){…..}

              public static <T extends Number&Comparable>

void copy(List<T> list,T[] t);

8、           不能使用泛型的情况:

(1)、带泛型的类不能成为Throwable类和Exception类的子类

                因为cathc()中不能出现泛型。

(2)、不能用泛型来new一个对象

                如:T t = new T();

(3)、静态方法不能使用类的泛型,因为静态方法中没有对象的概念。

9、           在使用接口的时候指明泛型。

class Student  implements  Comparable<Student>{…….}

 

10、      泛型类

Class MyClass<T>{

         public void m1(T t){

         }

     public T m2(){

                return null;

         }

}

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/codestiny/archive/2008/08/01/2751723.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值