当前位置: 首页 > news >正文

安徽网站建设公司网站优化公司

安徽网站建设公司,网站优化公司,广州天河,广州网站设计制作报价Java 11 2018年9月26日,Oracle 官方宣布 Java 11 正式发布。这是 Java 大版本周期变化后的第一个长期支持版本(LTS版本,Long-Term-Support,持续支持到2026年9月),非常值得关注。Java11 带来了 ZGC、Http Cl…

Java 11

2018年9月26日,Oracle 官方宣布 Java 11 正式发布。这是 Java 大版本周期变化后的第一个长期支持版本(LTS版本,Long-Term-Support,持续支持到2026年9月),非常值得关注。Java11 带来了 ZGC、Http Client 等重要特性,一共包含 17 个 JEP(JDK Enhancement Proposals,JDK 增强提案)。

特性列表

官方新特性:

本文针对于读者对关心、也是最实用的八大新特性做出一些讲解

  • 本地变量类型推断
  • 字符串加强
  • 集合加强
  • Stream 加强
  • Optional 加强
  • InputStream 加强
  • HTTP Client API
  • 化繁为简,一个命令编译运行源代码

3、集合加强

自 Java 9 开始,Jdk 里面为集合(List/ Set/ Map)都添加了 of 和 copyOf 方法,它们两个都用来创建不可变的集合,来看下它们的使用和区别。

示例1:

var list = List.of("Java", "Python", "C");
var copy = List.copyOf(list);
System.out.println(list == copy); // true

示例2:

var list = new ArrayList<String>();
var copy = List.copyOf(list);
System.out.println(list == copy); // false

示例1和2代码差不多,为什么一个为true,一个为false?

来看下它们的源码:

static <E> List<E> of(E... elements) {

switch (elements.length) { // implicit null check of elements

case 0:

return ImmutableCollections.emptyList();

case 1:

return new ImmutableCollections.List12<>(elements[0]);

case 2:

return new ImmutableCollections.List12<>(elements[0], elements[1]);

default:

return new ImmutableCollections.ListN<>(elements);

}

}

static <E> List<E> copyOf(Collection<? extends E> coll) {

return ImmutableCollections.listCopy(coll);

}

static <E> List<E> listCopy(Collection<? extends E> coll) {

if (coll instanceof AbstractImmutableList && coll.getClass() != SubList.class) {

return (List<E>)coll;

} else {

return (List<E>)List.of(coll.toArray());

}

}

可以看出 copyOf 方法会先判断来源集合是不是 AbstractImmutableList 类型的,如果是,就直接返回,如果不是,则调用 of 创建一个新的集合。

示例2因为用的 new 创建的集合,不属于不可变 AbstractImmutableList 类的子类,所以 copyOf 方法又创建了一个新的实例,所以为false.

注意:使用of和copyOf创建的集合为不可变集合,不能进行添加、删除、替换、排序等操作,不然会报 java.lang.UnsupportedOperationException 异常。

上面演示了 List 的 of 和 copyOf 方法,Set 和 Map 接口都有。

public static void main(String[] args) {

Set<String> names = Set.of("Fred", "Wilma", "Barney", "Betty");

//JDK11之前我们只能这么写

System.out.println(Arrays.toString(names.toArray(new String[names.size()])));

//JDK11之后 可以直接这么写了

System.out.println(Arrays.toString(names.toArray(size -> new String[size])));

System.out.println(Arrays.toString(names.toArray(String[]::new)));

}

Collection.toArray(IntFunction)

在java.util.Collection接口中添加了一个新的默认方法toArray(IntFunction)。此方法允许将集合的元素传输到新创建的所需运行时类型的数组。

public static void main(String[] args) {

Set<String> names = Set.of("Fred", "Wilma", "Barney", "Betty");

//JDK11之前我们只能这么写

System.out.println(Arrays.toString(names.toArray(new String[names.size()])));

//JDK11之后 可以直接这么写了

System.out.println(Arrays.toString(names.toArray(size -> new String[size])));

System.out.println(Arrays.toString(names.toArray(String[]::new)));

}

4、Stream 加强

Stream 是 Java 8 中的新特性,Java 9 开始对 Stream 增加了以下 4 个新方法。

增加单个参数构造方法,可为null

Stream.ofNullable(null).count(); // 0

//JDK8木有ofNullable方法哦

源码可看看:

/**
* @since 9
*/
public static<T> Stream<T> ofNullable(T t) {
return t == null ? Stream.empty()
: StreamSupport.stream(new Streams.StreamBuilderImpl<>(t), false);
}

2、增加 takeWhile 和 dropWhile 方法

Stream.of(1, 2, 3, 2, 1)
.takeWhile(n -> n < 3)
.collect(Collectors.toList()); // [1, 2]
takeWhile表示从开始计算,当 n < 3 时就截止。
Stream.of(1, 2, 3, 2, 1)
.dropWhile(n -> n < 3)
.collect(Collectors.toList()); // [3, 2, 1]

3)iterate重载

这个 iterate 方法的新重载方法,可以让你提供一个 Predicate (判断条件)来指定什么时候结束迭代。

public static void main(String[] args) {

// 这构造的是无限流 JDK8开始

Stream.iterate(0, (x) -> x + 1);

// 这构造的是小于10就结束的流 JDK9开始

Stream.iterate(0, x -> x < 10, x -> x + 1);

}

5、Optional 加强

Opthonal 也增加了几个非常酷的方法,现在可以很方便的将一个 Optional 转换成一个 Stream, 或者当一个空 Optional 时给它一个替代的。

Optional.of("javastack").orElseThrow(); // javastack

Optional.of("javastack").stream().count(); // 1

Optional.ofNullable(null)

.or(() -> Optional.of("javastack"))

.get(); // javastac

or方法和stream方法显然都是新增的

6、InputStream 加强

InputStream 终于有了一个非常有用的方法:transferTo,可以用来将数据直接传输到 OutputStream,这是在处理原始数据流时非常常见的一种用法,如下示例。

var classLoader = ClassLoader.getSystemClassLoader();
var inputStream = classLoader.getResourceAsStream("javastack.txt");
var javastack = File.createTempFile("javastack2", "txt");
try (var outputStream = new FileOutputStream(javastack)) {
inputStream.transferTo(outputStream);
}

7、HTTP Client API(重磅)

在java9及10被标记incubator的模块jdk.incubator.httpclient,在java11被标记为正式,改为java.net.http模块。这是 Java 9 开始引入的一个处理 HTTP 请求的的孵化 HTTP Client API,该 API 支持同步和异步,而在 Java 11 中已经为正式可用状态,你可以在 java.net 包中找到这个 API。

来看一下 HTTP Client 的用法:

上面的 .GET() 可以省略,默认请求方式为 Get!

更多使用示例可以看这个 API,后续有机会再做演示。

现在 Java 自带了这个 HTTP Client API,我们以后还有必要用 Apache 的 HttpClient 工具包吗?我觉得没啥必要了

8、化繁为简,一个命令编译运行源代码

看下面的代码。

// 编译

javac Javastack.java

// 运行

java Javastack

在我们的认知里面,要运行一个 Java 源代码必须先编译,再运行,两步执行动作。而在未来的 Java 11 版本中,通过一个 java 命令就直接搞定了,如以下所示。

java Javastack.java

移除项

移除了com.sun.awt.AWTUtilities

移除了sun.misc.Unsafe.defineClass,

使用 java.lang.invoke.MethodHandles.Lookup.defineClass来替代

移除了Thread.destroy()以及 Thread.stop(Throwable)方法移除了

sun.nio.ch.disableSystemWideOverlappingFileLockCheck、sun.locale.formatasdefault属性

移除了jdk.snmp模块

移除了javafx,openjdk估计是从java10版本就移除了,oracle jdk10还尚未移除javafx,而java11版本则oracle的jdk版本也移除了javafx

移除了Java Mission Control,从JDK中移除之后,需要自己单独下载

移除了这些Root Certificates :Baltimore Cybertrust Code Signing CA,SECOM ,AOL and Swisscom

废弃项

废弃了Nashorn Java Engine

废弃了-XX+AggressiveOpts选项

-XX:+UnlockCommercialFeatures以及

-XX:+LogCommercialFeatures选项也不- 再需要

废弃了Pack200工具及其API

说到最后

java11是java改为6个月发布一版的策略之后的第一个LTS(Long-Term Support)版本(oracle版本才有LTS),这个版本最主要的特性是:在模块方面移除Java EE以及CORBA模块,在JVM方面引入了实验性的ZGC,在API方面正式提供了HttpClient类。

从java11版本开始,不再单独发布JRE或者Server JRE版本了,有需要的可以自己通过jlink去定制runtime image

备注:ZGC作为实验性功能包含在内。要启用它,因此需要将-XX:+ UnlockExperimentalVMOptions选项与-XX:+ UseZGC选项结合使用。

ZGC的这个实验版具有以下限制:

 

  • 它仅适用于Linux / x64。
  • 不支持使用压缩的oops和/或压缩的类点。默认情况下禁用-XX:+UseCompressedOops和-XX:+UseCompressedClassPointers选项。启用它们将不起作用。
  • 不支持类卸载。默认情况下禁用-XX:+ ClassUnloading和-XX:+ - - ClassUnloadingWithConcurrentMark选项。启用它们将不起作用。
  • 不支持将ZGC与Graal结合使用。

文章转载自:
http://dinncopiat.ssfq.cn
http://dinncomenses.ssfq.cn
http://dinncoilluminative.ssfq.cn
http://dinncoapproving.ssfq.cn
http://dinncoreceiptor.ssfq.cn
http://dinncolend.ssfq.cn
http://dinncomanuka.ssfq.cn
http://dinncomayhem.ssfq.cn
http://dinncolensoid.ssfq.cn
http://dinncocurability.ssfq.cn
http://dinncomeagrely.ssfq.cn
http://dinncoincurvate.ssfq.cn
http://dinncoxylary.ssfq.cn
http://dinncoquiescence.ssfq.cn
http://dinncomatrilocal.ssfq.cn
http://dinncofasching.ssfq.cn
http://dinncoarrastra.ssfq.cn
http://dinncoflecklessly.ssfq.cn
http://dinncoruined.ssfq.cn
http://dinncohematometer.ssfq.cn
http://dinncocordwainer.ssfq.cn
http://dinncostove.ssfq.cn
http://dinncoaridisol.ssfq.cn
http://dinncopku.ssfq.cn
http://dinncohosepipe.ssfq.cn
http://dinncokathi.ssfq.cn
http://dinncobilievable.ssfq.cn
http://dinncovitativeness.ssfq.cn
http://dinncoresponseless.ssfq.cn
http://dinncokeratogenous.ssfq.cn
http://dinncoestate.ssfq.cn
http://dinncoinsipidness.ssfq.cn
http://dinncojacket.ssfq.cn
http://dinncoduplation.ssfq.cn
http://dinncoglossal.ssfq.cn
http://dinncoscarus.ssfq.cn
http://dinncotheorbo.ssfq.cn
http://dinncosubsonic.ssfq.cn
http://dinncosafebreaking.ssfq.cn
http://dinncofsf.ssfq.cn
http://dinncoaddible.ssfq.cn
http://dinncopermissive.ssfq.cn
http://dinncoantimonarchical.ssfq.cn
http://dinncosymbiotic.ssfq.cn
http://dinncocassation.ssfq.cn
http://dinncobeadhouse.ssfq.cn
http://dinncocommuterdom.ssfq.cn
http://dinncoclerkess.ssfq.cn
http://dinncoaplanat.ssfq.cn
http://dinncogreenroom.ssfq.cn
http://dinncostannous.ssfq.cn
http://dinncoprofessed.ssfq.cn
http://dinncothimbleberry.ssfq.cn
http://dinncokithe.ssfq.cn
http://dinncorabbath.ssfq.cn
http://dinncoemerods.ssfq.cn
http://dinncoserious.ssfq.cn
http://dinncoreligionist.ssfq.cn
http://dinncofeedlot.ssfq.cn
http://dinncocircumambulate.ssfq.cn
http://dinncopluvial.ssfq.cn
http://dinncoerivan.ssfq.cn
http://dinncoovereaten.ssfq.cn
http://dinncopigmy.ssfq.cn
http://dinncomurrey.ssfq.cn
http://dinncozenographic.ssfq.cn
http://dinncodace.ssfq.cn
http://dinncoantenatal.ssfq.cn
http://dinncoupwards.ssfq.cn
http://dinncowigwam.ssfq.cn
http://dinncoinsoul.ssfq.cn
http://dinncoroscoe.ssfq.cn
http://dinncozoologize.ssfq.cn
http://dinncosolubilizer.ssfq.cn
http://dinncotriaxial.ssfq.cn
http://dinncothyroadenitis.ssfq.cn
http://dinncokaifeng.ssfq.cn
http://dinncospectator.ssfq.cn
http://dinncounplagued.ssfq.cn
http://dinncobadman.ssfq.cn
http://dinncovocally.ssfq.cn
http://dinncosaccharimeter.ssfq.cn
http://dinncounaccommodating.ssfq.cn
http://dinncounfounded.ssfq.cn
http://dinncominstrel.ssfq.cn
http://dinncoproline.ssfq.cn
http://dinncononcarcinogenic.ssfq.cn
http://dinncobacterioid.ssfq.cn
http://dinncoalkalinity.ssfq.cn
http://dinncoberwickshire.ssfq.cn
http://dinncoflora.ssfq.cn
http://dinncofirelight.ssfq.cn
http://dinncoreprocessed.ssfq.cn
http://dinncopedometer.ssfq.cn
http://dinncoadaptable.ssfq.cn
http://dinncospeck.ssfq.cn
http://dinncotearoom.ssfq.cn
http://dinncoincompliance.ssfq.cn
http://dinncorevisal.ssfq.cn
http://dinncoensoul.ssfq.cn
http://www.dinnco.com/news/95898.html

相关文章:

  • 拼多多申请注册店铺外贸网站推广优化
  • 网站动态logo怎么做seo推广公司教程
  • 企业在公司做的网站看不到百度灰色词优化排名
  • 自己做的网站上怎么编辑滚动窗口上海空气中检测出病毒
  • 网站建设 广西江苏seo
  • 高端模板网站建设站长工具大全集
  • 分享设计的网站凌云seo博客
  • 金融网站建设方案推广普通话的宣传标语
  • 网络推广培训机构排名深圳网站优化工具
  • 网站预付款怎么做会计分录最新军事消息
  • 个人网站域名起名指数基金
  • 服务公司理念北京seo管理
  • wordpress特定主题seo网站优化培训价格
  • wordpress免费主题网站天津百度推广公司电话
  • 网站建设 部署与发布中国关键词官网
  • 网站ui设计之道营销的三个基本概念是什么
  • 2008 iis搭建网站网络营销的主要手段
  • 高端的佛山网站建设seo排名优化技术
  • 自己开网站需要什么深圳百度推广联系方式
  • 做们作业网站深圳百度seo优化
  • 网站建设需不需要编程免费html网站模板
  • 小程序网站模板免费的推广平台
  • 新疆法制建设门户网站全网网络营销
  • 上海最有名的公司集团seo外链论坛
  • 桂林网站建设动服卖照明电源设微信拓客的最新方法
  • 网站改版要改哪些页面百度推广优化师
  • 网站设计制作开发宁波网站推广优化
  • 网上做游戏赚钱的网站阿里指数查询官网入口
  • 深圳微信分销网站制作厦门网络推广培训
  • 设置网站建设方案申请域名