黑马程序员--高新技术(1)jdk1.5后的新特性

时间:2022-11-28 19:41:28

http://edu.csdn.net/heima android培训 http://edu.csdn.net/heima ; java培训期待与您交流!

高新技术—jdk1.5后的新特性

自动装箱和自动拆箱:

       自动装箱:基本类型自动转为包装类.(int >> Integer)

       自动拆箱:包装类自动转为基本类型.(Integer >> int)

       享元模式flyweight:对于小的数据,因为使用频率比较高,所以会将小的数据进缓存,不需要每次都创建对象。-128~127内的数据会被缓存。

增强for循环:jdk1.5以后出现的新特性。

       jdk1.5Collection有了一个父接口Iterable

       该接口封装了iterator方法,同时提供了一个新的语句。foreach语句。

       格式:for(type变量名:集合变量名){...}

       只能循环数组或实现了Iterable接口的集合类。(数组和Collection集合)

       局限性:只能用于循环。

       代码示例:遍历一个数组。

       public static void printArray(){

              int[] arr = {12,24,53,23,14,53,42};

              for(int i : arr){

                     System.out.println(i);

              }

       }
可变参数:jdk1.5的新特性。

       只能出现在参数列表的最后。

       ...位于变量类型和变量名之间。

       调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组

       的形式访问可变参数。
静态导入:jdk1.5有自动拆箱和装箱后才有,但是不常用。

       impor static静态导入,可以导入一个类中的某个静态方法或所有静态方法。

       import可以导入一个类或者某个包中的所有类。

枚举Enum

1、什么是枚举?

枚举是一个特殊的类,这个枚举类中的每一个元素都是通过这个枚举类创建出来的一个对象。

2、为什么要有枚举:

    枚举就是要让某类型的变量的取值则只能为若干个固定值中的一个,否则,编译器会报错。

    枚举可以让编译器在编译时控制源程序中填写的非法值。(普通变量在开发阶段无法实现)。

3、定义一个Weekday的类来模拟枚举的功能:

    1、似有化构造方法。

    2、每个元素分别用一个公有的静态成员来表示。

    3、可以有若干个公有方法或抽象方法。

枚举代码演示:

模拟一个枚举类。模拟星期。

package cn.itcast.day1;

//使用WeekDay模拟枚举。

publicabstractclass WeekDay1 {

    //似有化构造方法。

    private WeekDay1(){}

    //成员为公有和静态的WeekDay2的子类。内部类。

    publicfinalstatic WeekDay1SUN=new WeekDay1(){

       public WeekDay1 nextDay(){

           returnMON;

       }

    };

    publicfinalstatic WeekDay1MON =new WeekDay1(){

       public WeekDay1 nextDay(){

           returnSUN;

       }

    };

    //方法为抽象的。

    publicabstract WeekDay1 nextDay();

    public String toString(){

      

       returnthis==SUN?"SUN":"MON";

    }

}

定义一个星期枚举:

//定义一个枚举,枚举用enum来定义。

publicenum WeekDay {

    SUN(1),MON(),TUE,WEO,THT,FRI,SAT;

    private WeekDay(){System.out.println("first");}

    private WeekDay(int day){System.out.println("second");}

}

 

带有抽象方法的枚举:

package cn.itcast.day1;

//定义一个交通灯的枚举。

publicenum Lamp {

    //红灯

    RED(30){

       public Lamp nextLamp(){

           returnGREEN;

       }

    },

    //绿灯

    GREEN(20){

       public Lamp nextLamp(){

           returnYELLOW;

       }

    },

    //黄灯

    YELLOW(40){

       public Lamp nextLamp(){

           returnRED;

       }

    };

    privateinttime;

    private Lamp(int time){

       this.time = time;

    }

    //返回交通灯对象亮的时间。

    publicint getTime(){

       returntime;

    }

    publicabstract Lamp nextLamp();

}

 

注解

注解:是jdk1.5后的新特性。

1、什么是注解?

    注解是一个特殊的类,相当于一种标记,在程序中加上注解就等于为程序打上某种标记,以后,javac编译器,开发工具和其他程序可以用反射来了解你的类中各种元素有无何种标记,如果有标记就根据标记做相应的动作。标记可以加在包,类,字段,方法,方法参数以及局部变量上。

2Annotation注解类:api中提供了3个注解。

    interface deprecated 用这个注释的程序元素,不鼓励程序员使用,通常是因为它危险或者有更好的存在。

    interface Override 表示一个方法声明打算重写超类中的另一个方法。

    interface SuppressWarning 指示在注释元素中取消指定的编译器警告。

3、注解的使用:

注解就相当于一个你的源程序中要调用的一个类,要在源程序中应用某个注解,得先准备好了这个注解类,就像要调用某个类得先开发好这个类。一个注解是一个类,而使用注解就是创建了类的对象。

黑马程序员--高新技术(1)jdk1.5后的新特性

4、注解的声明周期:分别对应:java源文件-->class文件-->内存中的字节码。默认是在class阶段。

5、元注解:就是使用在注解上的注解。

元注解:@Rtention用在注解类上,说明这个注解的生命周期。

@Retention(RetetionPolicy.SOURCE)

@Retention(RetetionPolicy.CLASS)

@Retention(RetetionPolicy.RUNTIME)// RetetionPolicy是一个枚举,这个枚举有三个取值。

 

元注解:@Target指示注释类型所适用的程序元素的种类。

例:@Target(ElementType.TYPE)说明这个枚举只能用在类上。

Enum ElementType也是一个枚举,这个枚举有8个取值,需要使用的时候在到api去查。

 

为注解添加属性

@TestAnnotation(color="red",value="abc",arrayAttr=1) //当数组只有一个元素时可以不写{}
@TestAnnotation("abc") //当属性值只有特殊属性value可以这样写

注解属性的返回值类型可以是

String类型,Class类型,8个基本类型,数组类型,枚举类型,注释类型等。

 

代码演示:

//写一个程序检查这个类上是否有ItcastAnnotation这个注解

@ItcastAnnotation("abc")

publicclass AnnotationTest {

    //让开发工具不要提示我方法过时了。

    @SuppressWarnings("deprecation")

    //为该注解的属性设值。

    @ItcastAnnotation(color="red",value="xyz",array=1,annotationAttr=@MataAnnotation("lhm"))

    publicstaticvoid main(String[] args)throws Exception {

       //TODO Auto-generated method stub

       System.runFinalizersOnExit(true);

       //检查ItcastAnnotation这个注解在不在,如果在就获取这个注解。   if(AnnotationTest.class.isAnnotationPresent(ItcastAnnotation.class)){

           ItcastAnnotation annotation = (ItcastAnnotation)AnnotationTest.class.getAnnotation(ItcastAnnotation.class);

           System.out.println(annotation);

           System.out.println(annotation.color());

           System.out.println(annotation.value());

           System.out.println(annotation.array().length);

           System.out.println(annotation.annotationAttr().value());

       }

      

    }

    @Deprecated//标注方法过时了。让用户尽量不要掉用这个方法。

    publicstaticvoidsayHello(){

       System.out.println("传智播客");

      

    }

}

 

 

自定义注解代码演示:

//@Retention元注解,说明@interface注解的声命周期保存到运行时期。

@Retention(RetentionPolicy.RUNTIME)

//@Target元注解,说明@interface注解,可以定义在类上,也可以在方法上。

@Target({ElementType.METHOD,ElementType.TYPE})

//自定义注解。

public@interfaceItcastAnnotation {

    //为注解添加属性。有一个特殊属性value,设值的时候可以不用=号。

    String color() default"blue";//color属性的默认值是blue.

    String value();

    int[] array()default {23,5,2};

    MataAnnotation annotationAttr()default@MataAnnotation("zxx");

}

 

http://edu.csdn.net/heima android培训 http://edu.csdn.net/heima ; java培训期待与您交流!详细请查看http://edu.csdn.net/heima