zoukankan      html  css  js  c++  java
  • JDK 5.0新特性

    时间:2016-11-5 12:03

    JDK5.0新特性
        泛型、枚举、静态导入、自动拆装箱、增强for循环、可变参数

    1、Junit单元测试
        测试的对象是类中的一个方法。
        junit不属于JavaSE,要想使用需要导入相应的jar包。

        首先junit有不同的版本。

        单元测试方法命名规则:
            必须是public
            不能有返回值
            不能有参数

        运行测试方法时,需要在方法上面加上一个注释:
            @Test    //表示这是一个测试方法
            @Ignore    //表示该方法不进行单元测试
            @Before    //在每一个单元测试方法之前运行(如果有多个测试方法,都会先执行该方法)
            @After    //在每一个单元测试方法之后运行(如果有多个测试方法,都会后执行该方法)

        //测试方法
        @Test
        public void test01()
        {
            JunitDemo test = new JunitDemo();
            test.test01(2, 3);
        }

        当出现绿色条时,表示方法测试成功。
        当出现红色条时,表示方法测试失败。 


        要想运行单个测试方法,需要选中方法名之后再运行。

        断言:
            Assert.assertEquals(expected, actual);
                expected:测试期望值
                actual:方法运行的实际值
            当期望值和实际值相同,则单元测试通过,否则失败。


    2、泛型
        在JDK5.0以前,对象保存到集合中就会失去其特性,取出时需要程序员手动进行类型的强制转换,这样不可避免会引发程序的一系列安全性问题。

        泛型擦除:
            泛型只是出现在源代码阶段,当源代码编译之后,泛型就不存在了。

        定义泛型类实现数组倒置:

    public class EnumDemo {
        public static void main(String[] args)
        {
            Short arr[] = {1,2,3,4,5,6};
            System.out.println("颠倒前:");
            for(int i : arr)
            {
                System.out.print(i + " ");
            }
            arr = new Demo<Short>().reverse(arr);
            System.out.println(" 颠倒后:");
            for(int i : arr)
            {
                System.out.print(i + " ");
            }
        }
    }
    class Demo<T>
    {
        public T[] reverse(T [] arr){
            for(int i = 0, j = arr.length-1; i < arr.length/2; i++, j--)
            {
                T temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
            return arr;
        }
    }


    3、枚举

        什么是枚举?
            只能在一定的范围内取值,这个值只能是范围内的任意一个值。
            例如周一到周日。

        为什么需要枚举?
            一些方法在运行时,它需要的数据不能是任意的,而必须是一定范围内的数值,此类问题在JDK5.0以前采用自定义带有枚举功能的类来解决,在JDK5.0以后可以直接使用枚举予以解决。

        JDK5.0新增的enum关键字用于定义一个枚举类:
            enum Week {
                Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday
            }

        枚举类案例:
            有参构造方法枚举类型
                需要在每个实例上都写上参数:Week(String s) {}   →   Sunday("")
            带有抽象方法的枚举类型举例
                在枚举的每个实例中都要重写这个抽象方法。

        练习:
            编写一个关于星期几的枚举类(Week),要求:
                枚举值:Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday
                该枚举类有一个方法,调用该方法返回中文格式的星期数。 

    4、枚举API
         String  name()
            返回枚举的名称。
        int  ordinal()
            返回枚举的下标,下标从0开始。
        static Enum  valueOf(Class enumType, String name)
            返回枚举的对象。 

        自定义的枚举类,在编译阶段自动生成两个方法:
            Enum  valueof(String name)
                获取枚举对象。
            Enum[]  values()
                获得所有枚举对象的数组。

    5、静态导入
        可以在代码中,直接使用静态导入方式,导入静态方法或者常量。

    6、自动拆装箱
        装箱:
            把基本的数据类型转换成包装类。
        拆箱:
            把包装类转换成基本的数据类型。
        自动装箱:
            Integer i = 10;
        自动拆箱:
            int j = i;

        public static void main(String[] args)
        {
            method(1);
        }
        public static void method(int i)
        {
            System.out.println("int");    //输出int,JDK的向下兼容特性。
        }
        public static void method(Integer i)
        {
            System.out.println("Integer");
        }

    7、增强for循环
        引入增强for循环的原因:替代Iterator
        for/in语句的适用范围:
            遍历数组
            遍历实现Iterable接口的集合类

        增强for循环底层实现也是迭代器,可以通过class文件查看。

    8、可变参数

        如果说实现的多个方法,这些方法中逻辑基本相同,唯一不同的是传递参数的个数,那么可以使用可变参数。

         可变参数应用场景:
            实现两个数的相加,再实现三个数的相加,再实现四个数的相加.......
    public class EnumDemo {
        public static void main(String[] args)
        {
            add(1,2);
            add(1,2,3);
            add(1,2,3,4);
        }
        public static void add(int...arguments)
        {
            //arguments可以理解为一个数组,这个数组用于存储传递的参数,相当于JS中的arguments
            int sum = 0;
            for(int i = 0; i < arguments.length; i++)
            {
                sum += arguments[i];
            }
            System.out.println(sum);
        }
    }
        注意:
            (1)可变参数需要写在方法的参数列表中,不能单独定义。
            (2)在方法的参数列表中只能有一个可变参数。
            (3)如果有其他参数,则可变参数必须放在参数列表的最后。
  • 相关阅读:
    SVN简介
    TFS简介
    UML简介
    C#++c1FlexGrid+帮助文档09
    vmware虚拟机 C硬盘空间 无损扩容 新测
    批处理命令中set定义的两种变量介绍 计算机基础知识
    ASP.NET获取网站根目录(路径)
    VMware(bridge、NAT、host-only、custom)含义
    spring3.0+Atomikos 构建jta的分布式事务
    在做了 BasePage 时: 只有在配置文件或 Page 指令中将 enableSessionState 设置为 true 时,才能使用会话状态。还请确保在应用程序配置的 / / 节中包括
  • 原文地址:https://www.cnblogs.com/wwwwyc/p/6375233.html
Copyright © 2011-2022 走看看