J2EE 8 新特性

先看一下Java发展史。

Java诞生在1995年,对应的JDK工具是jdk1.0,jdk1.1。到了1999年推出了Java 2 EE (Java 2 Platform, Enterprise Edition),是一整套JAVA企业应用开发规范,对应的jdk是1.2,也叫J2EE 1.2, 此后陆续推出J2EE 1.3,J2EE 1.4,  到了J2EE 1.5 改名为Java EE 5, 2017年推出Java EE 8,也是最新的Java EE版本。与Java EE对应的有Java SE(Java Standard Edition),

目最新的是Java SE 10。

   Java EE有哪些规范呢?

Specification

Java EE 6

Java EE 7

Java EE 8

Servlet

3.0

3.1

4.0

JavaServer Pages (JSP)

2.2

2.3

2.3

Unified Expression Language (EL)

2.2

3.0

3.0

Debugging Support for Other Languages (JSR-45)

1.0

1.0

1.0

JavaServer Pages Standard Tag Library (JSTL)

1.2

1.2

1.2

JavaServer Faces (JSF)

2.0

2.2

2.3

Java API for RESTful Web Services (JAX-RS)

1.1

2.0

2.1

Java API for WebSocket (WebSocket)

n/a

1.0

1.1

Java API for JSON Processing (JSON-P)

n/a

1.0

1.1

Common Annotations for the Java Platform (JSR-250)

1.1

1.2

1.3

Enterprise JavaBeans (EJB)

3.1 Lite

3.2 Lite

3.2

Java Transaction API (JTA)

1.1

1.2

1.2

Java Persistence API (JPA)

2.0

2.1

2.2

Bean Validation

1.0

1.1

2.0

Managed Beans

1.0

1.0

1.0

Interceptors

1.1

1.2

1.2

Contexts and Dependency Injection for the Java EE Platform

1.0

1.1

2.0

Dependency Injection for Java

1.0

1.0

1.0

 

Java是运行在Java虚拟机(JVM)上的, 除了JAVA 还有哪些语言运行在JVM上呢?

主要的有:kotlin、Scala、Clojure、Groovy、Jython、JRuby、Ceylon、Eta、Haxe。

Java EE 8 有哪些新特性?

1. 流处理(Stream Processing)

流操作就是一个操作序列,前一项的输出是后一项的输入,看上去像一条操作流水线。这些操作本质上并行操作的。举个例子,Unix的cat、tr、sort、tail命令:

cat file1 file2 | tr "[A-Z]" "[a-z]" | sort | tail -3

Java 8在java.util.Stream包中增加了Stream API,使用这种流处理模式,Java 8 可以透明地把不相关的操作放到多个CPU的多个内核上并行执行。

 

2、把一段代码作为参数传递给另外一个方法

也就是把一个方法作为参数传递给另外一个方法,这就是函数式编程范式,相对应的有命令式编程(面向对象编程属于命令式编程)。

函数式编程范式需要注意两点:一是不能访问共享的可变数据、二是能够把安函数或方法也就代码作为参数传给另外一个方法。

函数式编程与面向对象编程各有优缺点,我们的理念式吸收两者优秀的部分,Java不断在演变,为了保护我们作为Java程序员的职业生涯,需要我们去学习Java 8。

在Java中有基本类型的值,比如整数值123、双精度数123.66、字符串值’123’,也有引用类型的值,比如象的引用值、数组的引用值。在Java8中引入了函数式编程,可以把函数也当作值,函数和方法式同一个概念,也就是把方法当作一个值。

举例,筛选一个目录中所有隐藏的文件:

这里把File类中的isHidden方法作为参数传给了File类的另外一个方法listFiles。注意java 8提供了方法引用语法 :: 两个冒号。

Java 8除了允许把函数(方法)作为值,还支持匿名函数作为值,包括Lambda (匿名函数),举例如下:(Integer x)->  x +1 ,把x作为输入参数,x+1作为输出结果。

3、  Stream API(流)

流允许以声明性方式处理数据集合,集合类式Java中重要的数据对象,Java 8 可以用流的方式操作集合数据。举例:

注意parallelStream()式并行流计算,可以充分利用多CPU和多核计算。

 

4 默认方法

上面的例子List抽象类继承自Collection接口,ArrayList是List抽象类的具体实现子类,在Java 8之前,无论ArrayList、List还是Collection里都没有提供stream和parallelStream() 方法。

难道Java 8 为Collection接口增加了新的方法了吗?

其实是Java8在接口中增加了一个默认的方法并实现了它,不需要这个接口的实现类去实现。打开Collection.java源码,可以看到:

这就给接口设计者提供一种扩充接口的方式,而有不会破坏现有的代码。Java8在接口声明中使用新的default关键字来表示这一点。

你可能感兴趣的:(J2EE 8 新特性)