一次电话Java面试的问题总结

JAVA:

1、JDK8新特性:

函数接口Functional Interface

只包含一个抽象方法的接口,也成为SAM(Single Abstract Method单方法接口)类型的接口。

例如Runnable接口的run()方法。JDK8新增了许多函数接口,其中一个重要的原因就是支持Lambda表达式。

Lambda(拉姆达) 表达式(闭包) − Lambda允许把函数作为一个方法的参数,函数作为参数传递进方法中。

一种匿名方法,可以将函数接口中的函数作为方法参数处理。在Java中Lambda表达式返回值是一个对象,这个对象必须是单方法接口。

lambda表达式的重要特征:

可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。
可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值。

的设计可以实现简洁而紧凑的语言结构。最简单的Lambda表达式可由逗号分隔的参数列表、->符号和语句块组成,例如:

Arrays.asList( "a", "b", "d" ).forEach( e -> System.out.println( e ) );

Arrays.asList( "a", "b", "d" ).forEach( ( String e ) -> System.out.println( e ) );

Arrays.asList( "a", "b", "d" ).forEach( e -> {
   
    System.out.print( e );
    System.out.print( e );
} );


String separator = ",";
Arrays.asList( "a", "b", "d" ).forEach( 
    ( String e ) -> System.out.print( e + separator ) );

Arrays.asList( "a", "b", "d" ).sort( ( e1, e2 ) -> e1.compareTo( e2 ) );
等同于
Arrays.asList( "a", "b", "d" ).sort( ( e1, e2 ) -> {
   
    int result = e1.compareTo( e2 );
    return result;
} );

方法引用 − 方法引用提供了非常有用的语法,可以直接引用已有Java类或对象(实例)的方法或构造器。与lambda联合使用,方法引用可以使语言的构造更紧凑简洁,减少冗余代码。

Lambda表达式的一种特殊形式。当一个lambda表达式body中仅仅是调用某个方法,此时使用方法引用替代Lambda表达式。从形式上直接引用这个方法,比在lambda表达式body中引用在形式上更简洁。

方法引用通过方法的名字来指向一个方法。
方法引用可以使语言的构造更紧凑简洁,减少冗余代码。
方法引用使用一对冒号 :: 。

Java 8使用两个新概念扩展了接口的含义:默认方法和静态方法。默认方法使得接口有点类似traits,不过要实现的目标不一样。默认方法使得开发者可以在 不破坏二进制兼容性的前提下,往现存接口中添加新的方法,即不强制那些实现了该接口的类也同时实现这个新加的方法。

默认方法和抽象方法之间的区别在于抽象方法需要实现,而默认方法不需要。接口提供的默认方法会被接口的实现类继承或者覆写,例子代码如下:

private interface Defaulable {
   
    default String notRequired() {
    
        return "Default implementation"; 
    }        
}//需要获取资料的朋友请加Q君样:290194256*

 
private static class DefaultableImpl implements Defaulable {
   
}
 
private static class OverridableImpl implements Defaulable {
   
    @Override
    public String notRequired() {
   
        return "Overridden implementation";
    }
}

Defaulable接口使用关键字default定义了一个默认方法notRequired()。DefaultableImpl类实现了这个接口,同时默认继承了这个接口中的默认方法;OverridableImpl类也实现了这个接口,但覆写了该接口的默认方法,并提供了一个不同的实现。

Java 8带来的另一个有趣的特性是在接口中可以定义静态方法,例子代码如下:

private interface DefaulableFactory {
   
    // Interfaces now allow static methods
    static Defaulable create( Supplier< Defaulable > supplier ) {
   
        return supplier.get();
 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值