JDK 5.0新特性

来源:互联网 发布:怎样解析域名 编辑:程序博客网 时间:2024/05/01 06:06

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

原创粉丝点击