diff --git a/demo2/java10-example/README.md b/demo2/java10-example/README.md new file mode 100644 index 0000000..6a9b4a7 --- /dev/null +++ b/demo2/java10-example/README.md @@ -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的增强。 \ No newline at end of file diff --git a/demo2/java10-example/src/main/java/AppCDSExample.java b/demo2/java10-example/src/main/java/AppCDSExample.java new file mode 100644 index 0000000..d0381b4 --- /dev/null +++ b/demo2/java10-example/src/main/java/AppCDSExample.java @@ -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"); + } +} \ No newline at end of file diff --git a/demo2/java10-example/src/main/java/Main.java b/demo2/java10-example/src/main/java/Main.java index bbb3c32..a465d82 100644 --- a/demo2/java10-example/src/main/java/Main.java +++ b/demo2/java10-example/src/main/java/Main.java @@ -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(); } -} +} \ No newline at end of file diff --git a/demo2/java10-example/src/main/java/OtherFeaturesExample.java b/demo2/java10-example/src/main/java/OtherFeaturesExample.java new file mode 100644 index 0000000..b41b8fc --- /dev/null +++ b/demo2/java10-example/src/main/java/OtherFeaturesExample.java @@ -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 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 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 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"); + } +} \ No newline at end of file diff --git a/demo2/java10-example/src/main/java/VarExample.java b/demo2/java10-example/src/main/java/VarExample.java new file mode 100644 index 0000000..7761b5c --- /dev/null +++ b/demo2/java10-example/src/main/java/VarExample.java @@ -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(); // 推断为 ArrayList + 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(); // 推断为 HashMap + 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"); + } +} \ No newline at end of file