zoukankan      html  css  js  c++  java
  • JavaJDK8新特性相关知识整理

    1、新增接口默认方法和接口静态方法
         接口默认方法用default关键字修饰,与抽象方法不同之处在于抽象方法必须要求实现,而默认方法没有这个要求,默认方法本身已经有具体的实现,所有的接口实现类将会默认继承它,也可以覆盖这个默认实现。

    private interface Defaulable {  
        // Interfaces now allow default methods, the implementer may or
        // may not implement (override) them.
        default String notRequired() {
            return "Default implementation";
        }
    }
    private static class DefaultableImpl implements Defaulable {  
    }
    
    private static class OverridableImpl implements Defaulable {  
        @Override
        public String notRequired() {
            return "Overridden implementation";
        }
    }

         接口静态方法用static关键字修饰,有具体的方法实现。

    public interface StaticInterface {
        static void method() {
            System.out.println("这是Java8接口中的静态方法!");
        }
    }
    
    public class Main {
        public static void main(String[] args) {
            StaticInterface.method(); // 输出 这是Java8接口中的静态方法!
        }
    }

    2、Lambda表达式
         Lambda表达式允许把函数作为方法的参数,由逗号分隔的参数列表、->符号和函数体三部分组成

         对比使用非Lambda与使用Lambda实现

    public class Test2 {
        
        public static void main(String[] args) {
            
            List<String> names = Arrays.asList("张三","李四","王五","赵六");
            
            //非Lambda表达式实现排序
            Collections.sort(names,new Comparator<String>() {
                @Override
                public int compare(String a, String b) {
                    return b.compareTo(a);
                }
            });
            
            //Lambda表达式实现排序
            Collections.sort(names,(a,b)->b.compareTo(a));
            
            System.out.println(names.toString());
        }
    
    }

    3、函数式接口
         函数式接口指只有一个函数的接口,使用@FunctionallInterface注解来表明该接口是一个函数式接口。java.lang.Runable和java.util.concurrent.Callable就是函数式接口的例子

         使用非Lambda创建线程:

             //通过匿名内部类来创建线程
            Thread thread1 = new Thread(new Runnable() {
                @Override
                public void run() {
                    int a = 0;
                    for(long i = 0; i < count; i++) {
                        a += 1;
                    }
                }            
            });

      使用Lambda表达式创建线程

            //通过Lambda表达式创建线程
            Thread thread2 = new Thread(()->{
                int a = 0;
                for(long i = 0; i < count; i++) {
                    a += 1;
                }}
            );

    4、HashMap的底层实现由原来的数组+链表实现改为数组+链表+红黑树实现
    5、JVM内存管理方面,由元空间代替了永久代
    6、新增java.time包
         包含了所有关于日期、时间、时区、持续时间和时钟操作的类,这些类都是不可变的,线程安全
    7、引入重复注解@Repeatable

  • 相关阅读:
    JavaWeb 【介绍】
    Python3 【解析库XPath】
    Python【类编程】
    Python3【正则表达式】
    Java GUI【记事本】
    Java 【笔记本】
    Python3 【requests使用】
    Java 【食品库存管理】
    AGC027 C
    AGC027 A
  • 原文地址:https://www.cnblogs.com/conswin/p/10395624.html
Copyright © 2011-2022 走看看