此次版本升级,从根源上讲,就是为了改进Java现有的生态系统。你们都知道,java相比于.net性能差了不少,运行时间也大大超出了一些计算密集项目的预算。因此Java如今主要应用在Web上,优点比较明显,在于他的灵活和模块强大,学习曲线不是很陡峭。可是对于服务器衍生产品或者对于安全性很高的金融系统,java就显得有点不够用。java
经过函数式编程和并发特性的引入,使得java的运行效率和安全性更高。其中要提到的就是Lambda表达式和Closure特性。express
一般,在数学和计算机科学领域,一个Lambda表达式就是一个函数:对于部分或所有的输入组合值,它都指定一个输出值。而在java 8中的Lambda表达式是将函数的思想引入语言。函数能够做为方法的参数经过某种方式传入参数列表中。编程
Lambda的语法通常为:安全
(parameters) -> expression
服务器
or多线程
(parameters) -> { statements; }
闭包
典型的例子:并发
1. (int x, int y) -> x + y // 传入两个整数,返回他们的和 2. (x, y) -> x - y // 传入两个整数,返回他们的差 3. () -> 42 // 不传参,返回42 4. (String s) -> System.out.println(s) // 传入一个字符串,在控制台打印出他的值,方法自己无返回值 5. x -> 2 * x // 传入一个整数,返回他的2倍数值 6. c -> { int s = c.size(); c.clear(); return s; } // 传入一个集合,清空他,而后返回他(清空以前)的长度
Lambda更像js中的闭包特性。使得遍历集合时更加简洁。
函数式编程
public void anonymousTest() { String isFinalVariable = "最终返回值"; String variable = "外部变量"; new Thread(new Runnable() { String variable = "多线程类成员"; public void run() { String variable = "这是局部变量"; System.out.println("->" + variable); System.out.println("->" + this.variable); } }).start(); }
运行结果:函数
这是局部变量 多线程类成员
总的来讲,新版的JDK将更多之前函数式语言才具有的特性(表明:Haskell语言)融入到java中,使得java在高数值计算密度的项目中应用的可能性大大加强。同时,对于并发编程(表明:Erlang语言)的支持也愈来愈好,在符合摩尔定律的硬件性能提高的年代,更能匹配大型企业项目的技术选型。