Oracle kondigt de beschikbaarheid aan van Java 22, de nieuwste versie van de nummer één programmeertaal en het ontwikkelingsplatform. Java 22 (Oracle JDK 22) levert duizenden verbeteringen op het gebied van prestaties, stabiliteit en beveiliging om ontwikkelaars te helpen hun productiviteit te verhogen, innovatie te stimuleren en de groei van hun organisaties te versnellen. Dit zijn onder andere verbeteringen aan de Java-taal, de API's en prestaties ervan, en de tools in de Java Development Kit (JDK).

De nieuwste JDK biedt updates en verbeteringen met 12 JDK Enhancement Proposals (JEP's). JDK 22 levert taalverbeteringen van OpenJDK Project Amber (Statements before super[?], Unnamed Variables & Patterns, String Templates, en Implicitly Declared Classes and Instance Main Methods); verbeteringen van Project Panama (Foreign Function & Memory API en Vector API); functies gerelateerd aan Project Loom (Structured Concurrency en Scoped Values); kernbibliotheken en gereedschappen (Class-File API, Multi-File Source-Code Programs starten, en Stream Gatherers); en prestatie-updates (Region Pinning voor G1). Belangrijke updates in Java 22 zijn: Project Amber-functies: JEP 447: Verklaringen vóór super(?): Geeft ontwikkelaars de vrijheid om het gedrag van constructeurs uit te drukken.

Door toe te staan dat verklaringen die niet verwijzen naar de instantie die wordt gecreëerd, vóór een expliciete constructoraanroep verschijnen, maakt deze functie een meer natuurlijke plaatsing mogelijk van logica die moet worden verdisconteerd in aanvullende statische methoden, aanvullende tussenconstructeurs of constructorargumenten. Het behoudt ook de bestaande zekerheid dat constructeurs in top-down volgorde worden uitgevoerd tijdens de instantiëring van een klasse, wat ervoor zorgt dat code in een constructor van een subklasse de instantiëring van de superklasse niet kan verstoren. Bovendien vereist deze functie geen wijzigingen aan de Java Virtual Machine (JVM) en is deze alleen afhankelijk van de huidige mogelijkheid van de JVM om code te verifiëren en uit te voeren die vóór expliciete constructoraanroepen binnen constructors staat.

JEP 456: Naamloze variabelen en patronen: Helpt de productiviteit van ontwikkelaars te verbeteren door de Java-taal uit te breiden met naamloze variabelen en patronen, die kunnen worden gebruikt wanneer variabele declaraties of geneste patronen vereist zijn, maar nooit worden gebruikt. Dit vermindert de kans op fouten, verbetert de leesbaarheid van recordpatronen en verhoogt de onderhoudbaarheid van alle code. JEP 459: String Sjablonen (Tweede voorbeeld): Vereenvoudigt de ontwikkeling van Java-programma's door het gemakkelijk te maken om strings uit te drukken die waarden bevatten die tijdens het uitvoeren zijn berekend, terwijl het ook de veiligheid verbetert van programma's die strings samenstellen uit door de gebruiker verstrekte waarden en deze doorgeven aan andere systemen. Daarnaast is de leesbaarheid van expressies die met tekst gemengd zijn verbeterd, en kunnen niet-stringwaarden die uit letterlijke tekst en ingesloten expressies berekend zijn, aangemaakt worden zonder door een tussenliggende stringrepresentatie te moeten gaan.

JEP 463: Impliciet gedeclareerde klassen en Instance-hoofdmethoden (tweede voorbeeld): Helpt het leren te versnellen door een soepele opstap naar Java-programmeren te bieden, zodat leerlingen hun eerste programma's kunnen schrijven zonder taalfuncties te hoeven begrijpen die voor grote programma's zijn ontworpen. Met deze functie kunnen docenten concepten op een geleidelijke manier introduceren en kunnen leerlingen gestroomlijnde declaraties schrijven voor programma's met één klasse en hun programma's naadloos uitbreiden om meer geavanceerde functies te gebruiken naarmate hun vaardigheden toenemen. Project Loom functies: JEP 462: Structured Concurrency (Second Preview): Helpt ontwikkelaars om de foutafhandeling en annulering te stroomlijnen en de observeerbaarheid te verbeteren door een API voor gestructureerde gelijktijdigheid te introduceren. Dit helpt bij het bevorderen van een stijl van gelijktijdig programmeren die veelvoorkomende risico's die voortkomen uit annulering en uitschakeling kan elimineren ?

zoals draadlekken en annuleringsvertragingen? en verbetert de observeerbaarheid van gelijktijdige code. JEP 464: Scoped Values (Second Preview): Helpt het gebruiksgemak, de begrijpelijkheid, de prestaties en de robuustheid van projecten van ontwikkelaars te vergroten door het delen van onveranderlijke gegevens binnen en tussen threads mogelijk te maken.

Project Panama-functies: JEP 454: Foreign Function & Memory API: Verhoogt het gebruiksgemak, de flexibiliteit, de veiligheid en de prestaties voor ontwikkelaars door een API te introduceren waarmee Java-programma's kunnen samenwerken met code en gegevens buiten de Java-runtime. Door buitenlandse functies zoals code buiten de Java Virtual Machine efficiënt aan te roepen en door veilig toegang te krijgen tot vreemd geheugen (d.w.z. geheugen dat niet door de JVM wordt beheerd), stelt de nieuwe API Java-programma's in staat om native bibliotheken aan te roepen en native gegevens te verwerken zonder dat de Java Native Interface nodig is. JEP 460: Vector-API (Seventh Incubator): Stelt ontwikkelaars in staat om betere prestaties te bereiken dan gelijkwaardige scalaire berekeningen door een API te introduceren om vectorberekeningen uit te drukken die tijdens runtime betrouwbaar compileren naar vectorinstructies op ondersteunde CPU-architecturen.

Basisbibliotheken & Tools Kenmerken: JEP 457: Class-File API (Preview): Helpt ontwikkelaars hun productiviteit te verbeteren door een standaard-API te bieden voor het parsen, genereren en transformeren van Java-klassebestanden. JEP 458: Multi-File Source-Code Programma's Starten: Stelt ontwikkelaars in staat om te kiezen of en wanneer ze een buildtool configureren door de Java applicatie launcher te verbeteren zodat deze een programma kan starten dat als meerdere bestanden met Java broncode wordt aangeleverd. JEP 461: Stream Gatherers (Preview): Helpt ontwikkelaars hun productiviteit te verbeteren door de Stream API te verbeteren om aangepaste tussenliggende operaties te ondersteunen, waardoor stream-pijplijnen gegevens kunnen transformeren op manieren die niet gemakkelijk haalbaar zijn met de bestaande ingebouwde tussenliggende operaties.

Door stream pipelines flexibeler en expressiever te maken en aangepaste tussenliggende operaties toe te staan om streams van oneindige grootte te manipuleren, stelt deze functie ontwikkelaars in staat om efficiënter te worden in het lezen, schrijven en onderhouden van Java-code.