咋弄嘞?Java8都不溜呢,10都如约而至,还109 项新特性!!!

String getMethodType:返回此堆栈帧所代表的方法类型,描述参数类型和返回值类型。

java.lang.invoke.MethodType:

Class> lastParameterType:返回这个方法类型的最后一个参数类型。如果这个方法类型没有参数,则返回空类型作为岗哨值(Sentinel Value)。

java.lang.management.RuntimeMXBean:

long getPid: R返回正在运行的 JVM的进程 ID 。

java.lang.management.ThreadMXBean:

ThreadInfo dumpAllThreads(boolean, boolean, int):返回所有活动线程的线程信息,其中有指定的最大元素数量和同步信息的堆栈跟踪。

ThreadInfo getThreadInfo(long, boolean, boolean, int):返回每个线程的线程信息,这些线程的标识位于输入数组中,其中有指定的最大元素数量和同步信息的堆栈跟踪。

java.lang.reflect.MalformedParameterizedTypeException:添加了一个新的构造函数,它以字符串的形式作为参数来获取详细信息。

java.net.URLDecoder:

java.net.URLEncoder:

这两个类都有新的重载的解码和编码方法,将 charset作为附加参数。

  • java.nio.channels.Channels:

    两个新的静态重载方法,允许使用 Charset的 newReader(ReadByteChannel,Charset)和newWriter(WriteByteChannel,Charset)。

  • java.nio.file.FileStore:

    long getBlockSize:在这个文件存储中返回每个块的字节数。

  • java.time.chrono:这个包里有三个类,HijrahEra、MiinguoEra和 ThaiBuddhistEra ,都有同样的方法。

    String getDisplayName(TextStyle, Locale):这将返回用于识别 era的文本名称,适合于向用户展示。

  • java.time.format.DateTimeFormatter:

    localizedBy(Locale):返回指定格式器的一个副本,其中包含地区、日历、区域、小数和/或时区的本地化值,这将取代该格式器中的值。

  • java.util: DoubleSummaryStatistics、IntSummaryStatistics和 LongSummaryStatistics都有一个新的构造函数,它包含 4个数值。它使用指定的计数、最小值、最大值和总和构造一个非空实例。

  • java.util.List:

    java.util.Map:

    java.util.Set:这些接口中的每一个都增加了一个新的静态方法,copyOf(Collection)。这些函数按照其迭代顺序返回一个不可修改的列表、映射或包含给定集合的元素的集合。

  • java.util.Optional:

    java.util.OptionalDouble:

    java.util.OptionalInt:

    java.util.OptionalLong:每一个类都有一个新的方法,orElseThrow ,它本质上和 get一样,也就是说,如果 Optional有值则返回。否则,将抛出 NoSuchElementException 。

  • java.util.Formatter:

    java.util.Scanner:

    这两个类都有三个新的构造函数,除了其他参数之外,它们都带有一个 charset参数。

java.util.Properties:这有一个新的构造函数,它接受一个 int参数。这将创建一个没有默认值的空属性列表,并且指定初始大小以容纳指定的元素数量,而无需动态调整大小。还有一个新的重载的 replace方法,接受三个 Object参数并返回一个布尔值。只有在当前映射到指定值时,才会替换指定键的条目。

java.SplittableRandom:

void nextBytes(byte):用生成的伪随机字节填充一个用户提供的字节数组。

java.util.concurrent.FutureTask:添加了 toString方法,该方法返回一个标识 FutureTask的字符串,以及它的完成状态。在括号中,状态包含如下字符串中的一个,“Completed Normally” 、“Completed Exceptionally”、 “Cancelled”或者 “Not completed”。

java.util.concurrent.locks.StampedLock:

boolean isLockStamp(long):返回一个标记戳表示是否持有一个锁。

boolean isOptimisticReadStamp(long):返回一个标记戳代表是否成功的进行了乐观读(optimistic read)。

boolean isReadLockStamp(long):返回一个标记戳表示是否持有一个非独占锁(即 read lock )。

boolean isWriteLockStamp(long):返回一个标记戳表示是否持有一个独占锁(即 write lock )。

java.jar.JarEntry:

String getRealName:返回这个 JarEntry的真实名称。如果这个 JarEntry是一个多版本 jar文件的入口,它被配置为这样处理,这个方法返回的名字是 JarEntry所代表的版本条目的入口,而不是 ZipEntry.getName返回的基本条目的路径名。如果 JarEntry不代表一个多版本 jar文件的版本化条目或者 jar文件没有被配置为作为一个多版本 jar文件进行处理,这个方法将返回与 ZipEntry.getName返回的相同名称。

java.util.jar.JarFile:

Stream versionedStream:返回 jar文件中指定版本的入口对应 Stream 。与 JarEntry的 getRealName方法类似,这与多版本 jar文件有关。

java.util.spi.LocaleNameProvider:

getDisplayUnicodeExtensionKey(String, Locale):为给定的 Unicode扩展键返回一个本地化名称。

getDisplayUnicodeExtensionType(String, String, Locale):

java.util.stream.Collectors:

toUnmodifiableList:

toUnmodifiableSet:

toUnmodifiableMap(Function, Function):

toUnmodifiableMap(Function, Function, BinaryOperator):这四个新方法都返回 Collectors ,将输入元素聚集到适当的不可修改的集合中。

  • java.lang.model.SourceVersion:现在有了一个字段,它代表了 JDK 10的版本。

  • java.lang.model.util.TypeKindVisitor6:

    javax.lang.model.util.TypeKindVisitor9:

    (我必须承认,我从来没听说过这些类)

    R visitNoTypeAsModule(NoType, P):访问一个 MODULE的 pseudo-type 。我不确定为什么只有这两个类得到这个方法,因为还有 Visitor7和 Visitor8变量。

  • javax.remote.management.rmi.RMIConnectorServer:

    这个类已经添加了两个字段: CREDENTIALS_FILTER_PATTERN和 SERIAL_FILTER_PATTERN 。

  • javax.ButtonModel:看,Swing还在更新!

    ButtonGroup getGroup:返回按钮所属的组。通常用于单选按钮,它们在组中是互斥的。

  • javax.plaf.basic.BasicMenuUI:

    Dimension getMinimumSize(JComponent):返回指定组件适合观感的最小大小。

JVM规范改动

这些改动相当小:

  • 4.6节:类文件格式(第99页)。在方法访问标志方面有小的改动。

  • 4.7节:模块属性(第169页)。如果模块不是 java.base ,则 JDK 10不再允许设置 ACC_TRANSITIVE或 ACC_STATIC_PHASE 。

  • 4.10节:类文件的校验(第252页)。dup2指令已改变了 typesafe form 1的定义,颠倒了 canSafleyPushList一节中类型的顺序(你需要仔细查看才能发现它)。

  • 5.2节:Java虚拟机启动(第350页)。该描述添加了在创建初始类或接口时可使用用户定义的类加载器( bootstrap类加载器除外)。

对 Java语言规范的更改

这里还有一些更改,但主要是为了支持局部变量类型推断。

  • 第3.8节:标识符(第23页)。在忽略了可忽略的字符之后,标识符的等价性现在被考虑了。这似乎是合乎逻辑的。

    (第24页)一个新的 Token,TypeIdentifier,它支持对局部变量类型推断的新用法,而 var的使用不是关键字,而是一个具有特殊含义的标识符,作为局部变量声明的类型。

  • 第4.10.5节:类型预测(第76页)。这是一个相当复杂的部分,它涉及到捕获变量、嵌套类以及如何使用局部变量类型推断。我建议你阅读规范中的这一部分,而不是试图解释它。

  • 第6.1节:声明(第134页)。一个反映使用 TypeIdentifier来支持局部变量类型的推断的小改动。

  • 第6.5节:确定名字的含义(第153页,第158页和第159页)。根据类型标识符的使用而更改类类型。

  • 第6.5.4.1:简单的 PackageOrTypeNames(第160页)

  • 第6.5.4.2节:合规的 PackageOrTypeNames(第160页)。这两种方式都与使用 TypeIdentifier有细微的变化。

  • 第7.5.3:单静态导入声明(第191页)。这改变了导入具有相同名称的静态类型的规则。除非类型是相同的,否则这将成为一个错误,在这种情况下,重复被忽略。

  • 第7.7.1:依赖(第198页)。如果你明确声明一个模块需要 java.base ,那在必要的关键字之后,你就不能再使用修饰符(例如静态)了。

  • 第8部分:正式参数(第244页)。接收者参数可能只出现在一个实例方法的 formalparameters列表,或者是一个内部类的构造函数中,其中内部类没有在静态上下文中声明。

  • 第9.7.4节:注释可能出现的地方(第335页)。有一个与局部变量类型推断相关的变更。

  • 第14.4部分:局部变量声明语句(第433页)。实现局部变量类型推断所需的大量更改。

  • 第14节:增强的 for语句(第455页)。这个结构已经更新,包括对局部变量类型推断的支持。

  • 第14.20.3节:try-with-resources(474页)。这个结构已经更新,包括对局部变量类型推断的支持。

最后,第 19章有多处语法更新,反映了应更多使用 TypeIdentifier类型标识符,而不仅仅是 Identifier标识符,以支持局部变量类型推断。

杂项

  • 如果 Kerberos的配置文件 krb5.conf包含一个 INCLUDEDIR选项,那么在 INCLUDEDIR这个目录下所有以 .conf结尾的文件都会被默认加载进来。

  • 以前版本中已经过期的 Java的启动选项 -d32和 –d64在当前版本已经被移除。如果你在新的版本里仍然使用了这两个选项,JVM将无法正常启动。

  • JDK10支持 JDK9中的新版本 Doclet,JDK6、JDK7、JDK8中的 Doclet版本都不再支持。

  • JDK10重新启用了在 JDK9中被不当过时的 newFactory方法。

  • JDK10引入了一个新的 Javadoc标签: {@summary…},解决了以前版本无法生成 API摘要的问题。

  • JDK10去掉了 BiasedLockingStartupDelay的 4秒启动延时。

  • 以下在 com.sun.security.auth包中的过时的类在新版本中都已经被移除:

    • PolicyFile

    • SolarisNumericGroupPrincipal

    • SolarisNumericUserPrincipal

    • X500Principal

    • SolarisLoginModule

    • SolarisSystem

  • 在 java.lang.SecurityManager类中的以下属性和方法(从 JDK 1.2就已经过时)终于被移除了:

    • inCheck (属性)

    • getInCheck

    • classDepth

    • classLoaderDepth

    • currentClassLoader

    • currentLoadedClass

    • inClass

    • inClassLoader

  • 以下 java.lang.Runtime类中已经被废弃的国际化方法在新版本被移除:

    • getLocalizedInputStream

    • getLocalizedOutputStream

  • 以下废弃的 Hotspot –X选项在新版本中被移除:-Xoss, -Xsqnopause, -Xoptimize, -Xboundthreads and –Xusealtsigs.

  • policytool在新版本中被移除。

  • javadoc工具在新版本中可以通过 –add-stylesheets命令选项支持多个 stylesheets 。

  • 新版本的 JVM能够根据系统分配给当前 Docker容器的 CPU数和内存来配置线程池和 GC机制,而不再是直接使用系统的 CPU和内存。并且增加了三个更强大的命令选项:-XX:InitialRAMPercentage、-XX:MaxRAMPercentage和 -XX:MinRAMPercentage 。

  • 新版本增加了一个新的系统属性:jdk.disableLastUsageTracking。这个新增的属性就像它的名字一样,会禁用 JRE的上一次使用跟踪。

如上所述,尽管距离 JDK 9发布仅有六个月的时间,但 JDK 10实际上有相当多的变化。当然,它们中的一些是非常小的变更,但我认为这表明目前每 6个月发布一次的节奏,将在 Java平台快速迭代改进方面起到作用。

同时也让我们期待 JDK 11将带来些什么…

相关链接

  • http://docs.oracle.com/javase/10/docs/technotes/guides/install/install_overview.html

  • http://www.oracle.com/technetwork/java/javase/documentation/10u-relnotes-4108739.html

  • http://www.oracle.com/technetwork/java/javase/10-relnote-issues-4108729.html#NewFeature


分享到:


相關文章: