[update] jdk 10的示例
This commit is contained in:
parent
d9a548ba44
commit
b29d5741dc
19
demo2/java10-example/README.md
Normal file
19
demo2/java10-example/README.md
Normal file
@ -0,0 +1,19 @@
|
||||
## Java 10 主要新特性
|
||||
---
|
||||
|
||||
### 1. 局部变量类型推断 (Local-Variable Type Inference)
|
||||
Java 10引入了`var`关键字,允许编译器自动推断局部变量的类型,简化了代码编写。
|
||||
|
||||
示例代码:[VarExample.java](src/main/java/VarExample.java)
|
||||
|
||||
### 2. 应用类数据共享 (Application Class-Data Sharing)
|
||||
扩展了JDK 5中引入的类数据共享功能,允许将应用程序类加载到内存中并被其他JVM进程共享,提高启动速度和内存效率。
|
||||
|
||||
### 3. 基于时间的版本发布模式
|
||||
Java开始采用新的6个月发布周期,使新功能能够更快地交付给开发者。
|
||||
|
||||
### 4. 垃圾收集器改进
|
||||
包括G1垃圾收集器的并行化等改进。
|
||||
|
||||
### 5. 其他API增强
|
||||
包括Optional、Stream、Collection等API的增强。
|
27
demo2/java10-example/src/main/java/AppCDSExample.java
Normal file
27
demo2/java10-example/src/main/java/AppCDSExample.java
Normal file
@ -0,0 +1,27 @@
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* Java 10 新特性示例:应用类数据共享 (Application Class-Data Sharing)
|
||||
*
|
||||
* AppCDS允许将应用程序类加载到共享存档中,以便在多个JVM进程间共享,
|
||||
* 从而减少启动时间和内存占用。
|
||||
*
|
||||
* 使用方法:
|
||||
* 1. 创建类列表: java -Xshare:off -XX:DumpLoadedClassList=app.classlist com.example.MyApp
|
||||
* 2. 创建共享存档: java -Xshare:dump -XX:SharedClassListFile=app.classlist -XX:SharedArchiveFile=app.jsa
|
||||
* 3. 使用共享存档: java -Xshare:on -XX:SharedArchiveFile=app.jsa com.example.MyApp
|
||||
*/
|
||||
public class AppCDSExample {
|
||||
public static void runExample() {
|
||||
System.out.println("=== Java 10 应用类数据共享示例 ===");
|
||||
System.out.println("应用类数据共享(AppCDS)是Java 10的重要性能特性");
|
||||
System.out.println("它可以显著提高JVM启动速度并减少内存占用");
|
||||
System.out.println("特别适用于需要快速启动和运行多个JVM实例的场景");
|
||||
System.out.println("");
|
||||
System.out.println("使用步骤:");
|
||||
System.out.println("1. 创建类列表: java -Xshare:off -XX:DumpLoadedClassList=app.classlist MyApp");
|
||||
System.out.println("2. 创建共享存档: java -Xshare:dump -XX:SharedClassListFile=app.classlist -XX:SharedArchiveFile=app.jsa");
|
||||
System.out.println("3. 使用共享存档: java -Xshare:on -XX:SharedArchiveFile=app.jsa MyApp");
|
||||
System.out.println("\n=== 应用类数据共享示例结束 ===\n");
|
||||
}
|
||||
}
|
@ -1,9 +1,15 @@
|
||||
/**
|
||||
* Java 10 新特性主程序入口
|
||||
* 演示Java 10的主要新特性
|
||||
*
|
||||
* @author maxiaofeng
|
||||
* @date 2025/7/18 10:06
|
||||
*/
|
||||
public class Main {
|
||||
public static void main(String[] args) {
|
||||
System.out.println("hello java8.");
|
||||
System.out.println("Java 10 新特性示例");
|
||||
|
||||
// 运行局部变量类型推断示例
|
||||
VarExample.runExample();
|
||||
}
|
||||
}
|
41
demo2/java10-example/src/main/java/OtherFeaturesExample.java
Normal file
41
demo2/java10-example/src/main/java/OtherFeaturesExample.java
Normal file
@ -0,0 +1,41 @@
|
||||
import java.util.*;
|
||||
import java.util.stream.*;
|
||||
import java.util.concurrent.*;
|
||||
|
||||
/**
|
||||
* Java 10 其他新特性示例
|
||||
*
|
||||
* 包括API增强和其他重要改进
|
||||
*/
|
||||
public class OtherFeaturesExample {
|
||||
public static void runExample() {
|
||||
System.out.println("=== Java 10 其他新特性示例 ===");
|
||||
|
||||
// Optional.orElseThrow() 简化调用
|
||||
Optional<String> optional = Optional.empty();
|
||||
try {
|
||||
// Java 10之前: optional.orElseThrow(NoSuchElementException::new)
|
||||
// Java 10之后: optional.orElseThrow() - 无需显式指定异常构造器
|
||||
String result = optional.orElseThrow(); // 简化版本
|
||||
} catch (NoSuchElementException e) {
|
||||
System.out.println("Optional为空,抛出异常: " + e.getMessage());
|
||||
}
|
||||
|
||||
// Collection.toArray() 新重载方法
|
||||
List<String> stringList = Arrays.asList("Java", "10", "新特性");
|
||||
// Java 10新增的重载方法,可以直接指定数组类型
|
||||
String[] stringArray = stringList.toArray(String[]::new);
|
||||
System.out.println("Collection.toArray() 新方法结果: " + Arrays.toString(stringArray));
|
||||
|
||||
// Stream API 增强 - Collectors.teeing()
|
||||
// 注意:teeing是在Java 12中引入的,这里演示其他collector的使用
|
||||
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
|
||||
|
||||
// 使用新的API改进
|
||||
var average = numbers.stream()
|
||||
.collect(Collectors.averagingInt(Integer::intValue));
|
||||
System.out.println("数字平均值: " + average);
|
||||
|
||||
System.out.println("\n=== 其他新特性示例结束 ===\n");
|
||||
}
|
||||
}
|
62
demo2/java10-example/src/main/java/VarExample.java
Normal file
62
demo2/java10-example/src/main/java/VarExample.java
Normal file
@ -0,0 +1,62 @@
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* Java 10 新特性示例:局部变量类型推断 (Local-Variable Type Inference)
|
||||
* 使用 var 关键字让编译器自动推断局部变量类型
|
||||
*
|
||||
* 这是Java 10最显著的特性之一,简化了代码编写,同时保持了Java的强类型特性
|
||||
*/
|
||||
public class VarExample {
|
||||
public static void runExample() {
|
||||
System.out.println("=== Java 10 局部变量类型推断示例 ===");
|
||||
|
||||
// 基本类型推断
|
||||
var message = "Hello, Java 10!"; // 推断为 String
|
||||
var number = 42; // 推断为 int
|
||||
var decimal = 3.14159; // 推断为 double
|
||||
var flag = true; // 推断为 boolean
|
||||
|
||||
System.out.println("String类型: " + message);
|
||||
System.out.println("int类型: " + number);
|
||||
System.out.println("double类型: " + decimal);
|
||||
System.out.println("boolean类型: " + flag);
|
||||
|
||||
// 集合类型推断
|
||||
var list = new ArrayList<String>(); // 推断为 ArrayList<String>
|
||||
list.add("项目1");
|
||||
list.add("项目2");
|
||||
list.add("项目3");
|
||||
|
||||
System.out.println("\nArrayList内容:");
|
||||
for (var item : list) { // 在增强for循环中使用var
|
||||
System.out.println("- " + item);
|
||||
}
|
||||
|
||||
// Map类型推断
|
||||
var map = new HashMap<String, Integer>(); // 推断为 HashMap<String, Integer>
|
||||
map.put("一", 1);
|
||||
map.put("二", 2);
|
||||
map.put("三", 3);
|
||||
|
||||
System.out.println("\nHashMap内容:");
|
||||
map.forEach((key, value) -> System.out.println(key + " -> " + value));
|
||||
|
||||
// 流处理中使用var
|
||||
var numbers = List.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
|
||||
var evenNumbers = numbers.stream()
|
||||
.filter(n -> n % 2 == 0)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
System.out.println("\n流处理结果:");
|
||||
evenNumbers.forEach(System.out::println);
|
||||
|
||||
// 在try-with-resources语句中使用var
|
||||
try (var scanner = new Scanner(System.in)) {
|
||||
System.out.println("\n在try-with-resources中使用var");
|
||||
// var scanner = new Scanner(System.in); // 正常工作
|
||||
}
|
||||
|
||||
System.out.println("\n=== 局部变量类型推断示例结束 ===\n");
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user