Java教程

java8新特性

本文主要是介绍java8新特性,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

 

 

/**
     * 【接口中 默认方法 有方法体】
     *      JDK8之前,接口中可以定义 变量、方法:
     *          变量 必须 为 public static final修饰
     *          方法 必须 为 public abstract 修饰
     *
     *      JDK8及以后,接口中可以定义 普通方法(有方法体)
     *          default
     *          static
     *
     */
    interface MyJDK8{

        void test1();

        default void test2(){
            System.out.println("test2...");
        }

        static void test3(){
            System.out.println("test3...");
        }

    }

    class MyJDK8Impl implements MyJDK8{
        @Override
        public void test1() {
            System.out.println("test1...");
        }
    }

  

/**
     * 【lambda表达式】
     *      why?
     *          期望 使用 接口的方法:
     *              a,写一个class 实现接口;
     *              b,使用匿名内部类;
     *      好处:
     *          简化 匿名内部类的调用;
     *
     *      How?
     *          使用 lambda表达式 依赖于 函数式接口;
     *
     *          【函数式接口】
     *              what?
     *                 接口 只有 一个 抽象方法,可以 认为该接口是 函数式接口,可以用 @FunctionalInterface 标识
     *              规范:
     *                  函数式接口中 允许 重新 Object方法;
     *                  函数式接口中 允许 default、static方法;
     *
     *       语法:
     *          () :参数列表
     *          -> :分隔符
     *          {}  :方法体
     *
     *        使用:
     *           a, 无参
     *           b, 有参
     *
     */
    interface MyLambda{
        void test();
    }

    void testInterfaceMethod(){

        // 使用匿名内部类
        new MyLambda(){
            @Override
            public void test() {
                System.out.println("test...");
            }
        }.test();

        // 使用lambda
        ((MyLambda) () -> System.out.println("test...")).test();
    }

    @FunctionalInterface
    interface MyFuncInterface{

        // 唯一 抽象方法
        void test();

        default void test1(){
            System.out.println("test1...");
        }

        static void test2(){
            System.out.println("test2...");
        }

        // Object 方法
        String toString();
    }

    void testMyFuncInterface(){
        MyFuncInterface m = () -> System.out.println("aa");
        m.test();

        // 简化
        ((MyFuncInterface) () -> System.out.println("aa")).test();
    }

    @FunctionalInterface
    interface MyFuncInterface1{
        String test(String a, String b);
    }

    void testMyFuncInterface1(){
        MyFuncInterface1 m = (a, b) -> {
            return a + ":" + b;
        };
        m.test("a", "b");

        // 简化
        MyFuncInterface1 m1 = (a, b) -> a + ":" + b;

        ((MyFuncInterface1) (a, b) -> a + ":" + b).test("aaaa", "bbbbb");

    }

  

这篇关于java8新特性的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!