@@ -415,43 +415,133 @@ Consumer<String> consumer = (String i) -> System.out.println(i);
415
415
416
416
## Java12
417
417
418
- ### 增强 Switch
418
+ ### String
419
419
420
- - 传统的 switch 语法存在容易漏写 break 的问题,而且从代码整洁性层面来看,多个 break 本质也是一种重复
420
+ Java 11 增加了两个的字符串处理方法,如以下所示。
421
421
422
- - Java12 提供了 swtich 表达式,使用类似 lambda 语法条件匹配成功后的执行块,不需要多写 break
422
+ ` indent() ` 方法可以实现字符串缩进。
423
423
424
- - 作为预览特性加入,需要在` javac ` 编译和` java ` 运行时增加参数` --enable-preview `
424
+ ``` java
425
+ String text = " Java" ;
426
+ // 缩进 4 格
427
+ text = text. indent(4 );
428
+ System . out. println(text);
429
+ text = text. indent(- 10 );
430
+ System . out. println(text);
431
+ ```
425
432
426
- ``` java
427
- switch (day) {
428
- case MONDAY , FRIDAY , SUNDAY - > System . out. println(6 );
429
- case TUESDAY - > System . out. println(7 );
430
- case THURSDAY , SATURDAY - > System . out. println(8 );
431
- case WEDNESDAY - > System . out. println(9 );
432
- }
433
- ```
433
+ 输出:
434
+
435
+ ```
436
+ Java
437
+ Java
438
+ ```
439
+
440
+ ` transform() ` 方法可以用来转变指定字符串。
441
+
442
+ ``` java
443
+ String result = " foo" . transform(input - > input + " bar" );
444
+ System . out. println(result); // foo bar
445
+ ```
446
+
447
+ ### 文件比较
448
+
449
+ Java 12 添加了以下方法来比较两个文件:
450
+
451
+ ``` java
452
+ public static long mismatch(Path path, Path path2) throws IOException
453
+ ```
454
+
455
+ ` mismatch() ` 方法用于比较两个文件,并返回第一个不匹配字符的位置,如果文件相同则返回 -1L。
456
+
457
+ 代码示例(两个文件内容相同的情况):
458
+
459
+ ``` java
460
+ Path filePath1 = Files . createTempFile(" file1" , " .txt" );
461
+ Path filePath2 = Files . createTempFile(" file2" , " .txt" );
462
+ Files . writeString(filePath1, " Java 12 Article" );
463
+ Files . writeString(filePath2, " Java 12 Article" );
464
+
465
+ long mismatch = Files . mismatch(filePath1, filePath2);
466
+ assertEquals(- 1 , mismatch);
467
+ ```
468
+
469
+ 代码示例(两个文件内容不相同的情况):
470
+
471
+ ``` java
472
+ Path filePath3 = Files . createTempFile(" file3" , " .txt" );
473
+ Path filePath4 = Files . createTempFile(" file4" , " .txt" );
474
+ Files . writeString(filePath3, " Java 12 Article" );
475
+ Files . writeString(filePath4, " Java 12 Tutorial" );
476
+
477
+ long mismatch = Files . mismatch(filePath3, filePath4);
478
+ assertEquals(8 , mismatch);
479
+ ```
434
480
435
481
### 数字格式化工具类
436
482
437
- - ` NumberFormat ` 新增了对复杂的数字进行格式化的支持
483
+ ` NumberFormat ` 新增了对复杂的数字进行格式化的支持
438
484
439
- ``` java
440
- NumberFormat fmt = NumberFormat . getCompactNumberInstance(Locale . US , NumberFormat . Style . SHORT );
441
- String result = fmt. format(1000 );
442
- System . out. println(result); // 输出为 1K,计算工资是多少K更方便了。。。
443
- ```
485
+ ``` java
486
+ NumberFormat fmt = NumberFormat . getCompactNumberInstance(Locale . US , NumberFormat . Style . SHORT );
487
+ String result = fmt. format(1000 );
488
+ System . out. println(result); // 输出为 1K,计算工资是多少K更方便了。。。
489
+ ```
444
490
445
491
### Shenandoah GC
446
492
447
- - Redhat 主导开发的 Pauseless GC 实现,主要目标是 99.9% 的暂停小于 10ms,暂停与堆大小无关等
448
- - 和 Java11 开源的 ZGC 相比(需要升级到 JDK11 才能使用),Shenandoah GC 有稳定的 JDK8u 版本,在 Java8 占据主要市场份额的今天有更大的可落地性
493
+ Redhat 主导开发的 Pauseless GC 实现,主要目标是 99.9% 的暂停小于 10ms,暂停与堆大小无关等
494
+
495
+ 和 Java11 开源的 ZGC 相比(需要升级到 JDK11 才能使用),Shenandoah GC 有稳定的 JDK8u 版本,在 Java8 占据主要市场份额的今天有更大的可落地性。
449
496
450
497
### G1 收集器提升
451
498
452
- - ** Java12 为默认的垃圾收集器 G1 带来了两项更新:**
453
- - 可中止的混合收集集合:JEP344 的实现,为了达到用户提供的停顿时间目标,JEP 344 通过把要被回收的区域集(混合收集集合)拆分为强制和可选部分,使 G1 垃圾回收器能中止垃圾回收过程。 G1 可以中止可选部分的回收以达到停顿时间目标
454
- - 及时返回未使用的已分配内存:JEP346 的实现,增强 G1 GC,以便在空闲时自动将 Java 堆内存返回给操作系统
499
+ Java12 为默认的垃圾收集器 G1 带来了两项更新:
500
+
501
+ - ** 可中止的混合收集集合** :JEP344 的实现,为了达到用户提供的停顿时间目标,JEP 344 通过把要被回收的区域集(混合收集集合)拆分为强制和可选部分,使 G1 垃圾回收器能中止垃圾回收过程。 G1 可以中止可选部分的回收以达到停顿时间目标
502
+ - ** 及时返回未使用的已分配内存** :JEP346 的实现,增强 G1 GC,以便在空闲时自动将 Java 堆内存返回给操作系统
503
+
504
+ ### 预览新特性
505
+
506
+ 作为预览特性加入,需要在` javac ` 编译和` java ` 运行时增加参数` --enable-preview ` 。
507
+
508
+ #### 增强 Switch
509
+
510
+ 传统的 ` switch ` 语法存在容易漏写 ` break ` 的问题,而且从代码整洁性层面来看,多个 break 本质也是一种重复
511
+
512
+ Java12 提供了 ` swtich ` 表达式,使用类似 lambda 语法条件匹配成功后的执行块,不需要多写 break 。
513
+
514
+ ``` java
515
+ switch (day) {
516
+ case MONDAY , FRIDAY , SUNDAY - > System . out. println(6 );
517
+ case TUESDAY - > System . out. println(7 );
518
+ case THURSDAY , SATURDAY - > System . out. println(8 );
519
+ case WEDNESDAY - > System . out. println(9 );
520
+ }
521
+ ```
522
+
523
+ #### instanceof 模式匹配
524
+
525
+ ` instanceof ` 主要在** 类型强转前探测对象的具体类型** 。
526
+
527
+ 之前的版本中,我们需要显示地对对象进行类型转换。
528
+
529
+ ``` java
530
+ Object obj = " 我是字符串" ;
531
+ if (obj instanceof String ){
532
+ String str = (String ) obj;
533
+ System . out. println(str);
534
+ }
535
+ ```
536
+
537
+ 新版的 ` instanceof ` 可以在判断是否属于具体的类型同时完成转换。
538
+
539
+ ``` java
540
+ Object obj = " 我是字符串" ;
541
+ if (obj instanceof String str){
542
+ System . out. println(str);
543
+ }
544
+ ```
455
545
456
546
## Java13
457
547
@@ -599,16 +689,7 @@ switch (day) {
599
689
600
690
### instanceof 增强
601
691
602
- - instanceof 主要在** 类型强转前探测对象的具体类型** ,然后执行具体的强转
603
-
604
- - 新版的 instanceof 可以在判断的是否属于具体的类型同时完成转换
605
-
606
- ``` java
607
- Object obj = " 我是字符串" ;
608
- if (obj instanceof String str){
609
- System . out. println(str);
610
- }
611
- ```
692
+ 依然是** 预览特性** ,Java 12 新特性中介绍过。
612
693
613
694
### 其他特性
614
695
@@ -640,6 +721,7 @@ if(obj instanceof String str){
640
721
- Java 11 – Features and Comparison: < https://www.geeksforgeeks.org/java-11-features-and-comparison/ >
641
722
- Oracle Java12 ReleaseNote < https://www.oracle.com/technetwork/java/javase/12all-relnotes-5211423.html#NewFeature >
642
723
- Oracle Java13 ReleaseNote < https://www.oracle.com/technetwork/java/javase/13all-relnotes-5461743.html#NewFeature >
724
+ - New Features in Java 12 < https://www.baeldung.com/java-12-new-features >
643
725
- New Java13 Features < https://www.baeldung.com/java-13-new-features >
644
726
- Java13 新特性概述 < https://www.ibm.com/developerworks/cn/java/the-new-features-of-Java-13/index.html >
645
727
- Oracle Java14 record < https://docs.oracle.com/en/java/javase/14/language/records.html >
0 commit comments