Java8的新特性

虽然目前java最新版本都已经到16了,但是绝大部分公司目前用的java版本都是8,想当初java8问世后,其lambda表达式与方法引用可是最亮眼的新特性,目前,这两个特性也被大家广泛使用,所以今天指北君就带大家看看这两个特性
1.lambda从jdk1.8开始为了简化使用者进行代码开发,专门提供有lambda表达式的支持,利用此操作形式可以实现函数式的编程,对于函数式编程比较著名的语言:haskell,scala,利用函数式的编程可以避免掉面向对象编程之中的一些繁琐的问题。面向对象在其长期发展的过程中一直有一部分的反对者认为面向对象过于繁琐
比如:
public interface imessage { public void send(string str);}public class demo { public static void main(string args[]){ imessage msg = new imessage() { @override public void send(string str) { system.out.println(消息发送:+str); } }; msg.send(hahahaha); }}上面语句的核心功能只有一行核心语句,但是为了这一行核心语句依然需要按照完整的面向对象给出的设计结构进行开发。所以lambda出现啦。
public interface imessage { public void send(string str);}public class demo { public static void main(string args[]){ imessage msg = (str)- >{ system.out.println(发送消息:+str); }; msg.send(hahahaha); }}简单吧,这种形式就避免了复杂的面向对象结构化的要求。
lambda表达式如果要想使用,那么必须有一个重要的实现要求:sam(single abstract method)只有一个抽象方法( 但可以有default和static方法 ),以imessage接口为例,在这个接口里面发现只是提供有一个send()方法,除此之外没有任何其他方法定义,所以这样的接口就被称为 函数式接口 ,而只有函数式接口才可以被lambda表达式所使用
jdk1.8之后可以在接口里面定义static方法和default方法也是为了函数式编程而设置的,如下面这个是允许的
public interface imessage { public void send(string str); public default void defaultmethod(){ system.out.println(hahahaha); };}public class demo { public static void main(string args[]){ imessage msg = (str)- >{ system.out.println(发送消息:+str); }; msg.send(hahahaha); msg.defaultmethod(); }}对于lambda表达式而言,提供了如下几种格式
1) 方法没有参数:()-->{ };
2) 方法有参数:(参数,参数)-->{ };
如果现在只有一行语句返回:(参数,参数)-->语句;我们看下第三种
public interface imath { public int add(int x,int y);}public class demo { public static void main(string args[]){ imath math = (t1,t2) - > t1 + t2; system.out.println(math.add(10,20)); }}利用lambda表达式可以使代码更加简便
其中一个很经典的应用就是多线程runnable接口的例子
public class test{ public static void main(string[] args) { /* 匿名内部类的方式 new thread(new runnable() { @override public void run() { system.out.println(nihao); } }).start(); system.out.println(你好); */ //lambda的方式 new thread(()- > { for(int i = 1 ; i< 100 ; i++){ system.out.println(it is a lambda function!); } }).start(); }}2.方法引用引用数据类型最大的特点是可以进行内存的指向处理,但是在传统的开发之中一直所使用的只是对象引用操作,而jdk1.8以后也提供有方法的引用,即:不同的方法名称可以描述同一个方法(即可以为一个方法定义多个名字,但是要求必须是函数式接口)。如果要进行方法的引用在java里面提供了如下的四种形式
1)引用静态方法:类名称 :: static方法名称;
2)引用某个实例对象的方法:实例化对象 :: 普通方法;
3)引用特定类型的方法:特定类 :: 普通方法;
4)引用构造方法:类名称 :: new ;
2.1 引用静态方法 :在string类里面提供有string.valueof( )方法,这个方法就属于静态方法。
方法范例:public static string valueof(int i),该方法有参数还有返回值
@functionalinterface //函数式接口public interface ifunction { public r change(p p); //p描述的是参数,r描述的是返回值}public class demo { public static void main(string args[]){ ifunction fun = string :: valueof; string str = fun.change(100); system.out.println(str.length()); }}输出结果为:3
2.2 引用某个实例对象的方法string类里面有个转大写的方法:public string touppercase( )
这个方法是必须在有实例化对象提供的情况下才可以调用
@functionalinterface //函数式接口public interface ifunction { public r upper();}public class demo { public static void main(string args[]){ ifunction fun = hahaha :: touppercase; //hahaha为string的实例化对象 system.out.println(fun.upper()); }}输出结果为:hahaha
2.3 引用特定类型的方法在方法引用时也可以引用特定类中的一些操作方法,在string里面提供有一个字符串大小关系的比较
比较大小:public int compareto(string anotherstring)
这是一个普通方法,如果要引用普通方法,则往往都需要实例化对象,但是如果说现在你不想给出实例化对象,只是想引用这个方法,则就可以使用特定类来进行引用处理。
@functionalinterface //函数式接口public interface ifunction { public int compare(p p1,p p2);}public class demo { public static void main(string args[]){ ifunction fun = string :: compareto ; //string类中的conpareto方法 system.out.println(fun.compare(a,a)); }}输出结果为:-34
2.4 引用构造方法public class person { private string name; private int age; public person(string name,int age){ this.name = name; this.age = age; } public string tostring(){ return 姓名: + this.name + 、年级: + this.age ; }}@functionalinterface //函数式接口public interface ifunction { public r create(string s ,int a);}public class demo { public static void main(string args[]){ ifunction fun = person :: new ; //string类中的conpareto方法 system.out.println(fun.create(张三,20)); }}输出结果:姓名:张三、年级:20
提供方法引用的概念更多情况下也只是弥补了对于引用的支持功能。
3 小结本文介绍了java8的新特性,lambda和方法引用,其为我们编程带来了便利,所以我们应该需要掌握它。

为避贸易战影响 富士康扩产印度产线
智能复合型锁具应用方案
深圳市加快完善5G网络服务体系
安科瑞直流电表在荷兰光伏充电桩系统中的应用
MAX9150的应用电路图
Java8的新特性
宝马研发无人机洗车系统 可清洁自动驾驶汽车传感器
半导体行业专家聚力前行,齐聚深圳共创芯时代!预定参会席位~
新一代快充芯片U6203D适用于充电器/QC2.0的快充和QC3.0的快充
浅谈通信设备用光电子器件可靠性测试标准GR-468(上)
DWDM技术原理及其在城域网中的应用
Ka频段需要更多带宽?这里有三个选项
贴片元件的焊接教程 - 拖焊技巧
基于JMP软件侦测产线控制异常及改进GRR
智慧城市需要支撑 不需要幻想
大疆痛下反腐狠手:涉案百余人,预计损失超10亿元
博通加入WirelessHD联盟,助力无线高清
各大主机厂在SIC/IGBT模块上的布局分析
识别技术哪家强:指纹识别最成熟、虹膜识别最安全、人脸识别最广泛
如何实现无传感器初始位置检测