JDK 5.0新特性
2009-10-15 14:32
288 查看
JDK5.0新特性中主要包含以下方面:
1.泛型(Generics) 2.增强的for 循环 3.自动装包与自动拆包
4.枚举(Enum) 5.静态导入(static import) 6.可变参数
7.Printf格式输出 8.IO流输入(Scanner) 9.注解(Annotation) 注解是非常重要的一个新特性
-------------
使用泛型的意义是: 放进去之后(set()方法),再取出来(get()方法),就不用再进行类型转换了
下面举一个例子:
package com.test.jdk;
//这个表示泛型类型通配声明
@SuppressWarnings("unchecked")
public class GenericTest<T> {
private T foo;
public T getFoo() { return foo; }
public void setFoo(T foo) { this.foo = foo; }
public static void main(String[] args) {
GenericTest<? extends List> ge = null; //这里ge是一个引用,也就是内存中一块地址,它不是对象
ge = new GenericTest<ArrayList>(); //此时 ge 是一个对象
ge = new GenericTest<LinkedList>();
GenericTest<? super List> ge2 = null; //这里super 表示List的上一层
ge2 = new GenericTest<Object>();
GenericTest<String> ge3 = new GenericTest<String>();
ge3.setFoo("hello world");
GenericTest<?> ge4 = ge3; //将ge3赋给ge4,这个问号表示ge4可以指向任何的Object类型的对象
System.out.println(ge4.getFoo()); //取得
ge4.setFoo(null); //移除
System.out.println(ge4.getFoo());
//ge4.setFoo("welcome"); //这种写法编译都通不过,不能增加类型
} }
结果:输出 hello world ,null
GenericFoo<? extends List> foo = null;
这个问号表示只有GenericFoo后面的<>中的类符合 List 接口,才可以用 foo对象
简单的说,实例化类型持有者时,它必須是实现List的类别或其子类别,
要定义这样一个名称,您可以使用 ‘?’ 通配字元,并使用“extends”关键字限定类型持有者的型态
枚举:
枚举与类相似,但在定义枚举时,里面的实例是确定的,在声明后,不能再改变。
类可以有多个实例,可以通过 new 方法来产生
枚举可以看作是一种特殊的类,它也有构造方法,也可以在枚举里面定义属性,方法等
定义枚举本质上就是在定义一个类别,只不过很多细节由编译器完成了,所以在某些程度上,enum关键字的作用就像是class或interface
枚举的实例都是 public static final 类型
枚举的作用(这个非常重要):主要是确定里面的实例的数量和名字
注解Annotation:
JDK 注解共有7类:
Override, SuppressWarnings, Deprecated,Retention,Target,Documented,Inherited
注解(Annotation):是一种注释语法,用来对程序进行一些配置或操作
以下是JDK内置的三个Annotation
如@Override 重写
@SuppressWarnings("unused") 压制警告信息
@Deprecated 表示过时的方法,属于捣乱的注解
也可以自定义注解
Annotation的作用范围@Retention:
@SOURCE 表示在源代码范围内起作用 如@Override
@CLASS 表示在Class文件范围内起作用
@RUNTIME 表示在运行时起作用
如果要在代码中通过反射取得Annotation 中设置的属性,必须将范围设置为RUNTIME
设置Annotation使用位置: @Target
只能在Annotation中出现:public static final ElementType ANNOTATION_TYPE
只能在构造方法中出现: public static final ElementType CONSTRUCTOR
本地变量上使用: public static final ElementType LOCAL_VARIABLE
只能在方法上使用: public static final ElementType METHOD
在参数声明上使用: public static final ElementType PARAMETER
在包的声明上使用: public static final ElementType PACKAGE
只能在类或接口上使用: public static final ElementType TYPE
文档注释中出现Annotation: @Documented
继承类中同时继承Annotation:@Inherited
1.泛型(Generics) 2.增强的for 循环 3.自动装包与自动拆包
4.枚举(Enum) 5.静态导入(static import) 6.可变参数
7.Printf格式输出 8.IO流输入(Scanner) 9.注解(Annotation) 注解是非常重要的一个新特性
-------------
使用泛型的意义是: 放进去之后(set()方法),再取出来(get()方法),就不用再进行类型转换了
下面举一个例子:
package com.test.jdk;
//这个表示泛型类型通配声明
@SuppressWarnings("unchecked")
public class GenericTest<T> {
private T foo;
public T getFoo() { return foo; }
public void setFoo(T foo) { this.foo = foo; }
public static void main(String[] args) {
GenericTest<? extends List> ge = null; //这里ge是一个引用,也就是内存中一块地址,它不是对象
ge = new GenericTest<ArrayList>(); //此时 ge 是一个对象
ge = new GenericTest<LinkedList>();
GenericTest<? super List> ge2 = null; //这里super 表示List的上一层
ge2 = new GenericTest<Object>();
GenericTest<String> ge3 = new GenericTest<String>();
ge3.setFoo("hello world");
GenericTest<?> ge4 = ge3; //将ge3赋给ge4,这个问号表示ge4可以指向任何的Object类型的对象
System.out.println(ge4.getFoo()); //取得
ge4.setFoo(null); //移除
System.out.println(ge4.getFoo());
//ge4.setFoo("welcome"); //这种写法编译都通不过,不能增加类型
} }
结果:输出 hello world ,null
GenericFoo<? extends List> foo = null;
这个问号表示只有GenericFoo后面的<>中的类符合 List 接口,才可以用 foo对象
简单的说,实例化类型持有者时,它必須是实现List的类别或其子类别,
要定义这样一个名称,您可以使用 ‘?’ 通配字元,并使用“extends”关键字限定类型持有者的型态
枚举:
枚举与类相似,但在定义枚举时,里面的实例是确定的,在声明后,不能再改变。
类可以有多个实例,可以通过 new 方法来产生
枚举可以看作是一种特殊的类,它也有构造方法,也可以在枚举里面定义属性,方法等
定义枚举本质上就是在定义一个类别,只不过很多细节由编译器完成了,所以在某些程度上,enum关键字的作用就像是class或interface
枚举的实例都是 public static final 类型
枚举的作用(这个非常重要):主要是确定里面的实例的数量和名字
注解Annotation:
JDK 注解共有7类:
Override, SuppressWarnings, Deprecated,Retention,Target,Documented,Inherited
注解(Annotation):是一种注释语法,用来对程序进行一些配置或操作
以下是JDK内置的三个Annotation
如@Override 重写
@SuppressWarnings("unused") 压制警告信息
@Deprecated 表示过时的方法,属于捣乱的注解
也可以自定义注解
Annotation的作用范围@Retention:
@SOURCE 表示在源代码范围内起作用 如@Override
@CLASS 表示在Class文件范围内起作用
@RUNTIME 表示在运行时起作用
如果要在代码中通过反射取得Annotation 中设置的属性,必须将范围设置为RUNTIME
设置Annotation使用位置: @Target
只能在Annotation中出现:public static final ElementType ANNOTATION_TYPE
只能在构造方法中出现: public static final ElementType CONSTRUCTOR
本地变量上使用: public static final ElementType LOCAL_VARIABLE
只能在方法上使用: public static final ElementType METHOD
在参数声明上使用: public static final ElementType PARAMETER
在包的声明上使用: public static final ElementType PACKAGE
只能在类或接口上使用: public static final ElementType TYPE
文档注释中出现Annotation: @Documented
继承类中同时继承Annotation:@Inherited
相关文章推荐
- JDKjdk1.4、jdk5.0、JDK6.0、 JDK7.0、JDK8.0、JDK9.0(2016年发布) 新特性
- JDK 5.0特性
- <黑马程序员>java基础加强--JDK 5.0 新特性
- JDK5.0新特性:泛型浅析、通配符(?)
- 黑马程序员——JDK5.0新特性
- Java-JDK5.0的简单新特性(静态导入,可变参数,增强型for循环,自动拆装箱)
- 黑马程序员_java jdk5.0新特性和枚举的学习笔记
- (黑马程序员)JDK5.0新特性,高级for的使用
- JDK5.0新特性系列---11.2线程 任务执行架构
- JDK1.5(JDK5.0) 新特性
- java学习之JDK5.0特性
- 枚举 JDK5.0的新特性之一
- JDK5.0 新特性
- Atitit..jdk java 各版本新特性 1.0 1.1 1.2 1.3 1.4 1.5(5.0) 1.6(6.0) 7.0 8.0 9.0 attilax 大总结
- JDK 5.0 新特性
- Java学习笔记22 jdk5.0新特性
- [学习笔记]jdk5.0新增特性
- 注解(Annotation,JDK5.0新特性)
- JDK5.0新特性系列---11.3线程 锁Lock
- Java基础和JDK5.0新特性