黑马程序员----jdk1.5新特性

来源:互联网 发布:瞻博网络中国区 编辑:程序博客网 时间:2024/04/28 12:48

---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------

1.静态导入
import static java.lang.Math.max; 导入到方法
 System.out.println(max(3, 6)); 
2.可变参数
public class VarableParameter {
    public static void main(String[] args) {
        System.out.println(add(1, 2, 4));
        int[] argss = new int[]{2,3,4};
        System.out.println(add(1, argss));
    }
    public static int add(int x, int... args) {
        int sum = 0;
        for (int i = 0; i < args.length; i++) {
            sum += args[i];
        }
        return sum;
    }
}
3.增强for
public class VarableParameter {
    public static void main(String[] args) {
        System.out.println(add(1, 2, 4));
        int[] argss = new int[]{2,3,4};
        System.out.println(add(1, argss));
    }
    public static int add(int x, int... args) {
        int sum = 0;
        for (int i : args) {
            sum += i;
        }
        return sum;
    }
}
4.基本数据类型的自动装箱与拆箱
public class AutoBox {
    public static void main(String[] args) {
        Integer i = 3;
        System.out.println(i + 11);
        Integer i1 = 11;
        Integer i2 = 11;
        Integer i3 = Integer.valueOf(11);
        // 结果为true 如果是-128-127的数 享元模式 共有小的数总用常用
        System.out.println(i1 == i2);
        System.out.println(i2==i3);
    }
}
5.枚举
public class EnumTest {
    public static void main(String[] args) {
        WeekDay wd = WeekDay.SUN;
        System.out.println(wd);
        System.out.println(WeekDay.valueOf("MON"));
        System.out.println(WeekDay.values());
        System.out.println(Arrays.toString(WeekDay.values()));
        for (WeekDay wds : WeekDay.values()) {
            System.out.println(wds);
        }
    }
    public enum WeekDay {
        SUN, MON, TUE, WED, THI, FRI, SAT
    }
}
实例2
public class EnumTest {
    public static void main(String[] args) {
        WeekDay wd = WeekDay.SUN;
        System.out.println(wd.day);
        System.out.println(WeekDay.valueOf("MON"));
        System.out.println(WeekDay.values());
        System.out.println(Arrays.toString(WeekDay.values()));
        for (WeekDay wds : WeekDay.values()) {
            System.out.println(wds);
        }
    }
    public enum WeekDay {
        SUN(1), MON, TUE, WED, THI, FRI, SAT;
        private int day;
        private WeekDay() {
        };
        private WeekDay(int days) {
            this.day = days;
        }
    }
}
枚举与类的区别是在编辑前对象就已经存在 也就是SUN这些都是enum的实例
1.枚举的构造方法 在实例(sun)代码
2.是独一份的也就是单例只能在enum中创建 在外部不能创建
3.如果你想创建一个单例 就可以用只有一个实例的枚举 构造方法默认 而且有一个生成好的实例 
 
 
6.注解  
1.先了解3个基本的注解        

  ---@Override    方法上面 判断是否重

  ---@Deprecated   方法上面 表示方法废弃不建议被使用

  ---@SuppressWarnings("deprecation")  压制警告(废弃的警告)

2.学会自己写注解

---注解跟类接口同级  书写方式public @interface ItcastAnnotation  

---在注解上定义注解   

// 元注解 元数据 元信息 retention表示3中类型 class source runtime// target 表示注解的作用范围 比如 method 方法上面 type 类接口 注解枚举上面@Target({ ElementType.METHOD, ElementType.TYPE })@Retention(RetentionPolicy.RUNTIME)

这两个注解定义元素都是 枚举类型

   public @interface Target { ElementType[] value(); }    public @interface Retention { RetentionPolicy value(); }

一个注解实例

public @interface ItcastAnnotation {    String color() default "blue";    // 特殊属性比如 @SuppressWarnings("deprecation") 就是等于value=“deprecation”    // 但只有String value(); 时才能用 如果还有 String color() 但还想用就要设定默认值default "blue";    // 支持 @ItcastAnnotation("qixing")与    // @ItcastAnnotation(color="red",value="qixing")    String value();    // 定义数组属性    int[] arrayAttr() default { 3, 4, 5 };    // 可以是枚举    /*     * public @interface Target { ElementType[] value(); }      * public @interface Retention { RetentionPolicy value(); }     */        //还可以是annotation    MyAnnotation annotationAttr() default @MyAnnotation("qixing");        }
注解的使用
@ItcastAnnotation(color="red",value="qixing",annotationAttr = @MyAnnotation("yinhe"))public class AnnotationTest {//注解实例      //压制警告    @SuppressWarnings("deprecation")    public static void main(String[] args) {/*        System.runFinalizersOnExit(true);        System.out.println("nihao");*/        if ( AnnotationTest.class.isAnnotationPresent(ItcastAnnotation.class)) {                       ItcastAnnotation anno = AnnotationTest.class.getAnnotation(ItcastAnnotation.class);            System.out.println(anno);            System.out.println(new Person());            System.out.println(anno.color());            System.out.println(anno.value());            System.out.println(anno.arrayAttr().length);            System.out.println(anno.annotationAttr().value());                             }            }}

注解是什么呢 比如方法上的注解

1.ItcastAnnotation anno = AnnotationTest.class.getAnnotation(ItcastAnnotation.class); 得到方法上单注解名称

2.通过反射class.forname()得到 注解对象

3.比如3大基本注解 其实就是得到名字 jvm判断对象名字是否与override相等 如果相当就去执行判断是否重写的方法








---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------