您的位置:

JDK新特性

一、jdk1.8新特性

1、Lambda表达式

List list = Arrays.asList(1, 2, 3, 4, 5);
list.forEach(n -> System.out.println(n));

  

2、方法引用

List list = Arrays.asList("Java", "Python", "C++", "PHP");
list.forEach(System.out::println);

  

3、Stream API

List list = Arrays.asList(1, 2, 3, 4, 5);
int sum = list.stream().filter(i -> i % 2 == 0).mapToInt(Integer::intValue).sum();
System.out.println("Sum of even numbers: " + sum);

  

二、jdk18新特性有哪些

1、类型注解

在方法参数、局部变量、泛型类等上面添加注解。

public <@MyTypeAnn T> void genericMethod(T[] tArray) { 
   List<@MyTypeAnn String> list = new ArrayList<>(); 
   ...
}

2、重复注解

相同类型的注解可以在同一位置上重复使用。

@FavoriteFruits({@Fruit(name = "apple", color = "red"), @Fruit(name = "banana", color = "yellow")})
public class Person {
   ...
}

@Repeatable(FavoriteFruits.class)
@interface Fruit {
   String name();
   String color();
}

@Retention(RetentionPolicy.RUNTIME)
@interface FavoriteFruits {
   Fruit[] value();
}

3、类型推断(var关键字)

声明变量时,可以使用var关键字进行类型推断。

var list = new ArrayList(Arrays.asList("Java", "Python", "C++", "PHP"));
var stream = list.stream();

  

三、jdk11新特性

1、局部类型推断

在lambda表达式、try-with-resources语句中使用var。

var list = Arrays.asList(1, 2, 3, 4, 5);
var evenList = list.stream().filter(i -> i % 2 == 0).collect(Collectors.toList());
try (var inputStream = new FileInputStream("file.txt")) {
    ...
}

2、字符串API增强

新增isBlank、lines、strip、stripLeading、stripTrailing等方法。

String str = "  hello world  ";
System.out.println(str.isBlank());
System.out.println(str.strip());
System.out.println(str.stripLeading());
System.out.println(str.stripTrailing());
System.out.println(str.lines().count());

3、HTTP客户端API

新增HttpClient类,可以用来进行HTTP/2协议的请求。

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
        .uri(URI.create("https://www.baidu.com"))
        .GET()
        .build();
HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());

  
以上是JDK新特性的一些亮点,现在的Java版本越来越强大,不断更新完善的特性也为我们开发提供了更多的选择。