您的位置:首页 > 编程语言 > Java开发

《转》JAVA5.0新特性

2009-12-13 23:03 405 查看
一、自动封箱和自动解箱技术

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: