Java 9的14个新特性总结
作者:网络转载 发布时间:[ 2017/5/23 9:23:55 ] 推荐标签:测试开发技术 Java API
多分辨率图像API–JEP 251
目标是定义多分辨率图像API,这样开发者能很容易的操作和展示不同分辨率的图像了。
这个新的API定义在java.awt.image包中,这个API能给我们带来如下的帮助:
1.将不同分辨率的图像封装到一张(多分辨率的)图像中,作为它的变体。
2.获取这个图像的所有变体。
3. 获取特定分辨率的图像变体–表示一张已知分辨率单位为DPI的特定尺寸大小的逻辑图像,并且这张图像是佳的变体。
基于当前屏幕分辨率大小和运用的图像转换算法,java.awt.Graphics类可以从接口MultiResolutionImage获取所需的变体。java.awt.image.AbstractMultiResolutionImage类提供了ava.awt.image.AbstractMultiResolutionImage 默认实现。AbstractMultiResolutionImage的基础实现是java.awt.image.BaseMultiResolutionImage。
进程API的改进
迄今为止,通过Java来控制和管理操作系统的进程的能力有限。例如,为了做一些简单的事情,像获取进程的PID,你要么需要访问本地代码,要么使用某种临时解决方案。不仅如此,每个(系统)平台需要一个不同实现来确保你能获得正确的结果。
在Java 9中,期望代码能获取Linux PID,现在是如下方式:
public static void main(String[] args)
throws Exception
{
Process proc = Runtime.getRuntime()
.exec(new String[]{ "/bin/sh", "-c",
"echo $PPID" });
if (proc.waitFor() == 0)
{
InputStream in = proc.getInputStream();
int available = in.available();
byte[] outputBytes = new byte[available];
in.read(outputBytes);
String pid = new String(outputBytes);
System.out.println("Your pid is " + pid);
}
}
你可以变换如下的方式(同样支持所有的操作系统):
System.out.println("Your pid is "
+ Process.getCurrentPid());
Try-With-Resources
在Java 7中,try-with-resouces语法要求为每一个资源声明一个新的变量,而且这些资源由try-with-resources语句进行管理。
在Java 9中,有另外一个改进:如果一个资源被final或者等效于final变量引用,则在不需要声明一个新的变量的情况下,try-with-resources可以管理这个资源。
MyAutoCloseable mac = new MyAutoCloseable();
try (mac) {
// do some stuff with mac
}
try (new MyAutoCloseable() { }.
finalWrapper.finalCloseable) {
// do some stuff with finalCloseable
}
钻石(diamond)操作符范围的延伸
Java 7给出的钻石操作符使我们编写代码更简单了。在下面的例子中,你可以看见Java 7中List(列表)的可读性更强了,并且使代码更加的简洁了。
List<String> preJava7 = new ArrayLis
t<String>();//java 7 之前的写法
List<String> java7 = new ArrayList<>
();//java 7 之后的写法
但是Java 7中钻石操作符不允许在匿名类上使用。但在Java 9中改善了这一情况,允许钻石操作符在匿名类上使用。下面的例子只有在Java 9中才能通过编译。
List<String> list = new ArrayList<>(){ };
增强的注释Deprecated
注释@Deprecated可以标记Java API。注释@Deprecated有很多种含义,例如它可以表示在不远的将来的某个时间,被标记的API将会被移除。它也可以表示这个API已经被破坏了,并不应该再被使用。它还有其它很多含义。为了提供更多有关@Deprecated的信息,@Deprecated添加了forRemoval元素和since元素。
Java SE 9 中也提供了扫描jar文件的工具jdeprscan。这款工具也可以扫描一个聚合类,这个类使用了Java SE中的已废弃的API元素。 这个工具将会对使用已经编译好的库的应用程序有帮助,这样使用者不知道这个已经编译好的库中使用了那些已废弃的API。
统一的JVM日志
如今,我们很难知道导致JVM性能问题和导致JVM崩溃的根本原因。解决这个问题的一个方法是对所有的JVM组件引入一个单一的系统,这些JVM组件支持细粒度的和易配置的JVM日志。目前,不同的JVM组件对于日志使用的是不同的机制和规则,这使得JVM难以进行调试。
注释SafeVarargs范围的延伸
直到Java 8,@SafeVarargs才能在静态方法、final方法和构造器上使用。但是这些方法或者构造器是不能被覆盖的。这些方法中缺少另一个不能被覆盖的方法,这个方法是私有方法。Java 9可以将@SafeVarargs添加到私有方法上。下面的例子在Java 9中是正确的,但是在Java 8中会抛出编译时错误: 注释@SafeVarargs不能在非final的实例方法iAmSafeVaragrsMethod上使用。
@SafeVarargs
private void iAmSafeVaragrsMethod
(String... varagrgs)
{
for (String each: varagrgs) {
System.out.println(each);
}
}
HTTP 2 客户端
Java 9采用了全新的HTTP客户端API,这些API支持HTTP/2协议和WebSocket协议,并且替换了遗留的HTTPURLConnection API。这些改变并不应该在Java 9中完成。这些API可以从Incubator(孵化器)模块中获取。因此在默认情况下,这个模块是不能根据classpath获取的,需要使用--add-modules命令选项配置这个模块,将这个模块添加到classpath中。
我们创建一个HTTPRequest请求和获取异步的响应:
URI testPageURI = new URI("http://
127.0.0.1:8080/testPage");
CompletableFuture<HttpResponse>
nonBlockingResponse = HttpRequest
.create(testPageURI)
.GET().responseAsync();
int tries = 0;
while(!nonBlockingResponse.isDone()
&& tries++ < 5) { Thread.sleep(5); } if
(nonBlockingResponse.isDone()) { Http
Response response
= nonBlockingResponse.get(); System.
out.println("status
code : " + response.statusCode() + "
--> " + response
.body(HttpResponse.asString()));
}
else {
nonBlockingResponse.cancel(true);
System.out.println("Cancelling, coul
d not get response");
}
HTML5风格的Java帮助文档
Java 8以及之前的版本生成的Java帮助文档是在HTML 4中,而HTML 4已经是很久的标准了。在Java 9中,javadoc命令行中选项部分添加了输出选项,这个选项的值要么是HTML 4,要么是HTML 5。现在HTML 4是默认的输出标记语言,但是在之后发布的JDK中,HTML 5将会是默认的输出标记语言。Java帮助文档还是由三个框架组成的结构构成,这是不会变的,并且以HTML 5输出的Java帮助文档也保持相同的结构。
更多的特性
1. 保留下划线字符。变量不能被命名为_;
2. 废弃Applet API;
3.javac不再支持Java1.4以及之前的版本;
4. 废弃Java浏览器插件;
5.栈遍历API–栈遍历API能过滤和迟访问在堆栈跟踪中的信息。
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。
相关推荐
Java性能测试有哪些不为众人所知的原则?Java设计模式??装饰者模式谈谈Java中遍历Map的几种方法Java Web入门必知你需要理解的Java反射机制知识总结编写更好的Java单元测试的7个技巧编程常用的几种时间戳转换(java .net 数据库)适合Java开发者学习的Python入门教程Java webdriver如何获取浏览器新窗口中的元素?Java重写与重载(区别与用途)Java变量的分类与初始化JavaScript有这几种测试分类Java有哪四个核心技术?给 Java开发者的10个大数据工具和框架Java中几个常用设计模式汇总java生态圈常用技术框架、开源中间件,系统架构及经典案例等
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11热门文章
常见的移动App Bug??崩溃的测试用例设计如何用Jmeter做压力测试QC使用说明APP压力测试入门教程移动app测试中的主要问题jenkins+testng+ant+webdriver持续集成测试使用JMeter进行HTTP负载测试Selenium 2.0 WebDriver 使用指南