[update] jdk 10的示例

This commit is contained in:
maxf 2025-08-12 18:10:04 +08:00
parent d9a548ba44
commit b29d5741dc
5 changed files with 157 additions and 2 deletions

View 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的增强。

View 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");
}
}

View File

@ -1,9 +1,15 @@
/** /**
* Java 10 新特性主程序入口
* 演示Java 10的主要新特性
*
* @author maxiaofeng * @author maxiaofeng
* @date 2025/7/18 10:06 * @date 2025/7/18 10:06
*/ */
public class Main { public class Main {
public static void main(String[] args) { public static void main(String[] args) {
System.out.println("hello java8."); System.out.println("Java 10 新特性示例");
// 运行局部变量类型推断示例
VarExample.runExample();
} }
} }

View 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");
}
}

View 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");
}
}