java中13%(-3)_Java13版本特性【一文了解】
「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版本特性【一文了解】相关推荐
- HBase中数据的多版本特性潜在的意外
http://zjushch.iteye.com/blog/1243522 2011-11-08 HBase中数据的多版本特性潜在的意外 博客分类: Hbase hbase多版本删除时间戳KeyVa ...
- java中date类型如何赋值_一文读懂java中的Reference和引用类型
简介 java中有值类型也有引用类型,引用类型一般是针对于java中对象来说的,今天介绍一下java中的引用类型.java为引用类型专门定义了一个类叫做Reference.Reference是跟jav ...
- aspects_具有Aspects的Java中的Mixin –用于Scala特性示例
aspects Scala特征允许将新行为混合到一个类中. 考虑两个特征,可以向JPA实体添加审核和与版本相关的字段: package mvcsample.domainimport javax.per ...
- 具有Aspects的Java中的Mixin –用于Scala特性示例
Scala特征允许将新行为混合到一个类中. 考虑两个特征,可以向JPA实体添加审核和与版本相关的字段: package mvcsample.domainimport javax.persistence ...
- 在java中关于枚举类型的特性_java枚举类型小结
JDK5.0之前,我们一般选择使用 interface 来保存常量组,以此来弥补 JDK 中没有枚举类型的缺陷,从JDK5.0开始,Sun引进了一个全新的关键字 enum 来定义一个枚举类.同inte ...
- java中13%(-3)_Java面试题汇总(十三)《算法分析及手写代码661-675》
661.给出下面的二叉树先序.中序.后序遍历的序列? 答:先序序列:ABDEGHCF:中序序列:DBGEHACF:后序序列:DGHEBFCA. 补充:二叉树也称为二分树,它是树形结构的一种,其特点是每 ...
- Java中线程超详细版本
线程 线程的概念:说到线程的概念,我们不得不提到进程. 进程:是指一个内存中运行的应用程序,每一个进程都有一个独立的内存空间. 线程:1.是进程中的一个执行路径,共享一个内存空间,线程之间可以自由切换 ...
- Java中找出s字符串的回文_给定一个字符串 s,找到 s 中最长的回文子串。
题目描述:给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 思路: 判断s[i..j]是否是回文字符串,依赖于s[i+1...j-1],这种一个问题的结果依赖于 ...
- Java中var类型的用法和使用var的注意事项和使用var的优缺点
Java中var是Java10版本新出的特性,用它来定义局部变量. 使用var 定义变量的语法: var 变量名 = 初始值: 如果代码: var a = 20: var a =8.9: 这样的代码会 ...
- Java中var类型的用法
Java中var是Java10版本新出的特性,用它来定义局部变量. 使用var 定义变量的语法: var 变量名 = 初始值: 如果代码: var a = 20: var a =8.9: 这样的代码会 ...
最新文章
- 中国新十大军工企业名单及简称
- Delphi 与 DirectX 之 DelphiX(55): TDIB.DoMosaic();
- log4j中用变量配置日志输出文件位置
- 用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变
- LeetCode OJ - Valid Palindrome
- Lucene全文检索
- Oracle数据库中的dual表
- 5.Hbase API 操作开发
- 一个有趣手绘风格的Python绘图库使用
- 【Driver】协作安装程序
- 尝试运行项目时出错,无法启动程序 , 由于应用程序配置不正确,未能启动此应用程序。请查看清单文件以查找可能的错误。
- java试题及答案下载_java练习题与答案百度云下载.doc
- R语言保存EXCEL小技巧
- 深度linux u盘安装教程,deepin 2014 u盘安装教程:u盘安装deepin2014步骤
- iOS界面--Tom猫的实现
- 「读书笔记」第五项修炼-学习型组织的艺术与实践(一)
- PHP 苹果内购订阅验单函数,及其订阅回调处理案例
- 论题:基于深度学习的图像识别系统
- mysql trim()_MySQL trim()函数
- 999策略手机论坛_999策略手机论坛
热门文章
- 即时通讯IM技术领域基础篇
- 论文阅读 Optimal Rough Terrain Trajectory Generation for Wheeled Mobile Robots
- 权威机构发布行业白皮书,菜鸟有望成为数智航运时代的领军者
- 计算机专业考研复习要点,2017年最新考研各科目复习要点
- Edit plus | ecli pse配色方案
- MAL-PEG-Cholesterol,MAL-PEG-CLS
- Google Safe Browsing API的使用
- python12306抢票_Python3.6实现12306火车票自动抢票,并短信和邮件通知
- 如何区分PNP型和NPN型?
- java源码解读 pdf_好家伙!这一篇文章就给你讲明白了Java并发实现原理之JDK源码剖析(PDF文档)...