Java 11 正式发布, 一起来看有哪些新功能与改变

Oracle 已正式发布 Java 11 LTS(长期支持版), 上一个长期支持版是Java 8 (其支持只到2025年3月)

中间经历了Java 9, Java 10, 到底改了哪些东西, 有需要升级版本吗? 一起来看看

局部变量类型推断:

var hello = "Hello World!";System.out.println(hello);

可以清楚的看到, 不用指定变数型态, 编译器会自动推断, 以上範例就是自动推断为String

String类别加强

// 判断是否为空白  " ".isBlank();                // true  // 去除首尾空格  " Javastack ".strip();          // "Javastack"  // 去除尾部空格   " Javastack ".stripTrailing();  // " Javastack"  // 去除首部空格   " Javastack ".stripLeading();   // "Javastack "  // 複製  "Java".repeat(3);             // "JavaJavaJava"  // 行数统计  "A\nB\nC".lines().count();    // 3

集合加强

List/Set/Map 都加入了 of 和 copyOf 方法, 适用于创建不可变的集合(Immutable Collection)

var list = List.of("Hello", "World", "Java");var copy = List.copyOf(list);System.out.println(list == copy); //true
var list = new ArrayList<String>();var copy = List.copyOf(list);System.out.println(list == copy); //false

为何一个为true, 一个为false呢?

是因为copyOf方法会先判断来源是否为AbstractImmutableList类型, 如果是就返回, 不是则新建一个

而範例2 new ArrayList不属于AbstractImmutableList的子类, 所以创建了一个新的物件。

Stream加强

增加ofNullable方法, 可为null

Stream.ofNullable(null).count();  //0

增加takeWhile和dropWhile

Stream.of(1,2,3,4,5).takeWhile(i -> i < 3).Collect(Collectors.toList());  //[1,2]

从0开始算, 若i < 3则停止

Stream.of(1,2,3,4,5).dropWhile(i -> i < 3).Collect(Collectors.toList()); //[3,4,5]

跟上面相反, 若i < 3 不成立则开始

Optional加强
Optional可直接转换成Stream类别

Optional.of("helloJava").orElseThrow();   //helloJavaOptional.of("helloJava").stream().count();   //1Optional.ofNullable(null).or(() -> Optional.of("helloJava")).get();   //helloJava

InputStream加强
超实用的transferTo, 直接将InputStream转成OutputStream

var loader = ClassLoader.getSystemClassLoader();var inputStream = loader.getResourceAsStream("helloJava.txt");var file = File.createTempFile("helloJava2", "txt");try(var outputStream = new FileOutputStream(file)){    inputStream.transferTo(outputStream);}

HTTP Client API
Java的HTTP早该更新了, 此次更新支持了同步与非同步, 有了新的HTTP Client, 谁还需要导入apache包呢

var request = HttpRequest.newBuilder(URI.create("https://www.google.com")).GET().build();var client = HttpClient.newHttpClient();//同步HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());System.out.println(response.body());//非同步client.sendAsync(request, HttpResponse.BodyHandlers.ofString()).thenApply(HttpResponse::body).thenAccept(System.out::println);

此外还有对GC(垃圾回收器)做了加强, 支持TLS 1.3协定...等等

如果目前专案使用Java 6的朋友, 推荐可以换新版本

若是用Java 8的朋友, 可撑一阵子再换, 但以长期来看新版本的确是值得投资的。


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章