------------ android培训、 java培训、java博客、java学习型技术博客、期待与您交流! -------------JDK5.0新特性 自动装箱/拆箱 自动装箱:指可以将基本数据类型直接付给对应的包装类 自动拆箱:指包装类对象直接赋给对应的基本数据类型 另:num值小于128的两个Integer引用相等(享元设计模式) 复用内存中已存在的对象,降低系统创建对象实例的性能消耗 增强for循环 for(变量类型 变量 :需迭代的数组或集合){} 范围:数组或实现iterable接口的集合类上 另:只适合获取数据,不能进行其它操作 静态导入 import static 包名.类名.静态属性|静态方法|* 用于简化程序对类静态属性和方法的调用 例如:import static java.lang.Math.*; 可变参数 即允许为方法定义长度可变的参数,操作时为便于理解,可直接把参数当数组看待 例: public void foo(int... args){} 注意:1、调用可变参数的方法时,编译器将自动创建一个数组保存传递给方法的可变参数 因此,方法体重可以以数组的形式访问可变参数 2、可变参数只能用于参数列表的最后,另一个方法最多只能由一个可变的参数 3、当数组装的是基本数据类型,可变参数的类型是引用类型,则直接把数组当做参数 枚举 特殊类,enum关键字用于定义枚举类,枚举类中的枚举值代表该类中的一个实例对象 应用:一些程序运行其需要的数据不能是任意的,而必须是一定范围内的值,则可用枚举类解决 另:1、枚举类中与普通类一样,可以定义构造函数(必须私有)、字段以及方法 2、switch语句,除接收int、byte、char、short外还可接受枚举类型 3、枚举类只有一个枚举值,则可以当做单例设计模式使用 4、调用name方法,可以获取常量名称;values()返回枚举类中所有枚举值/* 演示:定义一个weekday的普通类来模拟枚举功能 * 1、星期几固定有7个值,每个值的下一个值也是固定的 * 2、私有的构造方法 * 3、每个元素分别用一个公有的静态成员变量表示 * 4、可以有若干公有方法或抽象方法,例如nexdDay方法 * */ package cn.ithema.day1; public abstract class WeekDay1 { //将构造函数私有 private WeekDay1(){} //指定全局变量,该变量值为对象 //采用抽象方法定义nextDay就将大量的if语句转移成了一个个独立的类 public final static WeekDay1 SUN = new WeekDay1(){ public WeekDay1 nextDay() { return MON; } }; public final static WeekDay1 MON = new WeekDay1(){ public WeekDay1 nextDay() { return TUE; } }; public final static WeekDay1 TUE = new WeekDay1(){ public WeekDay1 nextDay() { return WED; } }; public final static WeekDay1 WED = new WeekDay1(){ public WeekDay1 nextDay() { return THU; }}; public final static WeekDay1 THU = new WeekDay1(){ public WeekDay1 nextDay() { return FRI; }}; public final static WeekDay1 FRI = new WeekDay1(){ public WeekDay1 nextDay() { return SAT; }}; public final static WeekDay1 SAT = new WeekDay1(){ public WeekDay1 nextDay() { return SUN; }}; //类中下一天的抽象方法 public abstract WeekDay1 nextDay();
/*定义一个交通灯枚举类,该类带有抽象方法nextTemp() * 1、元素为RED GREEN YELLOW * 2、抽象方法nextTemp() * 3、交通灯时间 * */ package cn.ithema.day1; public enum TrafficLamp{ //元素列表必须位于类的开头,用;表示结束 RED (30){ public TrafficLamp nextLamp() { return GREEN; } }, GREEN (45){ public TrafficLamp nextLamp() { return YELLOW; } }, YELLOW (5){ public TrafficLamp nextLamp() { return RED; } }; private int time; /*枚举类的构造方法演示,必须是私有的,因为枚举类就是为了使得程序所需数据是固定范围的, 所以枚举类提供的成员以涵盖所有可能,不用在new对象了,从而构造函数就需私有*/ private TrafficLamp(int time){ this.time = time;} //枚举类中定义抽象方法 public abstract TrafficLamp nextLamp(); }
注解 public interface Annotation
注解可以理解为一种标记,在程序中某个成员加了某注解就等于为程序加上了某种标记,
编译器、开发工具和其他程序都可通过反射来判断该成员是否有无某种标记。
注解可作用于包、类、方法、方法参数以及局部变量上
作用
1、编写文档:通过代码里标识的元数据生成文档【生成文档doc文档】
2、代码分析:通过代码里标识的元数据对代码进行分析【使用反射】
3、编译检查:通过代码里标识的元数据让编译器能过实现基本的编译检查【Override】
java.lang包中的三种注解
Deprecated 表示该注释元素是过时的
Override 表示该注释方法是覆盖超类的方法
SuppressWarnings 表示忽略注释元素指定的编译器警告
自定义注解
1、元注解——注解的注解
@Rentention 指示自定义注解保留期间(SOURCE、CLASS、RUNTIME)
@Target 指示注解类型适用的程序元素的种类(FIELD、METHOD、PACKAGE、TYPE...)
2、添加属性
简单属性:字符串、int、数组等
高级属性:枚举、注解等
Type类型
类、接口(包括注释类型)、枚举声明,都是一种Type类型//自定义注解演示 package cn.ithema.day2; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import cn.ithema.day1.EnumTest; //给注解定义注解 @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) public @interface IthemaAnnotation { //default "..."为缺省值即默认复制,抽象方法前省略了public abstract String color() default "blue"; // String value(); //添加数组属性 int[] arrayAttr() default {3,4,5}; //添加枚举属性 EnumTest.TrafficLamp lamp() default EnumTest.TrafficLamp.RED; //添加注解属性,如果属性只有value,则在引用注解时可省略(value=),直接赋值即可 MetaAnnotation annotationAttr() default @MetaAnnotation("ywy"); } @interface MetaAnnotation { String value(); }
package cn.ithema.day2; //自定义注解作用在类上,"XYZ"前省略了value= @IthemaAnnotation("XYZ") public class AnnotationTest { //一个@注解相当于一个类,此处相当于创建了类的一个实例对象 @SuppressWarnings("deprecation") public static void main(String[] args) { System.runFinalizersOnExit(true); //检查某个类是否有某个注解 if(AnnotationTest.class.isAnnotationPresent(IthemaAnnotation.class)){ IthemaAnnotation annotation = AnnotationTest.class.getAnnotation(IthemaAnnotation.class); System.out.println(annotation.color()); System.out.println(annotation.value()); System.out.println(annotation.arrayAttr().length); //注解的属性值为枚举,获取该枚举实例的方法返回的实例 System.out.println(annotation.lamp().nextLamp()); //注解的属性值为一个注解,在获取该注解的属性值 System.out.println(annotation.annotationAttr().value()); } } }
泛型
作用:规定原始类型操作范围,将错误显示在编译时期,而且避免了强转。
泛型术语
示例:ArrayList<E>和ArrayList<Integer>
1、ArrayList RawType 原始类型
2、ArrayList<E> 泛型类型
3、ArrayList<Integer> 参数化类型,ParameterType类表示
4、E 类型变量
5、Integer ActualTypeArgument实际类型参数
6、<> 读作typeof
注意事项
1、使用泛型时,泛型类型为引用类型不能是基本数据类型
2、如果两边都有泛型则两边必须一致
3、泛型是提供给javac编译器使用的,它用于限定集合的输入类型,编译器挡住向集合中插入非法数据。
但编译器编译完带有泛型的java程序后,生产的clss文件中将不再带有泛型信息
因此使程序运行效率不受到影响,这个过程称之为“拆除”
4、一个类加不同泛型,其字节码是相等的
5、不能通过参数获取其泛型类型,但可以通过方法得知其参数类型package cn.ithema.day2; import java.lang.reflect.Method; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.Date; import java.util.Vector; public class GenericTest { public static void main(String[] args)throws Exception { /*无泛型,集合中添加不一致的类型数据,编译器不会报错 ArrayList collection1 = new ArrayList(); collection1.add(1); collection1.add(1L); collection1.add("abc");*/ ArrayList<String> collection2 = new ArrayList<String>(); //collection2.add(1); //collection2.add(1L); collection2.add("abc"); //验证加不同泛型的同一类的字节码是一样的 ArrayList<Integer> collection3 = new ArrayList<Integer>(); System.out.println(collection3.getClass()==collection2.getClass()); //编译器会去泛型,通过反射得到字节码无泛型,便可加入指定类型参数 //collection3.add("ywy"); collection3.getClass().getMethod("add",Object.class).invoke(collection3,"ywy"); System.out.println(collection3.get(0)); //通过反射获得泛型的实际类型参数 Method applyMethod = GenericTest.class.getMethod("applyVector", Vector.class); Type[] types = applyMethod.getGenericParameterTypes(); ParameterizedType pType = (ParameterizedType)types[0]; //获取原始类型和实际类型参数 System.out.println(pType.getRawType()); System.out.println(pType.getActualTypeArguments()[0]); } //不能通过参数v1获得其泛型类型,但是可以通过applyVector方法获得参数类表类型 public static void applyVector(Vector<Date> v1){ } }
------------- android培训、 java培训、java博客、java学习型技术博客、期待与您交流! -------------详情请查看:http://edu.csdn.net/heima/
黑马程序员_JDK1.5新特性
最新推荐文章于 2021-08-28 02:08:26 发布