java创新_Java9的创新

预计新的Java版本9将发布2017年7月27日。让我们来看看有什么特点的意志,并解释为什么需要他们。

这里是一个重要的创新的Java 9列表:

随着示例的帮助下告诉你更多关于这些功能。

JShell

REPL(读英语-EVAL-打印循环。) - 在控制台交互编程系统。也就是说,如果用户输入的线的上控制台代码出现它的执行的结果,并且重复该过程。

甲骨文推出了一个名为«JShell»新工具。它用于测试和使用在控制台不同的设计,诸如类,接口,枚举,对象,操作员等

顺便说一句,现在你可以下载JDK 9的beta版本,从官方网站下载。

与JShell工作的最简单的例子:

G:\>jshell

| Welcome to JShell -- Version 9-ea

| For an introduction type: /help intro

jshell> int a = 10

a ==> 10

jshell> System.out.println("a value = " + a)

a value = 10

不可变对象名单,设置和地图“开箱即用”

甲骨文推出一些简便的方法,而无需使用额外的类来创建不可改变的名单,设置,地图和Map.Entry对象

在Java SE 8级更早的版本中,我们可以使用Collections.unmodifiableXXX创建不变对象的集合。举例来说,如果我们要建立不可变列表,我们将使用Collections.unmodifiableList方法。

然而,这是不方便的,因此甲骨文还增加了一些辅助的方法来接口列表,Set和Map。

集列表和接口(方法)。其使用的例子可以看到下面:

List immutableList = List.of(); // 空的不可变列表

List immutableList = List.of("one","two","three"); // 不可改变包含列表信息

地图有两套方法:()方法和ofEntries()方法来创建对象的不可变的映射和Map.Entry的。

jshell> Map emptyImmutableMap = Map.of()

emptyImmutableMap ==> {} // 空不可变的显示

jshell> Map nonemptyImmutableMap = Map.of(1, "one", 2, "two", 3, "three")

nonemptyImmutableMap ==> {2=two, 3=three, 1=one} // 显示不变

接口私有方法

在Java 8中,我们可以保证该方法的接口使用默认和静态方法的实现。但是,我们不能创建在接口私有方法。

为了摆脱杂乱,且甲骨文代码的过剩将会在Java SE中添加私有方法9.接口与第九版开始,我们还可以使用私有创建接口的私人静态方法。

创建默认的接口方法实现

1

2

3

4

5

6

7

8

9

10

11

12

13

14

public

interface

Card

{

private

Long

createCardID

(

)

{

// 此方法实现是怎么回事。

}

private

static

void

displayCardDetails

(

)

{

// 此方法实现是怎么回事。

}

}

模块化系统

其中最显著的变化是一个模块化系统的出现。之前,我们使用的Java 9 JAR-文件基础上开发的Java应用程序。然而,这种结构有一些局限性和缺点。为了消除它们,并推出了模块化系统。这种创新是拼图,它正在开发,以确保程序员可以在程序分成独立和交叉程序模块的一部分。

下面是一些本系统的特点:

模块化JDK;

模块化Java源代码;

模块化运行时图像;

内部API的封装;

模块化的系统平台;

JDK 9与92个模块提供。我们可以使用它们或创建自己的,例如:

1

module

com

.

foo

.

bar

{

}

每个模块都有一个名字相关的代码和其他资源。

提高API

据预计,在Java SE 9将改进关于API的一部分。几个新类和操作系统行为的更好的管理方法添加。

在进程API两个新的界面:

java.lang.ProcessHandle;

java.lang.ProcessHandle.Info。

示例处理API:

1

2

3

ProcessHandle

currentProcess

=

ProcessHandle

.

current

(

)

;

System

.

out

.

println

(

"Current Process Id: = "

+

currentProcess

.

getPid

(

)

)

;

在这里,我们ProcessHandle类型创建与操作系统行动工作对象。

try-with-resources变化

我们知道,在Java SE 7中有一个新的异常处理的设计尝试,随着国际资源进行自动的资源管理。在Java SE 9要对设计进行一些修改,以提高可读性。

在Java SE 7的一个例子:

1

2

3

4

5

6

7

8

9

void

testARM_Before_Java9

(

)

throws

IOException

{

BufferedReader

reader1

=

new

BufferedReader

(

new

FileReader

(

"journaldev.txt"

)

)

;

try

(

BufferedReader

reader2

=

reader1

)

{

System

.

out

.

println

(

reader2

.

readLine

(

)

)

;

}

}

Java 9例子:

1

2

3

4

5

6

7

8

9

void

testARM_Java9

(

)

throws

IOException

{

BufferedReader

reader1

=

new

BufferedReader

(

new

FileReader

(

"journaldev.txt"

)

)

;

try

(

reader1

)

{

System

.

out

.

println

(

reader1

.

readLine

(

)

)

;

}

}

可以注意到的是,在新版本中,后尝试没有必要声明一个新变量。

在CompletableFuture API创新

在Java中9,Oracle还打算改善CompletableFuture API来解决已经出现在Java SE 8的计划增加的延迟和超时,更多的手段和完善的子类的问题。

例如:

1

Executor

exe

=

CompletableFuture

.

delayedExecutor

(

50L

,

TimeUnit

.

SECONDS

)

;

有delayedExecutor() - 用于返回延时,在预定延迟后的静态方法

反应式编程

对于那些谁不熟悉的反应式编程范式,我们建议您阅读我们的介绍与实例的话题。

在Scala中,播放,阿卡已经集成反应流。甲骨文决定增加无功流API在Java SE 9。

Java SE的反应9 API流 - 实现使用Java异步的,可扩展性和并行应用程序的框架。

在Java SE 9会看到下面的API:

java.util.concurrent.Flow;

java.util.concurrent.Flow.Publisher;

java.util.concurrent.Flow.Subscriber;

java.util.concurrent.Flow.Processor。

Diamond 运营商匿名类

假设我们有一个类箱,我们希望把它匿名。

以下是Java 8的过程:

1

2

3

4

5

Box

createBox

(

T

content

)

{

// 我们需要把“T”这里:(

return

new

Box

(

content

)

{

}

;

}

这不是很明显的是,箱应该是T型的?在非匿名类的情况下,编译器会选择合适的类型,为什么不能做相同的匿名?

这个问题不指定(英语非denotable)由编译器和JVM识别的类型 - 不。 (这种情况下可以通过编译器来处理,但问题是 - 如何正确地传达它的JVM)

因此Diamond 语句是不允许使用匿名类。现在,它是可能的。

下面是它看起来如何在Java中9:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

class

inJava

{

<

T

>

Box

<

T

>

createBox

(

T

content

)

{

// Java 9 只显示“T”,因为这种类型的指定

return

new

Box

<>

(

content

)

{

}

;

}

Box

>

createCrazyBox

(

Object

content

)

{

List

>

innerList

=

Arrays

.

asList

(

content

)

;

//这种类型不会出现,因为我们不能将其标记:

//返回新盒<>(innerList){};

//相反,我们表示,我们需要的类型:

return

new

Box

<

List

<

?

>>

(

innerList

)

{

}

;

}

}

类的其他改进

在Java SE 9甲骨文增加了许多的java.util.Optional有用的技术。

这里有一个例子是怎么流的方法:

1

2

3

Stream

<

Optional

>

emp

=

getEmployee

(

id

)

;

Stream

empStream

=

emp

.

flatMap

(

Optional

::

stream

)

;

它使用Optional.stream()方法,它转换Employee流中的一切。

改进 Stream API

新版本将至少有四种方法java.util.Stream。像流,他们都将是标准。这是最重要的,dropWhile takeWhile方法。

如果你熟悉的语言和Scala的函数式编程,你一定要学会这些技术。

最简单的使用流:

1

jshell

>

Stream

.

of

(

1

,

2

,

3

,

4

,

5

,

6

,

7

,

8

,

9

,

10

)

.

takeWhile

(

i

->

i

<

5

)

.

forEach

(

System

.

out

::

println

)

;

高级注释 @Deprecated

在此之前的Java 9 @Deprecated - 只是一个标记接口。许多开发人员提供甲骨文提高对过时的API能力的认识。他们听到,并添加了过时的API合作的可能性。例如,有分析工具 - forRemoval以来。

HTTP/2 客户端

甲骨文计划推出为HTTP / 2和WebSocket协议一个新的HTTP客户端的支持。他们更换HttpURLConnection的API到一个新的,更高效。

新的API将在«java.net.http»包装呈现。它同时支持同步和异步模式。

新的API可以在甲骨文的文档部分的官方网站上找到。

实施例HTTP / 2客户端:

1

2

3

4

5

6

7

8

9

10

11

12

13

jshell

>

import

java

.

net

.

http

.

*

jshell

>

import

static

java

.

net

.

http

.

HttpRequest

.

*

jshell

>

import

static

java

.

net

.

http

.

HttpResponse

.

*

jshell

>

URI

uri

=

new

URI

(

"http://rams4java.blogspot.co.uk/2016/05/java-news.html"

)

uri

==

>

http

:

//rams4java.blogspot.co.uk/2016/05/java-news.html

jshell

>

HttpResponse

response

=

HttpRequest

.

create

(

uri

)

.

body

(

noBody

(

)

)

.

GET

(

)

.

response

(

)

response

==

>

java

.

net

.

http

.

HttpResponseImpl

@

79efed2d

jshell

>

System

.

out

.

println

(

"Response was "

+

response

.

body

(

asString

(

)

)

)

API 与不同分辨率的图像

甲骨文计划推出一个新的API为不同的图像分辨率。最重要的是java.awt.image中封装MultiResolutionImage接口。

其他变化

更改垃圾收集器; 在API堆栈行走的变化; 过滤传入数据序列; 禁用API小程序; 更改级联; 改进MethodHandle; 记录; 对于Nashorn API解析器; 搜索的JavaDoc; HTML5的JavaDoc。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值