北京 营销型网站公司做网站要企业认证

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

北京 营销型网站,公司做网站要企业认证,怎样建设网站的步骤,市场推广方案怎么写Java 11 2018年9月26日#xff0c;Oracle 官方宣布 Java 11 正式发布。这是 Java 大版本周期变化后的第一个长期支持版本#xff08;LTS版本#xff0c;Long-Term-Support#xff0c;持续支持到2026年9月#xff09;#xff0c;非常值得关注。Java11 带来了 ZGC、Http Cl…Java 11 2018年9月26日Oracle 官方宣布 Java 11 正式发布。这是 Java 大版本周期变化后的第一个长期支持版本LTS版本Long-Term-Support持续支持到2026年9月非常值得关注。Java11 带来了 ZGC、Http Client 等重要特性一共包含 17 个 JEPJDK Enhancement ProposalsJDK 增强提案。 特性列表 官方新特性 本文针对于读者对关心、也是最实用的八大新特性做出一些讲解 本地变量类型推断字符串加强集合加强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 ArrayListString(); var copy List.copyOf(list); System.out.println(list copy); // false 示例1和2代码差不多为什么一个为true,一个为false? 来看下它们的源码 static E ListE 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 ListE copyOf(Collection? extends E coll) { return ImmutableCollections.listCopy(coll); } static E ListE listCopy(Collection? extends E coll) { if (coll instanceof AbstractImmutableList coll.getClass() ! SubList.class) { return (ListE)coll; } else { return (ListE)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) { SetString 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接口中添加了一个新的默认方法toArrayIntFunction。此方法允许将集合的元素传输到新创建的所需运行时类型的数组。 public static void main(String[] args) { SetString 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 staticT StreamT 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] 3iterate重载 这个 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模块 移除了javafxopenjdk估计是从java10版本就移除了oracle jdk10还尚未移除javafx而java11版本则oracle的jdk版本也移除了javafx 移除了Java Mission Control从JDK中移除之后需要自己单独下载 移除了这些Root Certificates Baltimore Cybertrust Code Signing CASECOM AOL and Swisscom 废弃项 废弃了Nashorn Java Engine 废弃了-XXAggressiveOpts选项 -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和/或压缩的类点。默认情况下禁用-XXUseCompressedOops和-XXUseCompressedClassPointers选项。启用它们将不起作用。不支持类卸载。默认情况下禁用-XX ClassUnloading和-XX - - ClassUnloadingWithConcurrentMark选项。启用它们将不起作用。不支持将ZGC与Graal结合使用。