Java初学——JDK8接口及lambda表达式

本文深入探讨了JDK8中接口的改进,包括新增的静态方法和默认方法,以及Lambda表达式的引入。Lambda表达式允许将函数作为参数传递,使代码更简洁,但可能降低代码可读性。

JDK8接口及lambda表达式

JDK8接口

说到接口,我们先谈谈JDK8之前的接口
在JDK8之前的版本中,接口里的方法都是抽象的,并且不能存在静态方法
所有方法的申名都用 public [返回类型] [方法名] (参数列表) [抛出异常];
按照之前来说,接口里全都是抽象方法,也就是极端抽象类。

  1. 接口中的方法全是抽象方法
  2. 接口中的成员变量全是常量
  3. 接口中的所有成员权限都是 public
  4. 修饰符 interface,不是 class

在jdk8之前,interface之中可以定义变量和方法,变量必须是public、static、final的,方法必须是public、abstract的。

JDK8及以后,允许我们在接口中定义static方法和default方法。

public interface JDK8Interface {  
    // static修饰符定义静态方法  
    static void staticMethod() {  
        System.out.println("接口中的静态方法");  
    }  
  
    // default修饰符定义默认方法  
    default void defaultMethod() {  
        System.out.println("接口中的默认方法");  
    }  
}  

再定义一个接口的实现类:

public class JDK8InterfaceImpl implements JDK8Interface {  
    //实现接口后,因为默认方法不是抽象方法,所以可以不重写
    //但是如果开发需要,也可以重写  
}  

静态方法,只能通过接口名调用,不可以通过实现类的类名或者实现类的对象调用。default方法,只能通过接口实现类的对象来调用。

public class Main {  
    public static void main(String[] args) {  
        // static方法必须通过接口类调用  
        JDK8Interface.staticMethod();  
  
        //default方法必须通过实现类的对象调用  
        new JDK8InterfaceImpl().defaultMethod();  
    }  
}  

所以,在JDK8的接口中可以写以下内容

  1. 常量
  2. 抽象方法
  3. 默认方法
  4. 静态方法

lambda表达式

1、Lamdba

Lambda 允许把函数作为一个方法的参数,使用Lamdba可以让开发的代码更加简洁,但是易读性差,新人不了解Lamdba表达式或者代码功底有点差,不容易读懂大佬们写的代码了。

2、Lamdba语法格式

(参数) -> 表达式

(参数) ->{ 多个表达式; }

参数可以是多个,也可以是1个,也可以没有参数,expression 同样是多个,或者是1个,或者无表达式

下面是一个简单的例子

// 1. 不需要参数,返回值为 5  
	() -> 5    
// 2. 接收一个参数(数字类型),返回其2倍的值  
	x -> 2 * x  
// 3. 接受2个参数(数字),并返回他们的差值  
	(x, y) -> x – y  
// 4. 接收2个int型整数,返回他们的和  
	(int x, int y) -> x + y   
// 5. 接受一个 string 对象,并在控制台打印,不返回任何值(看起来像是返回void)  
	(String s) -> System.out.print(s)

再详细点:
我们先定义一个展示接口

@FunctionalInterface
public interface Foo {        
    /**
     * 传入一个label标签,传入一个对应的值,显示一组结果
     * @param label
     * @param value
     */
    void show(String label,String value);
}

然后弄一个执行类

    public static void main(String[] args) {
        //-------匿名内部类
        Foo f1 = new Foo() {
            @Override
			public void show(String label, String value) {
				System.out.println("<<"+label+"="+value+">>");
		}
	};
}
 f1.show("姓名", "张三");

结果为

<<姓名=张三>>

但用了lambda表达式后过程可以简化为:

public static void main(String[] args) {
		Foo f2 = (label,value) ->  System.out.println("<<"+label+"="+value+">>");
		f2.show("年龄", "20");
	}

结果:

<<年龄=20>>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值