菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
159
0

Java - Java 8 新特性

原创
05/13 14:22
阅读数 96104
一、Java8新特性
  • Java8概述:Java8,也就是jdk1.8版本,是意义深远的一个新版本。是Java5之后一个大的版本升级,让Java语言和库仿佛获得了新生。
二、Lambda表达式
  • Lambda表达式:Lambda表达式,也可称为闭包。Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中)。直白说就是匿名内部类的一种精简写法,然后由JVM通过推导把简化的表达式还原。
  • Lambda格式:(parameters参数) -> expression表达式或方法体
  • Lambda规范:
    1. 使用Lambda前提是接口中只能有一个方法。
    2. 可以省略类型声明。
    3. 如果实现方法的表达式只有一行,可以省略大括号和return。
    4. 如果方法入参只有一个参数,则可以省略入参括号
    5. Lambda表达式只能引用标记了final的外层局部变量。
  • Lambda举例:
// 普通接口
public interface MathOperation {
    int operation(int a, int b);
}
// Lambda测试类
public static void main(String args[]) {
    // 普通匿名内部类
    StringOperation a = new StringOperation() {
        @Override
        public String operation(String msg) {
            return msg + "Lambda";
        }
    };
    // Lambda表达式完整版本
    StringOperation b = (String msg) -> {
        return msg + "Lambda";
    };
    // 省略类型声明:JVM会自动匹配
    StringOperation c = (msg) -> {
        return msg + "Lambda";
    };
    // 省略方法体:前提是方法实现只能有一行代码
    StringOperation d = (msg) -> msg + "Lambda";
    // 省略入参括号:前提是方法只有一个入参
    StringOperation e = msg -> msg + "Lambda";
}

 

 五、默认方法
  • 默认方法:Java8新增了接口的默认方法。简单说,默认方法就是接口可以有实现方法,而且不需要实现类去实现其方法。我们只需在方法名前面加个default关键字即可实现默认方法。
六、Optional类
  • Optional类:Optional类是个容器,它可以保存类型T的值,或者仅仅保存NULL。Optional提供很多有用的方法,这样我们就不用显式进行空值检测。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象。Optional类的引入很好的解决空指针异常。
// Optional类测试代码
public static void main(String args[]) {
    Integer value1 = null;
    Integer value2 = new Integer(10);
    // Optional.ofNullable()   允许传递为 null 参数
    Optional<Integer> a = Optional.ofNullable(value1);
    // Optional.of()       如果传递的参数是 null,抛出异常 NullPointerException
    Optional<Integer> b = Optional.of(value2);
    // Optional.isPresent()    判断是否为NULL,为NULL返回false
    boolean aAresent = a.isPresent();
    boolean bAresent = b.isPresent();
    // Optional.orElse()       获取值,为NULL使用默认值(5)。
    Integer aOrElse = a.orElse(new Integer(5));
    // Optional.get()          获取值,为NULL抛异常。
    Integer integer = a.get();
}
 七、Nashorn JavaScript
  • Nashorn JavaScript:从JDK1.8开始,Nashorn取代Rhino(JDK 1.6, JDK1.7)成为Java的嵌入式JavaScript引擎。Nashorn完全支持ECMAScript 5.1规范以及一些扩展。它使用基于JSR292的新语言特性,其中包含在JDK 7中引入的invokedynamic,将JavaScript编译成Java字节码。与先前的Rhino实现相比,这带来了2到10倍的性能提升。
  • Nashorn JavaScript举例:
// Nashorn JavaScript测试方法
public static void main(String args[]) {
    // 获取JavaScript执行器
    ScriptEngine nashorn = new ScriptEngineManager().getEngineByName("nashorn");
    try {
        // 调用脚本
        Object eval = nashorn.eval("print('test')");
        // 调用脚本并获取返回值
        Integer result = (Integer) nashorn.eval("10 + 2");
    } catch (ScriptException e) {
        e.printStackTrace();
    }
}
八、日期时间 API
  • 日期时间:Java 8通过发布新的Date-Time API (JSR 310)来进一步加强对日期与时间的处理。在旧版的Java 中,日期时间API存在诸多问题(java.util.Date是非线程安全的,所有的日期类都是可变的、)

 

发表评论

0/200
159 点赞
0 评论
收藏