- java8其實(shí)就是java1.8,java1.8作為java的一個(gè)重大版本,以下是它新增的一些新特性
1、 lambda表達(dá)式和函數(shù)式接口
- Lambda表達(dá)式(也稱為閉包)是Java 8中最大和最令人期待的語(yǔ)言改變。它允許我們將函數(shù)當(dāng)成參數(shù)傳遞給某個(gè)方法,或者把代碼本身當(dāng)作數(shù)據(jù)處理:函數(shù)式開發(fā)者非常熟悉這些概念。很多JVM平臺(tái)上的語(yǔ)言(Groovy、Scala等)從誕生之日就支持Lambda表達(dá)式,但是Java開發(fā)者沒有選擇,只能使用匿名內(nèi)部類代替Lambda表達(dá)式。
- 函數(shù)式接口
1、函數(shù)式接口指的是只有一個(gè)函數(shù)的接口,這樣就可以隱式的轉(zhuǎn)化為lambda表達(dá)式
2、java特別脆弱,如果里面多余一個(gè)函數(shù)則就破壞了函數(shù)式接口,所以就出現(xiàn)了一個(gè)注解(@FunctionalInterface)
2、接口的默認(rèn)方法和靜態(tài)方法
- 接口里添加了以default 修飾的默認(rèn)方法,實(shí)現(xiàn)它的子類可以重寫 ,也可不重寫
- 接口里添加了static靜態(tài)類,直接接口名直接調(diào)用靜態(tài)方法
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() );
}
}
//第一種方法引用的類型是構(gòu)造器引用,語(yǔ)法是Class::new,或者更一般的形式:Class<T>::new。注意:這個(gè)構(gòu)造器沒有參數(shù)。
cars.forEach( Car::collide );
//第二種方法引用的類型是靜態(tài)方法引用,語(yǔ)法是Class::static_method。注意:這個(gè)方法接受一個(gè)Car類型的參數(shù)。
cars.forEach( Car::collide );
//第三種方法引用的類型是某個(gè)類的成員方法的引用,語(yǔ)法是Class::method,注意,這個(gè)方法沒有定義入?yún)?cars.forEach( Car::repair );
4 、重復(fù)注解
- jdk1.5以后添加了注解的功能,但是不支持重復(fù)注解,1.8之后支持了重復(fù)注解
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 優(yōu)化了類型判斷,在編譯期間就可判斷類型
6、拓寬注解的應(yīng)用場(chǎng)景
- Java 8拓寬了注解的應(yīng)用場(chǎng)景?,F(xiàn)在,注解幾乎可以使用在任何元素上:局部變量、接口類型、超類和接口實(shí)現(xiàn)類,甚至可以用在函數(shù)的異常定義上。下面是一些例子:
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官方庫(kù)的新特性
- optional
- streams
- date/time api
- nashorn js 引擎
- 并行數(shù)組
- 并發(fā)性
新的java 工具
- nashorm 引擎:jjs
- 類依賴分析器:jdeps
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。