java12/13新特性
java12新特性一:switch表达式
jdk12以前的switch是这样的
/*** 枚举*/
enum Fruit {PEAR, APPLE, GRAPE, MANGO, ORANGE, PAPAYA;
}public class SwitchTest {public static void main(String[] args) {int numberOfLetters;Fruit fruit = Fruit.APPLE;switch (fruit) {case PEAR:numberOfLetters = 4;break;case APPLE:case GRAPE:case MANGO:numberOfLetters = 5;break;case ORANGE:case PAPAYA:numberOfLetters = 6;break;default:throw new IllegalStateException("No Such Fruit:" + fruit);}System.out.println(numberOfLetters);}
}
新版本的switch
表达式特点
- 可以使用
->
操作符,默认会在后面自动添加break
switch表达式拥有返回值
特点一、箭头操作符:->
在jdk12中switch可以这样写
enum Fruit {PEAR, APPLE, GRAPE, MANGO, ORANGE, PAPAYA;
}
@Test
public void testSwitch1(){Fruit fruit = Fruit.APPLE;switch(fruit) {case PEAR -> System.out.println("4");case APPLE,GRAPE,MANGO -> System.out.println("5");case ORANGE,PAPAYA -> System.out.println("6");default -> throw new IllegalStateException("No Such Fruit:" + fruit);}
}
可以看出java12
中switch
的代码更清晰,更简洁
特点二、switch
拥有返回值
enum Fruit {PEAR, APPLE, GRAPE, MANGO, ORANGE, PAPAYA;
}@Test
public void testSwitch2(){int numberOfLetters;Fruit fruit = Fruit.APPLE;numberOfLetters = switch(fruit) {case PEAR -> 4;case APPLE,GRAPE,MANGO -> 5;case ORANGE,PAPAYA -> 6;default -> throw new IllegalStateException("No Such Fruit:" + fruit);};System.out.println(numberOfLetters);}
java13
中对switch
进一步改进,利用关键字yield
可以对多态语句中将值返回,相当于函数的return
总的意思就是使用箭头表达式如果右边的语句是多条语句,则用{ }
括起来,然后对于返回值则通过关键字yield
进行返回
public class JDK13Demo {enum Fruit {PEAR, APPLE, GRAPE, MANGO, ORANGE, PAPAYA;}@Testpublic void switchTest(){int numberOfLetters;Fruit fruit = Fruit.APPLE;numberOfLetters = switch(fruit) {case PEAR -> 4;case APPLE,GRAPE,MANGO -> {yield 5;}case ORANGE,PAPAYA -> 6;default -> {yield 7;//返回}};System.out.println(numberOfLetters);}}
java12新特性二:Files新增mismatch
方法
作用是匹配文件内容是否相同,相同则返回-1
,存在不相同则返回首次匹配到不同内容的索引
@Test
public void filesTest() throws IOException {FileWriter fileWriter = new FileWriter("./src/a.txt");fileWriter.write("a");fileWriter.write("b");fileWriter.write("c");fileWriter.close();FileWriter fileWriter2 = new FileWriter("./src/b.txt");fileWriter2.write("a");fileWriter2.write("a");fileWriter2.write("c");fileWriter2.close();long index = Files.mismatch(Path.of("./src/a.txt"), Path.of("./src/b.txt"));System.out.println(index);//打印索引1,因为第二个字符不同如果将其改成相同的则返回-1
}
java12新特性三:String类新增的方法
- transform
transform的定义如下:传入的是一个Function类型的接口,意味着可以使用函数式编程对已有的字符串进行转换
public <R> R transform(Function<? super String, ? extends R> f) {return f.apply(this);
}
- indent
indent:允许我们调整缩进的宽度,意识是可以调整所有tab键产生的空格数量
java13新特性一:新语法 文本块
语法格式:三对双引号,前面三个双引号需要有一个回车
"""
这是文本块内容"""
如果代码是
"""
这是文本块内容
"""
相当于
"这是文本块内容\n"
这样也就产生了一个问题就是代码缩进对齐,例如一般我们写代码会以缩进对齐代码例如:
\s
相当于一个空格缩进会自动去掉
文本块的好处 ( 点赞 ๑•̀ㅂ•́)و✧ )
数据库持久层框架,例如mybatis在@Select、@Insert、@Delete、@Update
这类注解中需要写SQL
那么这种风格的好处就很显而易见了,代码简洁不需要像以前那种需要通过字符串拼接。文本块中也支持\n
也可以不写直接回车
例如:
String sql = "select employee_id,last_name,salary,department_id\n" +"from employees\n" +"where department_id in (40,50,60)\n" +"order by department_id asc";String sql1 = """select employee_id,last_name,salary,department_idfrom employeeswhere department_id in (40,50,60)order by department_id asc""";
使用文本块的注意点
文本块中使用"""需要加一个转义符\
进行转义
java13新特性二:新特性 Class-Data-Share
多个虚拟机加载同一个类则只需要加载一个类即可,虚拟机加载一个类会产生一个类共享文件,其它虚拟机如果需要加载同一个类则只需要从这个共享文件中获取即可
java13新特性三:ZGC取消使用 未使用的内存
JVM会自动的将没有使用的内存交还操作系统
使用的场景:
- 容器环境
- 长时间闲置的java应用程序,并且又很多其它应用共享和竞争资源的环境
- 应用程序再运行的过程中对于堆的内存需求不同
java13新特性四:重新实现Socket
API
使用SocketImpl
代替原先的Socket,原先的版本保留,如果像使用java13中提供的则使用这个类
java12/13新特性相关推荐
- java13页_Java 13 新特性及实战案例
近期 Java 界好消息频传.先是 Java 13 发布,接着 Eclipse 也发布了新版本表示支持新版本的Java 特性. 本文介绍了 Java 13 的新特性并展示了相关的示例. 2019年9月 ...
- 社区说|Android 13 新特性 EROFS-只读文件系统解析
活动时间 7 月 28 日(本周四) 20:00 - 21:00 活动日程 20:00 - 20:45 主题分享 Android 13新特性 EROFS-只读文件系统解析 介绍 Android 13的 ...
- 一篇文带你了解JDK 13新特性,保姆级教程!!!
JDK 13新特性介绍 1.1 JDK 各版本主要特性回顾 JDK Version 1.0 1996-01-23 Oak(橡树) 初代版本,伟大的一个里程碑,但是是纯解释运行,使用外挂JIT,性能比较 ...
- Java 每半年就会更新一次新特性,再不掌握就要落伍了:Java12 的新特性
本文收录在 <从小工到专家的 Java 进阶之旅> 系列专栏中. 你好,我是看山. 从 2017 年开始,Java 版本更新策略从原来的每两年一个新版本,改为每六个月一个新版本,以快速验证 ...
- Java 13 新特性全面解读
作者 l Hollis 本文经授权转载自Hollis(ID:hollischuang) 2017年8月,JCP执行委员会提出将Java的发布频率改为每六个月一次,新的发布周期严格遵循时间点,将在每年的 ...
- OpenLayers 6.13 新特性
文章目录 1 概述 2 细节 2.1 新方法 - layer.getData() 2.2 弃用方法 - map.forEachLayerAtPixel() 1 概述 6.13 版本带来了一些新特性: ...
- LayaAir2.13新特性:新增VR相关功能、渐变环境光、3D自定义分辨率、新的渲染命令、新的动画插值方式、新的粒子功能等等...
在两个小版本之后,LayaAir引擎再次迎来了2.13这个大版本的更新. 本次版本中,我们不仅继续进行了大量的引擎优化,例如,优化3D渲染架构.优化后期处理流程.优化AO算法等等. 还增加了若干重要的 ...
- Android 13 新特性及适配指南
Android 13(API 33)于 2022年8月15日 正式发布(发布时间较往年早了一些),正式版Release源代码也于当日被推送到AOSP Android开源项目. 截止到笔者撰写这篇文章时 ...
- JDK 13 新特性一览
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:木九天 my.oschina.net/mdxlcj/blog ...
最新文章
- Eclipse中导入外部jar包
- hdu1160 dp
- 构建自己的npm包 简单实现
- EclipseLink MOXy和用于JSON处理的Java API –对象模型API
- java 判断object类型_Java多态的6大特性|乐字节
- 【codevs5037】线段树练习4加强版
- iphone mac地址是否随机_iPad 的 Mac 地址是否会随机更换,如何关闭呢
- linux c语言播放midi,C语言实现--计算MIDI音符的频率
- 深度学习入门代码详解(附代码)
- vbs计算机病毒代码,vbs病毒的简单例子源代码解析
- 如何查看jdkApi在线帮助文档(下载)
- 初级java程序员遇到的面试题
- GGGIS地图下载器
- 实体书店不断萎缩 路在何方?
- linux ntp时间立即同步命令_linux时间同步,ntpd、ntpdate
- PS人像精修插件MUA Retouch Panel中文版(支持ps2021)
- Matlab GUI animatedline 串口实时
- 机器学习-推荐系统-利用用户标签数据
- 微信推出“腾讯电子签”具有提醒对方还钱
- 算法 64式 7、搜索算法整理_第1部分_1到15题