了解一下Java 8 (一)

TalkingData_DDD 发布于 2016/01/20 17:11
阅读 1K+
收藏 9

2015年公司发展迅速,于是大量的时间花费在招聘上。招聘工程师,必然需要了解候选人的技术能力,尤其是对自己使用的技术的了解程度。优秀的工程师都需要知其然,也知其所以然,否则遇到技术难题就只能呵呵了。而对于面试官来讲,如果想要了解候选人的真实技术水平,自己也需要对技术有足够的了解。最近两年由于琐事越来越多,更多的时间是关注大数据的一些技术的发展,可是一些曾经自己很关注的技术却有些生疏了,比如Java语言和Java虚拟机的一些发展情况。2016年,决定每周花些时间来了解更为基础的技术,这两年往外倒的多,需要冲些电进来了。Java 9已经快出来了,不过Java 8我却还没有足够的了解,先从Java 8开始,逐渐重试基础知识。

Java Interface的变化

在面试一些初级程序员时,我经常会问他们关于Java Interface和abstract class的一些区别。在Java 8以前,Interface中只能存在抽象方法,可是在Java 8之中,Interface有了变化,引入了Default Methods,所谓默认方法。在Interface中,可以将具体的方法的实现用 default 关键字来修饰,这样就可以实现多继承了。例如,我定义一个IHelloWorld接口,其中sbSayHello这个方法我希望所有实现这个接口的类都可以继承使用,我就可以这样定义接口:

其中sayHello会要求继承的类去实现它,而sbSayHello则可以被直接实现的类继承使用。

比如:

另外,对于接口,我也可以匿名对象,例如:

这个时候,Java 8中会建议用lambda表达式来进行匿名的实现,因为lambda表达式更为简洁。

Lambda表达式

随着Spark越来越火爆,Scala语言也有了越来越多的使用者,Scala语言作为函数式编程语言,函数是一等公民。而Java作为一个具有超过20年历史的老语言,也在与时俱进的引入新的特性,比如Lambda表达式。在Java当中,lambda表达式本质上就是一个你们方法的实现,只不过更简洁。比如,上边的匿名函数的实现,就可以变为:

这个表达方法已经很像Scala语言的实现了。在Java 8中,如果要用Lambda表达式,需要它的目标类型是函数接口(Functional Interface)。具体来说,一个Interface只能有一个抽象方法,比如我前面的IHelloWorld就只有一个抽象方法sayHello。为了保证接口是函数接口,Java 8引入了一个叫做FunctionalInterface的Annotation,用于修饰接口,比如前面接口的定义可以改为:

这个时候,你如果尝试再增加一个抽象接口,编译器就会报错。

Method Reference

Java 8引入了一个方法引用method reference的概念,方法引用通过"::"来表达,比如如下的例子:

另外,方法引用可以引用对象方法以及类的构造方法。比如引用对象方法:

定义一个工厂接口DeviceFactory:


在生成Device的时候,可以用如下的代码:

Java 8的lambda表达式、方法引用等等特性使得Java开始逐渐的支持了函数式语言的一些特性,而Java 8的实现中,有一些已经支持的函数接口,从而方便之处Lambda表达式,后边再逐一进行研究。

加载中
0
叶子夜游
叶子夜游
有多少公司会用java8的?不怕其他框架跟不上?除非所有架构都是自己手写~~连底层,如SSH,SPRINGMVC的框架都自己写~~~那你用java8就没什么风险。
逝水流炎
逝水流炎
spring用的好好的,就是没用h不知道情况。用的mybatis
木有芒果
木有芒果
我们公司就用的java8,java8给我的感觉更多是编出更优雅的java代码,其次采用stream方式处理集合在当前多核机子上效率更高啊,并发也更安全,全是编译器自己去处理并发,不需要我们自己再想写出点高并发的代码到处踩坑
maradona
maradona
向后兼容吧,只是新增语法糖,又没修改删除以前的语法规则
pseudo
pseudo
知道什么叫向后兼容么
0
护士的小黄瓜
护士的小黄瓜

引用来自“叶子夜游”的评论

有多少公司会用java8的?不怕其他框架跟不上?除非所有架构都是自己手写~~连底层,如SSH,SPRINGMVC的框架都自己写~~~那你用java8就没什么风险。
这就是你一直在用Java5的理由?这就是你不学习的理由?spring早就支持Java8了
叶子夜游
叶子夜游
老子用的叫java7,别拿你的逗比思想挑战我智商。就用过一两个框架就瞎鸡巴催。spring属于热门框架,专门的开源组织维护,有空就滚去maven仓库看看其他开源框架的release时间。看你与语气就一个长年累月的码农
0
b
ben哥
java编程jdk64/32位、各类教程下载  http://858597930.qzone.qq.com
0
九千里
九千里
我最喜欢看程序员之间撕逼了,哈哈哈哈哈哈哈哈哈
0
开源火星
现在有的客户已经开始要求必须用Java8了,定制项目的话,还是要用到的。对于老猿们来说,Java8也就是一个新一点的玩具而已。
0
奶丶空瓶
奶丶空瓶
除了指针,java和c++有点相似了
2
21313
你让jvm情何以堪
0
l
lxgy
sbSayHello是什么方法啊
0
返回顶部
顶部