ืืืืจ ืฉืืฉื ืืืืฉืื ืฉื ืคืืชืื, ืืืจืงื ืฉืืจืจื ืืช ืคืืืคืืจืืช Java SE 22 (Java Platform, Standard Edition 22), ืืืฉืชืืฉืช ืืคืจืืืงื ืืงืื ืืคืชืื OpenJDK ืืืืฉืื ืืืืืก. ืืืขื ืืกืจืช ืืืง ืืืชืืื ืืช ืฉืืืฆืื ืืฉืืืืฉ, Java SE 22 ืฉืืืจ ืขื ืชืืืืืช ืืืืืจ ืขื ืืืืืจืืช ืงืืืืืช ืฉื ืคืืืคืืจืืช Java - ืจืื ืคืจืืืงืื ื-Java ืฉื ืืชืื ืืขืืจ ืขืืืื ืืคืขืื ืืื ืฉืื ืื ืืืฉืจ ืื ืคืืขืืื ืชืืช ืืืจืกื ืืืืฉื. ืื ืืื ื ืืชื ืช ืืืชืงื ื ืฉื Java SE 22 (JDK, JRE ืืฉืจืช JRE) ืืืื ืืช ืขืืืจ Linux (x86_64, AArch64), Windows (x86_64) ื-macOS (x86_64, AArch64). ืืืืืฉ ืืืชืืืืกืืช ืฉื Java 22, ืฉืคืืชื ืขื ืืื ืคืจืืืงื OpenJDK, ืคืชืื ืืืืืื ืชืืช ืจืืฉืืื GPLv2 ืขื ืืจืืืื ืฉื GNU ClassPath ืืื ืืืคืฉืจ ืงืืฉืืจ ืืื ืื ืืืืฆืจืื ืืกืืจืืื.
Java SE 22 ืืกืืื ืืืจืกืช ืชืืืื ืจืืืื ืืชืืฉืื ืืงืื ืขืืืื ืื ืขื ืืืืืืจื ืืืื. ืขื ืฃ ืืชืืืื ืืืืื ืืจืื (LTS) ืฆืจืื ืืืืืช Java SE 21 ืื Java SE 17, ืืฉืจ ืืงืืื ืขืืืื ืื ืขื 2031 ื-2029, ืืืชืืื (ืืืื ืืืจื ืืื ืขื 2028 ื-2026). ืืชืืืื ืืฆืืืืจืืช ืืกื ืืฃ LTS ืฉื Java SE 11 ืืกืชืืืื ืืกืคืืืืจ ืืืืจืื, ืื ืืชืืืื ืืืืจืืืช ืชืืืฉื ืขื 2032. ืชืืืื ืืืจืืืช ืืกื ืืฃ LTS ืฉื Java SE 8 ืชืืืฉื ืขื 2030.
ื ืืืืจ ืืื ืฉืืื ืืืฉืืจืืจ ืฉื Java 10, ืืคืจืืืงื ืขืืจ ืืชืืืื ืคืืชืื ืืืฉ, ืื ืฉืืจืื ืขื ืืืืืจ ืงืฆืจ ืืืชืจ ืืืืืืฆืจืืช ืืืืืจืืช ืืืฉืืช. ืคืื ืงืฆืืื ืืืืช ืืืฉื ืืคืืชืืช ืืขืช ืืกื ืืฃ ืืืกืืจ ืืื ืืืชืขืืื ืื ืืืื, ืืืืื ืฉืื ืืืื ืืืื ืื ืืืื ื ืืกืชืขืคืื ืกื ืืคืื ืื ืืฆื ืฉื ื ืืื ืืืืฆื ืืืืืจืืช ืืืฉืืช.
ืชืืื ืืช ืืืฉืืช ื-Java 22 ืืืืืืช:
- ืืืกืฃ ืืืฉืคื G1 ืืืื ืชืืืื ืืืฆืืืช ืืืืจืื, ืืืืคืฉืจืช ืืชืงื ืืืืคื ืืื ื ืืช ืืืงืืื ืฉื ืืืืืืงืื Java ืืืืืจืื ืืื ืืื ืืข ืืช ืืืืชื ืขื ืืื ืืกืคื ืืืฉืคื ืืืืคืฉืจ ืืขืืจื ืืืืื ืฉื ืืคื ืืืช ืืืืืืืงืืื ืืื ืืื Java ืืงืื ืืงืืจื. ืืืฆืืื ืืืคืฉืจืช ืื ืืืคืืืช ืืช ืืื ืืืฉืืื ืืืืืื ืข ืืืฉืืชืช ืืืกืืฃ ืืืฉืคื ืืขืช ืืืฆืืข ืืืืจืื ืงืจืืืืื ืฉื JNI (Java Native Interface) ืขื ืงืื ืืงืืจื (ืืืื ืืืฆืืข ืงืืขืื ืืื, ื-JVM ืื ืืืืจ ืืืืื ืืืืืืงืืื ืงืจืืืืื ืืืฉืืืืื ืืืืื ืืื ืืืืื ืข ืืชื ืื ืืจืืฅ). ืืฆืืื ืืกืืจื ืืืืืืงืืื ืงืจืืืืื ืืขืื ื ืืืกืฃ ืืืฉืคื, ืฉืืืื ืืืืฉืื ืื ืงืืช ืืืืจืื ืื ืืืฆืืืื.
- ื ืืกืคื ืชืืื ื ืจืืฉืื ืืช ืืื ืืืคืฉืจ ืืฆืืื ืืืืืืื ืืืื ืื ืืคื ื ืงืจืืื ืืกืืคืจ(...), ืืืฉืืฉืช ืืงืจืืื ืืคืืจืฉืช ืืื ืื ืืืืงืืช ืื ืืื ืื ืืืืงื ืฉืขืืจ ืืืจืืฉื ืื ืืืืืืื ืืื ืืื ื ืืชืืืืกืื ืืืืคืข ืฉื ืืฆืจ ืขื ืืื ืืื ืื. class Outer { void hello() { System.out.println("Hello"); } class Inner { Inner() { hello(); ืกืึผืคึผึถืจ(); } } }
- ื-API ืฉื FFM (Foreign Function & Memory) ืืืฆื, ืืืืคืฉืจ ืืื ืืจืืงืฆืื ืฉื ืชืืื ืืืช Java ืขื ืงืื ืื ืชืื ืื ืืืฆืื ืืื ืขื ืืื ืงืจืืื ืืคืื ืงืฆืืืช ืืกืคืจืืืช ืืืฆืื ืืืช ืืืืฉื ืืืืืจืื ืืืืฅ ื-JVM, ืืืื ืืืืืงืง ืืฉืืืืฉ ื-JNI (Java Native Interface).
- ืชืืืื ืืืฉืชื ืื ืืื ืฉื ืืืชืืืช ืืคืืกืื ืืืคืขืื - ืืืงืื ืืฉืชื ืื ืืืคืืกืื ืฉืืื ื ืืฉืืืืฉ ืื ืืืจืืืื ืืขืช ืงืจืืื, ืืขืช ืชืืื ืืฆืืื ืืช ืืชื "_". // was String pageName = switch (page) { case GitHubIssuePage(var url, var content, var links, int issueNumber) -> "ISSUE #" + issueNumber; ... }; // ืขืืฉืื ืืชื ืืืื String pageName = switch (page) { case GitHubIssuePage(_, _, _, int issueNumber) -> "ISSUE #" + issueNumber; };
- ืืืฉืื ืจืืฉืื ื ืฉื ื-Class-File API ืืืฆืข ืื ืืชืื, ืืฆืืจื ืืืืจื ืฉื ืงืืฆื ืืืืงืืช Java. ClassFile cf = ClassFile.of(); ClassModel classModel = cf.parse(bytes); byte[] newBytes = cf.build(classModel.thisClass().asSymbol(), classBuilder -> { for (ClassElement ce : classModel) { if (!(ce instanceof MethodModel mm && mm.methodName().stringValue(). startsWith("debug"))) { classBuilder.with(ce); } } });
- ืชืืื ืืช ืืฉืืจืืช Java ืืกืคืงืช ืืช ืืืืืืช ืืืจืืฅ ืชืืื ืืืช Java, ืืืกืืคืงืืช ืืฆืืจื ืฉื ืืกืคืจ ืงืืืฆื ืงืื ืื ืกืคืจืืืช ืืืืงืืช ืืืืืจ ืืจืืฉ, ืืื ืงืืืคืืืฆืื ื ืคืจืืช ืฉื ืงืืฆืื ืืื ืืืืื ืืืืืืจ ืืช ืืขืจืืช ื-build. ืืชืืื ื ืืืืฉื ืืงืื ืขื ืืคืขืืช ืชืืื ืืืช ืฉืืื ืืงืื ืฉื ืืืืงืืช ืฉืื ืืช ืืืคืจื ืืงืืฆืื ื ืคืจืืื. Prog.java: class Prog { public static void main(String[] args) { Helper.run(); } } Helper.java: class Helper { static void run() { System.out.println("Hello!"); } }
ืืืืืื, ืืื ืืืจืืฅ ืชืืื ืืช ืืืืจืืืช ืืฉื ื ืงืืฆืื "Prog.java" ื-"Helper.java" ืืกืคืืง ืืขืช ืืืจืืฅ ืืช "java Prog.java", ืืฉืจ ืืงืืคื ืืช ืืืืืงื Prog, ืืืืืจ ืืคื ืื ืืืืืงื Helper, ืืฆื ืืืืืืจ ืงืืืฅ Helper.java ืืงืจืืื ืืฉืืื ืืจืืฉืืช.
- ืืืกืคื ืืืฉืื ืจืืฉืื ื ืฉื ื ืฉื String Templates, ืฉืืืฉื ืื ืืกืฃ ืืืืจืืืืช ืืืืืืืืช ืืืืืฉื ืืงืกื. ืชืื ืืืช ืืืจืืืืช ืืืคืฉืจืืช ืืฉืื ืืงืกื ืขื ืืืืืืื ืืืฉืชื ืื ืืืืฉืืื ืืืื ืืืฉืชืืฉ ืืืืคืจืืืจ +. ืืืืคืช ืืืืืืื ืืชืืฆืขืช ืืืืฆืขืืช ืืืืคืืช \{..}, ืื ืืชื ืืืืจ ืืืคืืื ืืืืืืื ืืื ืืืืืง ืืช ื ืืื ืืช ืืขืจืืื ืืืืืืคืื. ืืืืืื, ืื ืืข ื-SQL ืืืืง ืืช ืืขืจืืื ืืืืืืคืื ืืงืื ื-SQL ืืืืืืจ ืืืืืืงื java.sql.Statement ืืคืื, ืืขืื ืฉืืขืื ื-JSON ืขืืงื ืืืจ ื ืืื ืืช ืืืืคืืช ื-JSON ืืืืืืจ JsonNode. string query = "SELECT * FROM Person p WHERE p." + ืืืคืืื + " = '" + ืขืจื + "'"; // was Statement query = SQL."""SELECT * FROM Person p WHERE p.\{property} = '\{value}'""""; // ืืคืืชื
- ื ืืกืคื ืชืฆืืื ืืงืืืื ืฉืืืขืืช ืฉื ื-Vector API, ืืืกืคืงืช ืคืื ืงืฆืืืช ืืืืฉืืืื ืืงืืืจืืื ืืืืืฆืขืื ืืืืฆืขืืช ืืืจืืืช ืืงืืืจืืืช ืืืขืืื x86_64 ื-AArch64 ืืืืคืฉืจืืช ืืืืื ืคืขืืืืช ืื-ืืื ืืช ืขื ืืกืคืจ ืขืจืืื (SIMD). ืื ืืืื ืืืืืืืช ืื ืืชื ืืช ืืืืืจ HotSpot JIT ืขืืืจ ืืงืืืจืืืฆืื ืืืืืืืืช ืฉื ืคืขืืืืช ืกืงืืจืืืช, ื-API ืืืืฉ ืืืคืฉืจ ืืฉืืื ืืฆืืจื ืืคืืจืฉืช ื-Vectorization ืขืืืจ ืขืืืื ื ืชืื ืื ืืงืืืื.
- ื ืืกืคื ืืืฉืื ืจืืฉืื ื ืฉื ื-API ืืืืจืื ืฉื Stream ืืชืืื ืืืืืจืช ืคืขืืืืช ืืื ืืื ืืฉืื, ืื ืฉืขืฉืื ืืืืืช ืฉืืืืฉื ืืืงืจืื ืฉืืื ืคืขืืืืช ืืื ืืื ืืืื ืืช ืงืืืืืช ืืื ื ืืกืคืืงืืช ืืฉืื ืื ืื ืชืื ืื ืืจืฆืื. ืืืคืืื ืืงืืืืื ืืืืืจืื ืืืืฆืขืืช ืคืขืืืช ืืืื ืืื ืืืืฉื Stream::gather(Gatherer), ืืืขืืืช ืจืืืื ืืจืืื ืขื ืืื ืืืืช ืืืคื ืฉืฆืืื ืขื ืืื ืืืฉืชืืฉ ืขืืืื. jshell> Stream.of(1,2,3,4,5,6,7,8,9).gather(new WindowFixed(3)).toList() $1 ==> [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
- ืืืฆืขื ืืืืืงื ืืจืกื ืฉื ืืื ืฉื ื-API ืื ืืกืืื ื ื-Structured Concurrency, ืืฉืจ ืืคืฉืืช ืืช ืืคืืชืื ืฉื ืืืฉืืืื ืืจืืืื ืขื ืืื ืขืืืื ืืฉืืืืช ืืจืืืืช ืืืืืฆืขืืช ืืฉืจืฉืืจืื ืฉืื ืื ืืืืืง ืืืื.
- ื ืืกืฃ ืืืฉืื ืจืืฉืื ื ืฉื ื ืฉื ืืืืงืืช ืฉืืืืจืื ืืืจืืื ืืืืคืขืื ืืื ืฉื ืฉื ืฉืืืช ื"ืจืืฉืืช", ืฉืืืืื ืืืืชืจ ืขื ืืฆืืจืืช ืฆืืืืจืืืช/ืกืืืืืช, ืืขืืจืช ืืขืจื ืฉื ืืืขืื ืื ืืืฉืืืืช ืืืจืืช ืืงืฉืืจืืช ืืืฆืืจืช ืืืืงื. // ืืื ืืืืงื ืฆืืืืจืืช HelloWorld { public static void main(String[] args) { System.out.println("Hello world!"); } } // ืขืืฉืื ืืชื ืืืื ืืืื ืืช main() { System.out.println("Hello, World!"); }
- ื ืืกืคื ืืืฉืื ืชืฆืืื ืืงืืืื ืฉื ืืื ืฉื Scoped Values, ืืืืคืฉืจืช ืฉืืชืืฃ ื ืชืื ืื ืืืชื ื ืืชื ืื ืืฉืื ืื ืืื ืฉืจืฉืืจืื ืืืืืคืช ื ืชืื ืื ืืืขืืืืช ืืื ืฉืจืฉืืจื ืฆืืฆื (ืขืจืืื ืขืืืจืื ืืืจืืฉื). ืขืจืืื ืืืืงืฃ ืืคืืชืืื ืืื ืืืืืืฃ ืืช ืื ืื ืื ืืืฉืชื ืื ืืืงืืืืื ืฉื ืืฉืจืฉืืจ ืืื ืืขืืืื ืืืชืจ ืืขืช ืฉืืืืฉ ืืืกืคืจืื ืืืืืื ืืืื ืฉื ืฉืจืฉืืจืื ืืืจืืืืืืื (ืืืคื ืื ืืืืืื ื ืฉืจืฉืืจืื). ืืืืื ืืขืืงืจื ืืื ืขืจืืื ืืืืงืฃ ืืืฉืชื ืื ืืงืืืืื ืืื ืฉืืจืืฉืื ืื ื ืืชืืื ืคืขื ืืืช, ืื ื ืืชื ืื ืืฉืื ืื ืืขืชืื, ืื ืฉืืจืื ืืืื ืื ืจืง ืืืฉื ืืืฆืืข ืืฉืจืฉืืจ.
- ืืืกืฃ ืืืฉืคื ืืืงืืื ืฉืืคืจ ืืืฆืืขืื ืืขืืืื ืขื ืืขืจืืื ืืืืืื ืฉื ืืคืฆืื. ืืืคืืืืืืฆืื ืืคืฉืจื ืืืืง ืืืืืืงืืช ืขื ืืขืจืืื ืืืืืื ืฉื ืืืืืืงืืื ืืืคืืืช ืืช ืืืฉืืื ืืคื ื ืชืืืืช ืืืคืืฉ ืืืืืืงื ื-20%.
ืื ืืกืฃ, ื ืืชื ืืฉืื ืื ืืคืจืกืื ืขืืืื ืืคืืืคืืจืื ืืืฆืืจืช ืืคืืืงืฆืืืช ืขื ืืืฉืง ืืจืคื JavaFX 22.
ืืงืืจ: OpenNet.ru