从Java8到Java23值得期待的x个特性

你好,我是看山。

本文收录在 《从小工到专家的 Java 进阶之旅》 系列专栏中。

概述

从 2017 年开始,Java 版本更新遵循每六个月发布一次的节奏,LTS版本则每两年发布一次,以快速验证新特性,推动 Java 的发展。

Java版本分布

数据来源2024 State of the Java Ecosystem

一些可能不会用到的特性

web服务器jwebserver(Java 18)

为开发者提供一个轻量级、简单易用的 HTTP 服务器,通过命令行工具jwebserver可以启动一个最小化的静态 Web 服务器,这个服务器仅支持静态资源的访问,不支持 CGI(Common Gateway Interface)或类似 servlet 的功能,主要用于原型制作、测试和开发环境中的静态文件托管与共享。

它的应用场景包括:

  • 原型开发:由于其简单易用的特性,jwebserver 可以作为快速原型开发工具,帮助开发者在短时间内搭建起一个可以访问静态资源的 Web 服务。这对于需要验证某个功能或概念的初期阶段非常有用。
  • 快速部署:对于一些小规模的应用或者临时性的项目,使用 jwebserver 可以快速启动并运行一个简单的 Web 服务,而无需复杂的配置和环境搭建。这使得开发者能够迅速将想法转化为实际的可访问服务。
  • 学习与教育:jwebserver 提供了一个直观的平台,让初学者可以轻松上手 Java Web 开发。通过简单的命令行操作,用户可以快速理解 Web 服务器的工作原理及其基本配置。
  • 测试与调试:在进行 Web 应用的测试和调试时,jwebserver 可以作为一个独立的工具来提供静态文件的访问服务,从而方便开发者对应用进行测试和调试。
  • 本地开发环境:在本地开发环境中,jwebserver 可以替代传统的 Web 服务器如 Apache Tomcat 或 Nginx,为开发者提供一个轻量级的选择,以减少系统资源的占用。

我们可以简单试一下,在当前目录编写index.html:

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
    <h2>欢迎参观</h2>
    <h3><a href="https://www.howardliu.cn/">看山的小屋 howardliu.cn</a></h3>
    <p>
        一起<strong>开心</strong>学技术
    </p>
    <p>
        让我们一起<strong>扬帆起航</strong>
    </p>
</body>
</html>

运行jwebserver命令:

$ ./bin/jwebserver

Binding to loopback by default. For all interfaces use "-b 0.0.0.0" or "-b ::".
Serving /Users/liuxinghao/Library/Java/JavaVirtualMachines/temurin-18.0.2.1/Contents/Home and subdirectories on 127.0.0.1 port 8000
URL http://127.0.0.1:8000/

打开[http://127.0.0.1:8000/](http://127.0.0.1:8000/)就可以直接看到index.html的效果:

公众号:看山的小屋

jwebserver还支持指定地址和端口等参数,具体使用可以通过命令查看:

$ ./bin/jwebserver -h
Usage: jwebserver [-b bind address] [-p port] [-d directory]
                  [-o none|info|verbose] [-h to show options]
                  [-version to show version information]
Options:
-b, --bind-address    - Address to bind to. Default: 127.0.0.1 (loopback).
                        For all interfaces use "-b 0.0.0.0" or "-b ::".
-d, --directory       - Directory to serve. Default: current directory.
-o, --output          - Output format. none|info|verbose. Default: info.
-p, --port            - Port to listen on. Default: 8000.
-h, -?, --help        - Prints this help message and exits.
-version, --version   - Prints version information and exits.

隐式声明的类和实例方法(预览特性)

隐式声明的类和实例方法的目标是简化 Java 语言,使得学生和初学者可以更容易地编写他们的第一个程序,而无需理解为大型程序设计的复杂语言特性。

无论学习哪门语言,第一课一定是打印Hello, World!,Java中的写法是:

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println ("Hello, World!");
    }
}

如果是第一次接触,一定会有很多疑问,public干啥的,main方法的约定参数args是什么鬼?然后老师就说,这就是模板,照着抄就行,不这样写不运行。

现在可以简化为:

class HelloWorld {
    void main() {
        System.out.println ("Hello, World!");
    }
}

我们还可以这样写:

String greeting() { return "Hello, World!"; }

void main() {
    System.out.println(greeting());
}

main方法直接简化为名字和括号,甚至连类也不需要显性定义了。虽然看起来没啥用,但是在JShell中使用,就比较友好了。

本次预览新增了三个IO操作方法:

public static void println(Object obj);
public static void print(Object obj);
public static String readln(String prompt);

想要快速实现控制台操作,可以这样写了:

void main() {
    String name = readln("请输入姓名: ");
    print("很高兴见到你, ");
    println(name);
}

作为一个老程序猿,也不得不哇塞一下。

文末总结

想要了解各版本的详细特性,可以从从小工到专家的 Java 进阶之旅 系列专栏中查看。

青山不改,绿水长流,我们下次见。

推荐阅读


你好,我是看山。游于码界,戏享人生。如果文章对您有帮助,请点赞、收藏、关注。我还整理了一些精品学习资料,关注公众号「看山的小屋」,回复“资料”即可获得。

👇🏻欢迎关注我的公众号「看山的小屋」,领取精选资料👇🏻

公众号:看山的小屋