除了上面介绍的这些比较大的特性,Java9还存在着一些比较小的特性,我们就不一一展开了,只将它们罗列再此对GC(垃圾收集器)改进堆遍历(Stack-Walking)API过滤输入的序列化数据废弃了AppletAPIIndifyStringConcatenationEnhancedMethodHandlesJava平台日志记录API和服务器(Service)紧凑的字符串(CompactStrings)Nashorn的解析API结束语从这短短的十几篇讲解,我们可以看到Java9的新特性并没有Java8那么多大多数都是对Java8的增强而已。所以,是一个被忽略的改版。因为在语法在没有大的更新,所以,
Java9同时为CompletableFuture类添加了一些工厂方法completedFuture(Uvalue)工厂方法completedFuture(Uvalue)工厂方法的原型如下publicstatic<U>CompletableFuture<U>completedFuture(Uvalue)此工厂方法返回一个已完成的、使用给定值的新CompletableFuture。completedStage(Uvalue)工厂方法completedStage(Uvalue)工厂方法的原型如下publicstatic<U>CompletionStage<
CompletableFuture类是在Java8引入的。用于表示一个Feture的状态,可以通过设置其值或状态来明确表示Feture处于完成状态说起来特拗口,理解起来就简单了那个,Java8不是引入了并发编程了,对吧。并发编程里有一个概念就是并发执行是否完成了。这个是否完成了是由java.util.concurrent.CompletionStage来表示的。然后呢,CompletableFuture是CompletionStage的父类。如果你对Java的并发编程熟悉,那么一定直到,当并发完成时可以支持一个回调,这个回调也是由CompletableFuture提供的。有时候会觉得,一个特性
上一章节中我们提到,Java9添加了CompletableFuture类的子类化的支持。其实呢?Java9对CompletableFuture类的子类化的支持也是新增了两个方法。一个是defaultExecutor()方法,返回默认的执行器(Executor),一个是newIncompleteFuture()返回一个CompletableFuture的新实例。下面,我们就一一介绍这两个方法吧。注意:这个两个方法都是由CompletableFuture类提供的。defaultExecutor()方法defaultExecutor()方法的原型如下publicExecutordefaultExec
Java9引入了一种新的多分辨率图像API,它支持具有不同分辨率变体的多个图像这些API允许将具有不同分辨率的一组图像用作单个多分辨率图像方法说明getResolutionVariant(doubledestImageWidth,doubledestImageHeight)获取特定图像,该图像是表示指定大小的逻辑图像的最佳变体getResolutionVariants()以可读列表的形式返回所有分辨率变体接下来我们就来看看两个API如何使用吧。假设存在三张图片它们的地址分别为https://www.twle.cn/static/upload/img/2018/09/03/20180903060
方块操作符(<>)在Java7中就引入了,目的是为了使代码更可读。但是呢,这个操作符一直不能在匿名内部类中使用Java9修正了这个问题,就是可以在匿名内部类中使用方块操作符了,在匿名类大行其道的今天,这才叫优化了阅读体验...我们来看看一段Java9之前的代码DiamondOperatorTester.javapublicclassDiamondOperatorTester{publicstaticvoidmain(String[]args){Handler<Integer>intHandler=newHandler<Integer>(1){@Overrid
其实Option类在Java8中就引入了,用于避免null检查和NullPointerException指针问题Java9中,又为该类添加了三个方法来改进它的功能方法说明stream()返回包含值的流,如果值不存在,则返回空流ifPresentOrElse()如果值存在则对值执行一些操作,否则执行另一个操作or()如果值存在,则返回用于描述该值的Option,如果不存在则生成一个值steam()方法steam()方法的原型如下publicOptional<T>or(Supplier<?extendsOptional<?extendsT>>supplier)如
@Deprecated注解很早就存在了,如果我记得没错的话,好像是Java5(后来我去查了资料,也的确是Java5就引入了)。一个使用@Deprecated注解的元素,无论是一个类或是一个方法,可能是由以下原因导致了不应该再使用它使用它可能会导致错误在未来的版本中不被兼容在未来的版本中可能会被删除存在更好的更有效的替代方法如果一个程序或代码片段使用了@Deprecated注解的元素,那么编译器就会生成一个警告信息,表明这个元素是不被推荐使用的。我们都一直延续了这样的习惯好久,直到Java9的发布,我才发现@Deprecated注解还可以做的更好Java9对@Deprecated注解做了两项重要
如果你使用过Python,应该对with语句不陌生,with语句会创建一个独立的上下文,当执行流程离开该上下文时,就会立刻释放该上下文中的所有资源这样的机制,我们都可以不用手动去关闭已经打开的资源,比如文件等,例如withopen('hello.txt')asf:print(f.read()在执行流程离开with语句块之后,f这个文件资源就会自动销毁Java9为java也引入了这种机制,Java9称之为「try-with-resources」其实应该说Java9之前也能实现这样的机制,只不过有点复杂try-with-resourcestry-with-resources首先是一个try语句,其
Java中引入了流(Stream)的概念,真的是大大方便了我们java程序员,我们可以使用流从一系列对象中执行聚合操作。其实,Java8中的流已经很强大了,而且只要涉及到IO,只要涉及到对一系列数据进行操作,几乎都有流的影子。当然了,Java9还不忘对其继续增强,这次的改进主要是如何设置停止流的条件上。为此在流的实例上提供了四个方法takeWhile(PredicateInterface)、iterate、ofNullable和dropWhile(PredicateInterface)takeWhile(PredicateInterface)takeWhile(PredicateInterfa
Java9这个版本对进程管理方面的改进也是相当大的。在为数不多的几次Java项目中,有偶尔用到多线程,但对多进程和进程方面的了解还真是太少。我想,大部分人应该跟我一样,在编程之外知道有进程的东西的存在,在Java中反而会忽视,因为多线程和并发(Concurrency)的存在感更强吧。这次Java9对进程管理的改进主要是提供了ProcessHandle类ProcessHandle类该类在java.lang包中,且处于java.base模块中。ProcessHandle可以用于获取进程信息,监听和检查进程的状态,并且可以监听进程的退出主要提供了以下几个方法方法说明staticallProcesse
在我的印象中,好像,从来没有,想过在interface中定义私有的方法。一来各种文档中的确没有这么介绍过,二来,好像从来没有谁这么做过,三来,好像定义了也不知道要怎么使用,毕竟,接口interface中的方法都会被具体的类重写一次,所以,似乎,私有方法都没啥大作用了。比如说,很简单的,我们的Java基础教程:Java接口中,就没有论述私有方法这回事。既然Java9添加了这项特性,那么,应该就有它的用途,我们一起来看看Java9中的接口的私有方法是什么样的吧。JDK7/JDK6回忆一下,Java8之前,接口好像就只允许两种类型的数据,一个是常量、另一个就是公开(public)的虚方法(abstr
Java9之前的JAR格式中只能包含一个Java版本,显然,这是不符合Java这种开启了版本帝的发展线路了,想想,现在大多数Java还停留在Java678的年代,Java10已经发布,如果要发布一个JAR格式的类库,意味着要编译多个版本的JAR,678910五个版本,看起来也太恐怖了。Java9突然间良心发现,开始支持多版本共存的JAR了。Java9引入了一个新的功能,其实也不算吧,就是增强了JAR格式,可以在同一个JAR中维护和使用不同版本的java类或资源JAR多版本共存原理首先在JAR中,文件MANIFEST.MF文件的main节中有一个条目Multi-Release:true,用于指定
Java9为集合接口(List、Set、Map)提供了创建不可变实例的工厂方法。这些工厂方法为便利而生,以简介简单的方式创建这些集合老式的创建集合的方法我们先来看看默认的老式的创建集合的方法,创建一个文件CollectionFactoryMethodTester.java,并输入以下内容importjava.util.ArrayList;importjava.util.Collections;importjava.util.HashMap;importjava.util.HashSet;importjava.util.List;importjava.util.Map;importjava.ut
一直以来,Java生成的文档JavaDoc一直使用的都是HTML4格式,这次Java9良心大大的发现,使用了HTML5,但还不是默认的,如果要输出HTML5格式,还必须在命令行程序中添加-html5选项。旧的JavaDoc文档格式我们先在当前工作区,例如我的是D:\devops\java9的src目录下创建一个文件JavaDocTester.java,内容如下/***@authorMahKumar*@version0.1*/publicclassJavaDocTester{/***默认的方法用于输出HelloWorld*<p>Helloworld</p>*@parama
REPL,全称ReadEvalPrintLoop,中文「交互式解释器」,其实,就是一种代码所见即所得的即时编译器Java9引入了REPL,并将其命令为「JShell」,这真是我们Java开发的福音,以后演示代码的时候再也不用搬着一个IDE到处跑了对于我们Java开发者来说,应该是Java9带来的最大的个性吧。我们终于可以像Python、Ruby和Node.js那样在Shell可见即可得的运行一些范例代码了也就是说,使用REPL,我们可以编写和测试基于Java的逻辑,无需使用javac进行编译,直接查看计算结果运行JShell打开命令行提示符(Window7/Windowxp)或PowerShe
Java9最大的特性就是模块化(Module)了。本章,我们就对这个模块化进行一些简单的讲解,包括Java9模块化的概念、如何实现、如何使用等对于Java9来说,模块化(Module)是一个新引入的新型的编程组件(Component)因为是一个组件,所以也是一个自我完备的系统,是代码和数据的自描述的集合,而且有一个自我标识的名称,也就是模块名Java9模块化的特性Java9为了引入新的模块化的编程方式,特意增强和改进了一些功能,也添加了一些新的特性Java程序编译运行过程中,引入了一个新的可选的阶段「链接时间」(linktime)。这个阶段介于编译时和运行时之间在该阶段,可以组装和优化一组模块
Java9的环境安装和配置其实很简单,因为跟Java7/Java8的安装差不多,我们就不做过多的介绍了。相关的安装教程,可以参考我们的Java基础教程:Java开发环境配置因为Java当前的最新大版本为Java10,所以,我们建议你安装Java10,它同时也包含了Java9的新特性编辑器顺便说一下,我们接下来的教程不会使用大型的IDE,比如Idea和Netbeans和Eclipse等,而只会使用一些较小的文本编辑器,比如SublimeText3和VisualStudioCode关于这些文本编辑器,网上的使用教程很多,其实,下载安装就好,没啥大的配置。项目既然不使用大型的、功能齐全的IDE,那么
Java9(又称为jdk1.9)是Java编程语言开发的主要版本。它的初始版本于2017年9月21日发布按照今天的日期,也就是差不多一年前吧,但是,要知道,Java10都已经出来了....残废的Java9,大家还没用上,就开始过时了。Java9的目标Java9版本的主要目标是模块化JDK和Java标准版(JavaStandardEdition),使得Java可以用在小型计算设备中今天,我才牢牢记住了JavaSE的全称,竟然是JavaStandardEdition提高JDK和Java实现的整体安全性简化JAVASE和JavaEE平台上的Java代码库和大型应用程序的构建和维护过程设计和实现能够应