import java.net.InetSocketAddress;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;
/**
* Java 18 Features Demonstration
* Released in March 2022
*
* Key Features:
* 1. UTF-8 by Default
* 2. Simple Web Server (jwebserver)
* 3. Code Snippets in Java API Documentation (@snippet)
* 4. Vector API (Second Incubator)
* 5. Pattern Matching for switch (Second Preview)
*/
public class Java18Features {
public static void main(String[] args) {
demonstrateUTF8Default();
demonstrateSimpleWebServer();
demonstratePatternMatchingSwitch();
demonstrateCodeSnippets();
}
/**
* UTF-8 is now the default charset in Java 18
*/
private static void demonstrateUTF8Default() {
System.out.println("=== Java 18: UTF-8 by Default ===");
// Default charset is now UTF-8
Charset defaultCharset = Charset.defaultCharset();
System.out.println("Default Charset: " + defaultCharset);
System.out.println("Is UTF-8: " + defaultCharset.name().equals("UTF-8"));
System.out.println();
}
/**
* Simple Web Server (available via jwebserver command)
* Note: This demonstrates the API, actual server runs via command line
*/
private static void demonstrateSimpleWebServer() {
System.out.println("=== Java 18: Simple Web Server ===");
System.out.println("Simple Web Server can be started using:");
System.out.println(" jwebserver");
System.out.println(" jwebserver -p 9000");
System.out.println(" jwebserver -b 0.0.0.0 -p 8080 -d /path/to/dir");
System.out.println();
System.out.println("Programmatically:");
try {
// This would start a simple file server
// var server = SimpleFileServer.createFileServer(
// new InetSocketAddress(8080),
// Path.of("/tmp"),
// SimpleFileServer.OutputLevel.VERBOSE
// );
// server.start();
System.out.println("Server would be created at localhost:8080");
} catch (Exception e) {
System.out.println("Note: SimpleFileServer requires com.sun.net.httpserver");
}
System.out.println();
}
/**
* Pattern Matching for switch (Preview in Java 18)
* Demonstrates enhanced switch expressions with patterns
*/
private static void demonstratePatternMatchingSwitch() {
System.out.println("=== Java 18: Pattern Matching for switch (Preview) ===");
Object[] objects = {
"Hello",
42,
3.14,
new ArrayList