「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」。

当然 不论新老朋友 我相信您都可以 从中获益。如果觉得 「不错」 的朋友,欢迎 「关注 + 留言 + 分享」,文末有完整的获取链接,您的支持是我前进的最大的动力!

特性总览

以下是 Java 13 中的引入的部分新特性。关于 Java 13 新特性更详细的介绍可参考这里。

文本块-预览(JEP 355)

文本块的字符串类新方法

开关表达式-预览(JEP 354)

重新实现旧版套接字 API(JEP 353)

动态 CDS 存档(JEP 350)

ZGC:取消提交未使用的内存(JEP 351)

FileSystems.newFileSystem() 方法

具有命名空间支持的 DOM 和 SAX 工厂

一. 文本块-预览(JEP 355)

这是预览功能。它使我们能够轻松地创建多行字符串。多行字符串必须写在一对三重双引号内。

使用文本块创建的字符串对象没有其他属性。这是创建多行字符串的简便方法。我们不能使用文本块来创建单行字符串。另外,开头的三重双引号后必须跟一个行终止符。

在 Java 13 之前:

String html ="\n" +

"

\n" +

"

Hello, World

\n" +

" \n" +

"\n";

String json ="{\n" +

" \"name\":\"mkyong\",\n" +

" \"age\":38\n" +

"}\n";

Java 13:

String html = """

Hello, World

""";

String json = """

{

"name":"mkyong",

"age":38

}

""";

二. 文本块的字符串类新方法

String 类中有三个与文本块功能关联的新方法。

formatted(Object…args):它类似于 String format() 方法。添加它是为了支持文本块的格式化。

stripIndent():用于从文本块中的每一行的开头和结尾删除附带的空格字符。文本块使用此方法,并保留内容的相对缩进。

translateEscapes():返回一个值为该字符串的字符串,其转义序列就像在字符串文字中一样进行翻译。

package com.journaldev.java13.examples;

public class StringNewMethods {

/***

* New methods are to be used with Text Block Strings

* @param args

*/

@SuppressWarnings("preview")

public static void main(String[] args) {

String output = """

Name: %s

Phone: %d

Salary: $%.2f

""".formatted("Pankaj", 123456789, 2000.5555);

System.out.println(output);

String htmlTextBlock = " \n"+

"\t

\t\t \n"+

"\t\t

Hello

\t \n"+

"\t \n"+

"";

System.out.println(htmlTextBlock.replace(" ", "*"));

System.out.println(htmlTextBlock.stripIndent().replace(" ", "*"));

String str1 = "Hi\t\nHello' \" /u0022 Pankaj\r";

System.out.println(str1);

System.out.println(str1.translateEscapes());

}

}

输出:

Name: Pankaj

Phone: 123456789

Salary: $2000.56

***

Hello

***

*

Hello

Hi

Hello' " /u0022 Pankaj

Hi

Hello' " /u0022 Pankaj

三. 开关表达式-预览(JEP 354)

Java 12 引入了JEP 325 Switch表达式。该 JEP 放弃brea 关键字而改用 yield 关键字从 switch 表达式返回值。(其他均与 Java 12 没区别)

// switch expressions, use yield to return, in Java 12 it was break

int x = switch (choice) {

case 1, 2, 3:

yield choice;

default:

yield -1;

};

(ps:这会在 Java 14 - JEP 361 中成为标准功能)

四. 重新实现旧版套接字 API(JEP 353)

java.net.Socket 和 java.net.ServerSocket 的底层实现都很古老,可以追溯到 JDK 1.0,它混合了遗留的 Java 和 C 代码,很难维护和调试。这个 JEP 为套接字 API 引入了新的底层实现,这是 Java 13 中的默认实现。

在 Java 13 之前,SocketImpl 使用 PlainSocketImpl:

public class ServerSocket implements java.io.Closeable {

/**

* The implementation of this Socket.

*/

private SocketImpl impl;

}

Java 13 引入了一个新的 NioSocketImpl 类,作为对 PlainSocketImpl 的临时替换。但是,如果出现错误,我们仍然可以通过设置 jdk.net.usePlainSocketImpl 系统属性切换回旧的实现 PlainSocketImpl。

下面

java中13%(-3)_Java13版本特性【一文了解】相关推荐

  1. HBase中数据的多版本特性潜在的意外

    http://zjushch.iteye.com/blog/1243522 2011-11-08 HBase中数据的多版本特性潜在的意外  博客分类: Hbase hbase多版本删除时间戳KeyVa ...

  2. java中date类型如何赋值_一文读懂java中的Reference和引用类型

    简介 java中有值类型也有引用类型,引用类型一般是针对于java中对象来说的,今天介绍一下java中的引用类型.java为引用类型专门定义了一个类叫做Reference.Reference是跟jav ...

  3. aspects_具有Aspects的Java中的Mixin –用于Scala特性示例

    aspects Scala特征允许将新行为混合到一个类中. 考虑两个特征,可以向JPA实体添加审核和与版本相关的字段: package mvcsample.domainimport javax.per ...

  4. 具有Aspects的Java中的Mixin –用于Scala特性示例

    Scala特征允许将新行为混合到一个类中. 考虑两个特征,可以向JPA实体添加审核和与版本相关的字段: package mvcsample.domainimport javax.persistence ...

  5. 在java中关于枚举类型的特性_java枚举类型小结

    JDK5.0之前,我们一般选择使用 interface 来保存常量组,以此来弥补 JDK 中没有枚举类型的缺陷,从JDK5.0开始,Sun引进了一个全新的关键字 enum 来定义一个枚举类.同inte ...

  6. java中13%(-3)_Java面试题汇总(十三)《算法分析及手写代码661-675》

    661.给出下面的二叉树先序.中序.后序遍历的序列? 答:先序序列:ABDEGHCF:中序序列:DBGEHACF:后序序列:DGHEBFCA. 补充:二叉树也称为二分树,它是树形结构的一种,其特点是每 ...

  7. Java中线程超详细版本

    线程 线程的概念:说到线程的概念,我们不得不提到进程. 进程:是指一个内存中运行的应用程序,每一个进程都有一个独立的内存空间. 线程:1.是进程中的一个执行路径,共享一个内存空间,线程之间可以自由切换 ...

  8. Java中找出s字符串的回文_给定一个字符串 s,找到 s 中最长的回文子串。

    题目描述:给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 思路: 判断s[i..j]是否是回文字符串,依赖于s[i+1...j-1],这种一个问题的结果依赖于 ...

  9. Java中var类型的用法和使用var的注意事项和使用var的优缺点

    Java中var是Java10版本新出的特性,用它来定义局部变量. 使用var 定义变量的语法: var 变量名 = 初始值: 如果代码: var a = 20: var a =8.9: 这样的代码会 ...

  10. Java中var类型的用法

    Java中var是Java10版本新出的特性,用它来定义局部变量. 使用var 定义变量的语法: var 变量名 = 初始值: 如果代码: var a = 20: var a =8.9: 这样的代码会 ...

最新文章

  1. 中国新十大军工企业名单及简称
  2. Delphi 与 DirectX 之 DelphiX(55): TDIB.DoMosaic();
  3. log4j中用变量配置日志输出文件位置
  4. 用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变
  5. LeetCode OJ - Valid Palindrome
  6. Lucene全文检索
  7. Oracle数据库中的dual表
  8. 5.Hbase API 操作开发
  9. 一个有趣手绘风格的Python绘图库使用
  10. 【Driver】协作安装程序
  11. 尝试运行项目时出错,无法启动程序 , 由于应用程序配置不正确,未能启动此应用程序。请查看清单文件以查找可能的错误。
  12. java试题及答案下载_java练习题与答案百度云下载.doc
  13. R语言保存EXCEL小技巧
  14. 深度linux u盘安装教程,deepin 2014 u盘安装教程:u盘安装deepin2014步骤
  15. iOS界面--Tom猫的实现
  16. 「读书笔记」第五项修炼-学习型组织的艺术与实践(一)
  17. PHP 苹果内购订阅验单函数,及其订阅回调处理案例
  18. 论题:基于深度学习的图像识别系统
  19. mysql trim()_MySQL trim()函数
  20. 999策略手机论坛_999策略手机论坛

热门文章

  1. 即时通讯IM技术领域基础篇
  2. 论文阅读 Optimal Rough Terrain Trajectory Generation for Wheeled Mobile Robots
  3. 权威机构发布行业白皮书,菜鸟有望成为数智航运时代的领军者
  4. 计算机专业考研复习要点,2017年最新考研各科目复习要点
  5. Edit plus | ecli pse配色方案
  6. MAL-PEG-Cholesterol,MAL-PEG-CLS
  7. Google Safe Browsing API的使用
  8. python12306抢票_Python3.6实现12306火车票自动抢票,并短信和邮件通知
  9. 如何区分PNP型和NPN型?
  10. java源码解读 pdf_好家伙!这一篇文章就给你讲明白了Java并发实现原理之JDK源码剖析(PDF文档)...