java-java8新特性

  • java8其实就是java1.8,java1.8作为java的一个重大版本,以下是它新增的一些新特性
1、 lambda表达式和函数式接口
  • Lambda表达式(也称为闭包)是Java 8中最大和最令人期待的语言改变。它允许我们将函数当成参数传递给某个方法,或者把代码本身当作数据处理:函数式开发者非常熟悉这些概念。很多JVM平台上的语言(Groovy、Scala等)从诞生之日就支持Lambda表达式,但是Java开发者没有选择,只能使用匿名内部类代替Lambda表达式。
  • 函数式接口
    1、函数式接口指的是只有一个函数的接口,这样就可以隐式的转化为lambda表达式
    2、java特别脆弱,如果里面多余一个函数则就破坏了函数式接口,所以就出现了一个注解(@FunctionalInterface)
2、接口的默认方法和静态方法
  • 接口里添加了以default 修饰的默认方法,实现它的子类可以重写 ,也可不重写
  • 接口里添加了static静态类,直接接口名直接调用静态方法
3、方法引用
public static class Car {
    public static Car create( final Supplier< Car > supplier ) {
        return supplier.get();
    }              
 
    public static void collide( final Car car ) {
        System.out.println( "Collided " + car.toString() );
    }
 
    public void follow( final Car another ) {
        System.out.println( "Following the " + another.toString() );
    }
 
    public void repair() {   
        System.out.println( "Repaired " + this.toString() );
    }
}
//第一种方法引用的类型是构造器引用,语法是Class::new,或者更一般的形式:Class::new。注意:这个构造器没有参数。
cars.forEach( Car::collide );
//第二种方法引用的类型是静态方法引用,语法是Class::static_method。注意:这个方法接受一个Car类型的参数。
cars.forEach( Car::collide );
//第三种方法引用的类型是某个类的成员方法的引用,语法是Class::method,注意,这个方法没有定义入参
cars.forEach( Car::repair );
4 、重复注解
  • jdk1.5以后添加了注解的功能,但是不支持重复注解,1.8之后支持了重复注解
package com.javacodegeeks.java8.repeatable.annotations;
 
import java.lang.annotation.ElementType;
import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
 
public class RepeatingAnnotations {
    @Target( ElementType.TYPE )
    @Retention( RetentionPolicy.RUNTIME )
    public @interface Filters {
        Filter[] value();
    }
 
    @Target( ElementType.TYPE )
    @Retention( RetentionPolicy.RUNTIME )
    @Repeatable( Filters.class )
    public @interface Filter {
        String value();
    };
 
    @Filter( "filter1" )
    @Filter( "filter2" )
    public interface Filterable {        
    }
 
    public static void main(String[] args) {
        for( Filter filter: Filterable.class.getAnnotationsByType( Filter.class ) ) {
            System.out.println( filter.value() );
        }
    }
}

5、类型判断
  • java8 优化了类型判断,在编译期间就可判断类型
6、拓宽注解的应用场景
  • Java 8拓宽了注解的应用场景。现在,注解几乎可以使用在任何元素上:局部变量、接口类型、超类和接口实现类,甚至可以用在函数的异常定义上。下面是一些例子:
package com.javacodegeeks.java8.annotations;
 
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.ArrayList;
import java.util.Collection;
 
public class Annotations {
    @Retention( RetentionPolicy.RUNTIME )
    @Target( { ElementType.TYPE_USE, ElementType.TYPE_PARAMETER } )
    public @interface NonEmpty {        
    }
 
    public static class Holder< @NonEmpty T > extends @NonEmpty Object {
        public void method() throws @NonEmpty Exception {            
        }
    }
 
    @SuppressWarnings( "unused" )
    public static void main(String[] args) {
        final Holder< String > holder = new @NonEmpty Holder< String >();        
        @NonEmpty Collection< @NonEmpty String > strings = new ArrayList<>();        
    }
}

java 编译器的新特性

  • 参数名称

java官方库的新特性

  • optional
  • streams
  • date/time api
  • nashorn js 引擎
  • 并行数组
  • 并发性

新的java 工具

  • nashorm 引擎:jjs
  • 类依赖分析器:jdeps

你可能感兴趣的:(java-java8新特性)