Java 8 (又称为 jdk 1.8) 是 Java 语言开发的一个主要版本。 Oracle 公司于 2014 年 3 月 18 日发布 Java 8 ,它支持函数式编程,新的 JavaScript 引擎,新的日期 API,新的Stream API 等。
jdk8的官网What's New in JDK 8 (oracle.com)
下面了解YI下新特性:
- Lambda 表达式:Lambda 表达式允许我们以更简洁的方式编写匿名函数,可以在集合操作、事件处理等场景中显著减少代码量。例如:
/**Lambda语法: (参数列表) -> { 代码块 } */ /*Lambda表达式是前提基于:函数式接口来实现的: 只包含一个抽象方法的接口,称为函数式接口 左侧:指定了 Lambda 表达式需要的参数列表 右侧:指定了 Lambda 体,是抽象方法的实现逻辑,也即Lambda 表达式要执行的功能 */ List<String> names = Arrays.asList("Alice", "Bob", "Charlie"); names.forEach(name -> System.out.println(name));
- Stream API:Stream API 提供了一种新的处理集合的方式,可以轻松进行过滤、映射、排序等操作。例如:
// 使用Stream API统计names列表中以'A'开头的名字数量 List<String> names = Arrays.asList("Alice", "Bob", "Charlie"); long count = names.stream().filter(name -> name.startsWith("A")).count(); System.out.println("Names starting with 'A': " + count);
- 函数式接口:函数式接口是只有一个抽象方法的接口,可以使用注解
@FunctionalInterface
明确指明。例如:// 示例:定义一个名为Calculator的函数式接口 @FunctionalInterface interface Calculator { int calculate(int a, int b); }
- 默认方法(Default Methods):接口中可以定义具有默认实现的方法,使接口的演化更加容易。例如:
// 示例:定义一个名为Greeting的接口,并添加默认方法sayHello interface Greeting { default void sayHello() { System.out.println("Hello!"); } }
- 新的日期和时间 API:
java.time
包提供了更加灵活和强大的日期和时间处理工具,比老的Date
和Calendar
类更易用。例如:// 获取今天的日期并打印输出 LocalDate today = LocalDate.now(); System.out.println("Today's date: " + today);
- 接口中的静态方法:接口中可以包含静态方法的实现,使得接口具有更多的灵活性。例如
// 示例:在MathOperation接口中定义静态方法add,实现两数相加 interface MathOperation { static int add(int a, int b) { return a + b; } }
- CompletableFuture 类:CompletableFuture 类提供了更加灵活的异步编程方式,支持非阻塞式的回调和组合操作。例如:
// 示例:使用CompletableFuture异步执行任务并进行后续操作 CompletableFuture.supplyAsync(() -> "Hello") .thenApplyAsync(result -> result + " World") .thenAccept(System.out::println);
- Nashorn JavaScript 引擎:JDK 8 中引入了 Nashorn JavaScript 引擎,用于在 Java 程序中执行 JavaScript 代码。例如:
// 示例:使用Nashorn JavaScript引擎执行JavaScript代码 ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn"); engine.eval("print('Hello, Nashorn!')");
- 新的重复注解:JDK 8 允许在同一个元素上多次使用相同的注解,简化了一些场景下的代码编写。例如:
// 示例:定义一个名为Fruit的重复注解,并将其用于FruitsContainer类 @Repeatable(Fruits.class) @interface Fruit { String name(); } @Fruit(name = "Apple") @Fruit(name = "Orange") public class FruitsContainer {}
- 方法引用(Method References):可以通过方法引用来简化 Lambda 表达式,使代码更加清晰易懂。例如:
// 示例:将方法引用用于遍历打印names列表中的元素 List<String> names = Arrays.asList("Alice", "Bob", "Charlie"); names.forEach(System.out::println);
- 接口的私有方法:接口中允许定义私有方法,可以在接口的默认方法或静态方法中重用逻辑。例如:
// 示例:定义一个名为Vehicle的接口,其中包含私有方法和默认方法 interface Vehicle { default void start() { initialize(); System.out.println("Vehicle starting..."); } private void initialize() { System.out.println("Initializing vehicle..."); } }
- 更好的类型推断:引入了目标类型推断,使得编译器能够更好地推断 Lambda 表达式或方法引用的类型。例如:
// 示例:使用类型推断简化Lambda表达式的书写 List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); numbers.stream().map((Integer x) -> x * x).forEach(System.out::println);
这些新特性和工具使得Java编程更加现代化、简洁和高效,提高了开发效率和代码质量,同时也拓展了Java语言的功能范围。
标签:示例,System,接口,JDK8,特性,println,out,Lambda From: https://blog.csdn.net/2403_83203286/article/details/140287862