Ne place să publicăm odată pe an un articol despre noutățile care apar în limbajul Java. În articolul de față vom prezenta trei schimbări introduse în Java SE 18, varianta de dezvoltare. A nu se confunda cu Java 17 care reprezintă versiunea de producție LTS (long term support).
A fost adoptat ca standard pentru lucrul cu șirurile de caractere. Până acum encodarea folosită depindea de sistemul de operare. În general, ca o bună practică, era indicat ca acesta să fie specificat înainte de folosire.
import java.nio.charset.*;
...
System.out.println(“default charset:“
+Charset.defaultCharset());
A fost inclus un server web în distribuția SDK-ului. Astfel, Java se aliniază cu majoritatea celorlalte frameworkuri cum ar fi node.js pentru JavaScript sau Laravel pentru PHP. Serverul web poate fi lansat din folderul /bin al distribuției Java 18.
> ./jwebserver
…
URL http://127.0.0.1:8000/
Folosirea sa este simplă. Lansat fără parametri va deservi directorul curent, dar acest lucru poate fi schimbat folosind parametrul -d. De asemenea, portul folosit se poate modifica prin -p
./jwebserver
**-d** /Library/Java/JavaVirtualMachines/jdk-18.0.2.jdk/Contents/Home/bin/public/
**-p** 9999
În exemplul de mai sus am lansat pe MacOs web serverul, a cărui cerință este să se specifice calea completă a folderului.
Înlocuiește folosirea tagurilor @code
și <pre >{ @code..} </pre >
{@snippet lang=”properties” :
house.number=42
house.street=Main St.
house.town=AnyTown, USA
}
Este introdus un nou API pentru operațiile cu vectori. Acestea sunt acum compilate la runtime într-un set optim de instrucțiuni pentru arhitectura procesorului folosit. Integrarea acestora necesită o adaptare a codului existent:
Codul standard:
void scalarComputation(float[] a, float[] b, float[] c) {
for (int i = 0; i < a.length; i++) {
c[i] = (a[i] * a[i] + b[i] * b[i])
* -1.0f;
}
}
Rescrierea acestuia folosind Vector API:
static final VectorSpecies SPECIES = FloatVector.SPECIES_PREFERRED;
void vectorComputation(float[] a, float[] b, float[] c) {
int i = 0;
int upperBound = SPECIES.loopBound(a.length);
for (; i < upperBound; i += SPECIES.length()) {
// FloatVector va, vb, vc;
var va = FloatVector.fromArray(SPECIES, a, i);
var vb = FloatVector.fromArray(SPECIES, b, i);
var vc = va.mul(va)
.add(vb.mul(vb))
.neg();
vc.intoArray(c, i);
}
for (; i < a.length; i++) {
c[i] = (a[i] * a[i] + b[i] * b[i]) * -1.0f;
}
}
Dacă vreți să citiți mai multe detalii despre Vector API vă recomand acest articol.