Exploring Modern Java: Key Language Features from Java 9 to 22 in a single program

Java has evolved significantly over the years, introducing powerful new features that enhance readability, performance, and developer productivity. In this article, we explore key language improvements from Java 9 to Java 22, including the Java Platform Module System, local variable type inference, switch expressions, text blocks, record classes, sealed types, and advanced pattern matching. Through a practical Java program, we demonstrate how these features work together to simplify coding and improve maintainability. Whether you’re a seasoned developer or just starting with modern Java, this guide will help you stay up to date with the latest advancements.

<span>import</span> <span>java.util.*</span><span>;</span>
<span>// Java 16: Record Classes (JEP 395)</span>
<span>record</span> <span>Person</span><span>(</span><span>String</span> <span>name</span><span>,</span> <span>int</span> <span>age</span><span>)</span> <span>{}</span>
<span>// Java 17: Sealed Classes (JEP 409)</span>
<span>sealed</span> <span>interface</span> <span>Animal</span> <span>permits</span> <span>Dog</span><span>,</span> <span>Cat</span> <span>{}</span>
<span>record</span> <span>Dog</span><span>(</span><span>String</span> <span>name</span><span>)</span> <span>implements</span> <span>Animal</span> <span>{}</span>
<span>record</span> <span>Cat</span><span>(</span><span>String</span> <span>name</span><span>)</span> <span>implements</span> <span>Animal</span> <span>{}</span>
<span>public</span> <span>class</span> <span>JavaFeaturesDemo</span> <span>{</span>
<span>public</span> <span>static</span> <span>void</span> <span>main</span><span>(</span><span>String</span><span>[]</span> <span>args</span><span>)</span> <span>{</span>
<span>// Java 10: Local Variable Type Inference (JEP 286)</span>
<span>var</span> <span>message</span> <span>=</span> <span>"Hello, Java!"</span><span>;</span>
<span>System</span><span>.</span><span>out</span><span>.</span><span>println</span><span>(</span><span>message</span><span>);</span>
<span>// Java 11: Local-Variable Syntax for Lambda Parameters (JEP 323)</span>
<span>List</span><span><</span><span>String</span><span>></span> <span>names</span> <span>=</span> <span>List</span><span>.</span><span>of</span><span>(</span><span>"Alice"</span><span>,</span> <span>"Bob"</span><span>,</span> <span>"Charlie"</span><span>);</span>
<span>names</span><span>.</span><span>forEach</span><span>((</span><span>var</span> <span>name</span><span>)</span> <span>-></span> <span>System</span><span>.</span><span>out</span><span>.</span><span>println</span><span>(</span><span>"Hello, "</span> <span>+</span> <span>name</span><span>));</span>
<span>// Java 14: Switch Expressions and Statements (JEP 361)</span>
<span>int</span> <span>day</span> <span>=</span> <span>3</span><span>;</span>
<span>var</span> <span>dayType</span> <span>=</span> <span>switch</span> <span>(</span><span>day</span><span>)</span> <span>{</span>
<span>case</span> <span>1</span><span>,</span> <span>2</span><span>,</span> <span>3</span><span>,</span> <span>4</span><span>,</span> <span>5</span> <span>-></span> <span>"Weekday"</span><span>;</span>
<span>case</span> <span>6</span><span>,</span> <span>7</span> <span>-></span> <span>"Weekend"</span><span>;</span>
<span>default</span> <span>-></span> <span>"Unknown"</span><span>;</span>
<span>};</span>
<span>System</span><span>.</span><span>out</span><span>.</span><span>println</span><span>(</span><span>"Day type: "</span> <span>+</span> <span>dayType</span><span>);</span>
<span>// Java 15: Text Blocks (JEP 378)</span>
<span>String</span> <span>json</span> <span>=</span> <span>""" { "name": "John", "age": 30 } """</span><span>;</span>
<span>System</span><span>.</span><span>out</span><span>.</span><span>println</span><span>(</span><span>"JSON Data: "</span> <span>+</span> <span>json</span><span>);</span>
<span>// Java 16: Pattern Matching with instanceof (JEP 394)</span>
<span>Object</span> <span>obj</span> <span>=</span> <span>"Pattern Matching Example"</span><span>;</span>
<span>if</span> <span>(</span><span>obj</span> <span>instanceof</span> <span>String</span> <span>str</span><span>)</span> <span>{</span>
<span>System</span><span>.</span><span>out</span><span>.</span><span>println</span><span>(</span><span>"String length: "</span> <span>+</span> <span>str</span><span>.</span><span>length</span><span>());</span>
<span>}</span>
<span>// Java 21: Record Patterns (JEP 440) and Pattern Matching with switch (JEP 441)</span>
<span>Person</span> <span>person</span> <span>=</span> <span>new</span> <span>Person</span><span>(</span><span>"John"</span><span>,</span> <span>25</span><span>);</span>
<span>switch</span> <span>(</span><span>person</span><span>)</span> <span>{</span>
<span>case</span> <span>Person</span><span>(</span><span>var</span> <span>name</span><span>,</span> <span>var</span> <span>age</span><span>)</span> <span>-></span> <span>System</span><span>.</span><span>out</span><span>.</span><span>println</span><span>(</span><span>"Person: "</span> <span>+</span> <span>name</span> <span>+</span> <span>", Age: "</span> <span>+</span> <span>age</span><span>);</span>
<span>}</span>
<span>// Java 22: Unnamed Variables and Patterns (JEP 456)</span>
<span>Person</span> <span>unnamedPerson</span> <span>=</span> <span>new</span> <span>Person</span><span>(</span><span>"Jane"</span><span>,</span> <span>30</span><span>);</span>
<span>if</span> <span>(</span><span>unnamedPerson</span> <span>instanceof</span> <span>Person</span><span>(</span><span>String</span> <span>_</span><span>,</span> <span>int</span> <span>age</span><span>))</span> <span>{</span>
<span>System</span><span>.</span><span>out</span><span>.</span><span>println</span><span>(</span><span>"Age: "</span> <span>+</span> <span>age</span><span>);</span>
<span>}</span>
<span>}</span>
<span>}</span>
<span>import</span> <span>java.util.*</span><span>;</span>

<span>// Java 16: Record Classes (JEP 395)</span>
<span>record</span> <span>Person</span><span>(</span><span>String</span> <span>name</span><span>,</span> <span>int</span> <span>age</span><span>)</span> <span>{}</span>

<span>// Java 17: Sealed Classes (JEP 409)</span>
<span>sealed</span> <span>interface</span> <span>Animal</span> <span>permits</span> <span>Dog</span><span>,</span> <span>Cat</span> <span>{}</span>
<span>record</span> <span>Dog</span><span>(</span><span>String</span> <span>name</span><span>)</span> <span>implements</span> <span>Animal</span> <span>{}</span>
<span>record</span> <span>Cat</span><span>(</span><span>String</span> <span>name</span><span>)</span> <span>implements</span> <span>Animal</span> <span>{}</span>

<span>public</span> <span>class</span> <span>JavaFeaturesDemo</span> <span>{</span>
    <span>public</span> <span>static</span> <span>void</span> <span>main</span><span>(</span><span>String</span><span>[]</span> <span>args</span><span>)</span> <span>{</span>
        <span>// Java 10: Local Variable Type Inference (JEP 286)</span>
        <span>var</span> <span>message</span> <span>=</span> <span>"Hello, Java!"</span><span>;</span>
        <span>System</span><span>.</span><span>out</span><span>.</span><span>println</span><span>(</span><span>message</span><span>);</span>

        <span>// Java 11: Local-Variable Syntax for Lambda Parameters (JEP 323)</span>
        <span>List</span><span><</span><span>String</span><span>></span> <span>names</span> <span>=</span> <span>List</span><span>.</span><span>of</span><span>(</span><span>"Alice"</span><span>,</span> <span>"Bob"</span><span>,</span> <span>"Charlie"</span><span>);</span>
        <span>names</span><span>.</span><span>forEach</span><span>((</span><span>var</span> <span>name</span><span>)</span> <span>-></span> <span>System</span><span>.</span><span>out</span><span>.</span><span>println</span><span>(</span><span>"Hello, "</span> <span>+</span> <span>name</span><span>));</span>

        <span>// Java 14: Switch Expressions and Statements (JEP 361)</span>
        <span>int</span> <span>day</span> <span>=</span> <span>3</span><span>;</span>
        <span>var</span> <span>dayType</span> <span>=</span> <span>switch</span> <span>(</span><span>day</span><span>)</span> <span>{</span>
            <span>case</span> <span>1</span><span>,</span> <span>2</span><span>,</span> <span>3</span><span>,</span> <span>4</span><span>,</span> <span>5</span> <span>-></span> <span>"Weekday"</span><span>;</span>
            <span>case</span> <span>6</span><span>,</span> <span>7</span> <span>-></span> <span>"Weekend"</span><span>;</span>
            <span>default</span> <span>-></span> <span>"Unknown"</span><span>;</span>
        <span>};</span>
        <span>System</span><span>.</span><span>out</span><span>.</span><span>println</span><span>(</span><span>"Day type: "</span> <span>+</span> <span>dayType</span><span>);</span>

        <span>// Java 15: Text Blocks (JEP 378)</span>
        <span>String</span> <span>json</span> <span>=</span> <span>""" { "name": "John", "age": 30 } """</span><span>;</span>
        <span>System</span><span>.</span><span>out</span><span>.</span><span>println</span><span>(</span><span>"JSON Data: "</span> <span>+</span> <span>json</span><span>);</span>

        <span>// Java 16: Pattern Matching with instanceof (JEP 394)</span>
        <span>Object</span> <span>obj</span> <span>=</span> <span>"Pattern Matching Example"</span><span>;</span>
        <span>if</span> <span>(</span><span>obj</span> <span>instanceof</span> <span>String</span> <span>str</span><span>)</span> <span>{</span>
            <span>System</span><span>.</span><span>out</span><span>.</span><span>println</span><span>(</span><span>"String length: "</span> <span>+</span> <span>str</span><span>.</span><span>length</span><span>());</span>
        <span>}</span>

        <span>// Java 21: Record Patterns (JEP 440) and Pattern Matching with switch (JEP 441)</span>
        <span>Person</span> <span>person</span> <span>=</span> <span>new</span> <span>Person</span><span>(</span><span>"John"</span><span>,</span> <span>25</span><span>);</span>
        <span>switch</span> <span>(</span><span>person</span><span>)</span> <span>{</span>
            <span>case</span> <span>Person</span><span>(</span><span>var</span> <span>name</span><span>,</span> <span>var</span> <span>age</span><span>)</span> <span>-></span> <span>System</span><span>.</span><span>out</span><span>.</span><span>println</span><span>(</span><span>"Person: "</span> <span>+</span> <span>name</span> <span>+</span> <span>", Age: "</span> <span>+</span> <span>age</span><span>);</span>
        <span>}</span>

        <span>// Java 22: Unnamed Variables and Patterns (JEP 456)</span>
        <span>Person</span> <span>unnamedPerson</span> <span>=</span> <span>new</span> <span>Person</span><span>(</span><span>"Jane"</span><span>,</span> <span>30</span><span>);</span>
        <span>if</span> <span>(</span><span>unnamedPerson</span> <span>instanceof</span> <span>Person</span><span>(</span><span>String</span> <span>_</span><span>,</span> <span>int</span> <span>age</span><span>))</span> <span>{</span>
            <span>System</span><span>.</span><span>out</span><span>.</span><span>println</span><span>(</span><span>"Age: "</span> <span>+</span> <span>age</span><span>);</span>
        <span>}</span>
    <span>}</span>
<span>}</span>
import java.util.*; // Java 16: Record Classes (JEP 395) record Person(String name, int age) {} // Java 17: Sealed Classes (JEP 409) sealed interface Animal permits Dog, Cat {} record Dog(String name) implements Animal {} record Cat(String name) implements Animal {} public class JavaFeaturesDemo { public static void main(String[] args) { // Java 10: Local Variable Type Inference (JEP 286) var message = "Hello, Java!"; System.out.println(message); // Java 11: Local-Variable Syntax for Lambda Parameters (JEP 323) List<String> names = List.of("Alice", "Bob", "Charlie"); names.forEach((var name) -> System.out.println("Hello, " + name)); // Java 14: Switch Expressions and Statements (JEP 361) int day = 3; var dayType = switch (day) { case 1, 2, 3, 4, 5 -> "Weekday"; case 6, 7 -> "Weekend"; default -> "Unknown"; }; System.out.println("Day type: " + dayType); // Java 15: Text Blocks (JEP 378) String json = """ { "name": "John", "age": 30 } """; System.out.println("JSON Data: " + json); // Java 16: Pattern Matching with instanceof (JEP 394) Object obj = "Pattern Matching Example"; if (obj instanceof String str) { System.out.println("String length: " + str.length()); } // Java 21: Record Patterns (JEP 440) and Pattern Matching with switch (JEP 441) Person person = new Person("John", 25); switch (person) { case Person(var name, var age) -> System.out.println("Person: " + name + ", Age: " + age); } // Java 22: Unnamed Variables and Patterns (JEP 456) Person unnamedPerson = new Person("Jane", 30); if (unnamedPerson instanceof Person(String _, int age)) { System.out.println("Age: " + age); } } }

Enter fullscreen mode Exit fullscreen mode

One way to improve your understanding of the latest Java changes is by taking Oracle Java Certifications.

原文链接:Exploring Modern Java: Key Language Features from Java 9 to 22 in a single program

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享
Life must be lived with love, happiness, and dreams.
人生一定要有爱,有快乐,有梦想
评论 抢沙发

请登录后发表评论

    暂无评论内容