Java 8 特性

作者: 音符纸飞机 | 来源:发表于2019-01-15 17:00 被阅读52次

java-8-tutorial

接口的默认方法和静态方法

默认方法用default修饰,默认方法和抽象方法之间的区别在于抽象方法需要实现,而默认方法不需要。接口提供的默认方法会被接口的实现类继承或者覆写。

如果有两个接口中的静态方法一模一样,并且一个实现类同时实现了这两个接口,此时并不会产生错误,因为jdk8只能通过接口类调用接口中的静态方法,所以对编译器来说是可以区分的。但是如果两个接口中定义了一模一样的默认方法,并且一个实现类同时实现了这两个接口,那么必须在实现类中重写默认方法,否则编译失败。

函数式接口

只有一个抽象方法的接口,用@FunctionalInterface注解接口。
JDK8函数式接口Function、Consumer、Predicate、Supplier

Lambda表达式、方法引用

不赘述了,实现原理就是用了函数式接口。

重复注解

在注解类上添加@Repeatable
JDK8新特性之重复注解

反射获取方法中的参数名

使用反射API和Parameter.getName()方法。
这个特性是默认关闭的,需要在javac编译的时候带上-parameters

package com.javacodegeeks.java8.parameter.names;

import java.lang.reflect.Method;
import java.lang.reflect.Parameter;

public class ParameterNames {
    public static void main(String[] args) throws Exception {
        Method method = ParameterNames.class.getMethod( "main", String[].class );
        for( final Parameter parameter: method.getParameters() ) {
            System.out.println( "Parameter: " + parameter.getName() );
        }
    }
}

/**
* 不加-parameters: Parameter: arg0
* 加了-parameters: Parameter: args
*/

Optional

Optional是一个容器:存放T类型的值或者null。它提供了一些有用的接口来避免显式的null检查

Optional<String> fullName = Optional.ofNullable( null );
System.out.println( "Full Name is set? " + fullName.isPresent() );        
System.out.println( "Full Name: " + fullName.orElseGet( () -> "[none]" ) ); 
System.out.println( fullName.map( s -> "Hey " + s + "!" ).orElse( "Hey Stranger!" ) );

/*
Full Name is set? false
Full Name: [none]
Hey Stranger!
*/

Optional< String > firstName = Optional.of( "Tom" );
System.out.println( "First Name is set? " + firstName.isPresent() );        
System.out.println( "First Name: " + firstName.orElseGet( () -> "[none]" ) ); 
System.out.println( firstName.map( s -> "Hey " + s + "!" ).orElse( "Hey Stranger!" ) );

/*
First Name is set? true
First Name: Tom
Hey Tom!
*/

Streams

java8-stream-tutorial-examples
Streams API 详解

Date / Time

Clock类使用时区来返回当前的纳秒时间和日期。Clock可以替代System.currentTimeMillis()TimeZone.getDefault()

// Get the system clock as UTC offset 
final Clock clock = Clock.systemUTC();
clock = Clock.systemDefaultZone();
System.out.println( clock.instant() );
System.out.println( clock.millis() );

System.out.println(ZoneId.getAvailableZoneIds());
ZoneId zone = ZoneId.of("Asia/Shanghai");
LocalTime now = LocalTime.now(zone);
System.out.println(now);
// 16:50:27.527
LocalTime late = LocalTime.of(23, 59, 59);
System.out.println(late);  
// 23:59:59

LocalDate today = LocalDate.now();
LocalDate tomorrow = today.plus(1, ChronoUnit.DAYS);
LocalDate yesterday = tomorrow.minusDays(2);

LocalDate independenceDay = LocalDate.of(2018, Month.JULY, 4);
DayOfWeek dayOfWeek = independenceDay.getDayOfWeek();
System.out.println(dayOfWeek);    // WEDNESDAY

JVM

使用Metaspace代替持久代(PermGen space)。在JVM参数方面,使用-XX:MetaSpaceSize-XX:MaxMetaspaceSize代替原来的-XX:PermSize-XX:MaxPermSize

相关文章

  • Java11的新特性

    Java语言特性系列 Java5的新特性 Java6的新特性 Java7的新特性 Java8的新特性 Java9的...

  • Java15的新特性

    Java语言特性系列 Java5的新特性 Java6的新特性 Java7的新特性 Java8的新特性 Java9的...

  • Java12的新特性

    Java语言特性系列 Java5的新特性 Java6的新特性 Java7的新特性 Java8的新特性 Java9的...

  • 关于java8的学习(一)

    Java 8 新特性 官网java8介绍地址菜鸟教程关于java8的介绍 Java 8 里面加了很多的新特性,在这...

  • Java 8 新特性

    Java 8 新特性 声明:java8新特性系列为个人学习笔记,参考地址点击这里,侵删!! Java 8 (又称为...

  • Java 8 新特性——检视阅读

    Java 8 新特性——检视阅读 参考 Java 8 新特性——菜鸟 Oracle 公司于 2014 年 3 月 ...

  • Java 8 新特性——实践篇

    Java 8 新特性——实践篇 参考Java8新特性[https://www.bilibili.com/video...

  • JavaQCollections

    链接 Java8新特性Java 8 简明教程

  • Java8新特性 -Optional 类

    Java 8 新特性[https://www.runoob.com/java/java8-new-features...

  • Java8的新特性

    Java8的新特性 Java8的新特性 1. 简介。1 Java 8于2014年3月19日发布正式版,是自Java...

网友评论

    本文标题:Java 8 特性

    本文链接:https://www.haomeiwen.com/subject/qyiedqtx.html