3. Confidential#CGIHR
Disclaimer
Tätä esitystä ei ole tarkoitettu syväluotaavaksi ja
kaiken kattavaksi oppimateriaaliksi Javan
kehityspolusta viimeisien vuosikymmenien aikana,
vaan se toimii yhtenä komponenttina tietylle
kohdennetulle yleisölle pidetyssä suullisessa
esityksessä.
• Esityksen aikana asioita tarkennetaan
fläppitaulun ja IDE:n kautta tarkasteltavien
koodiesimerkkien kautta.
• Olen nostanut esitykseen esimerkeiksi sellaisia
muutoksia, joihin olen omassa työssäni törmännyt
ja jotka olen kokenut hyödyllisiksi. Sisältö tuo
esiin yhden koodaajan kokeman eikä siten edes
yritä olla kattava listaus kunkin version tuomista
muutoksista.
4. Confidential#CGIHR
Javan versiohistoria
• JDK 1.0 julkaistiin vuonna 1996 (beta 1995)
• Aivan viime vuosiin asti varsinaista säännöllistä
julkaisusykliä ei ole ollut, vaan uusia versioita on julkaistu
tarpeen mukaan
• Oracle muuttanut julkaisustrategiaa merkittävästi
• Väliversioita (9,10) puolen vuoden välein. Lyhyt tukiaika.
• Tämän hetken tilanteessa ei kovinkaan relevantteja versioita, vaan
lähinnä valmistelleet Java 11 tulemista ja patchailleet edellisiä
versioita.
• Muutaman vuoden välein Long Term Support –versioita (8,11)
• Kaupallistuminen – Oraclen JDK on tuotantokäytössä
maksullinen ja lisenssien hinnoittelu vähintäänkin kryptinen
• Markkinoilla on kuitenkin paljon vaihtoehtoja, mm. samaisen
Oraclen samaisista lähdekoodeista kääntämä OpenJDK (ei
pitkää tukea)
6. Confidential#CGIHR 6
Java 7
• Try-with-resources
• Resurssit voidaan antaa trylle automaattista
sulkemista varten. Esimerkiksi kantaresurssit, file
io –streamit, jne (kaikki, jotka toteutettaa
AutoCloseable –rajapinnan).
• Stringit switcheissä
• Useampi poikkeus kiinni samassa catchissa
PreparedStatement ps = null;
ResultSet rs = null;
try {
ps = sql.prepareStatement(connection);
rs = ps.executeQuery();
….
catch (Exception e) {
….
} finally {
if (ps != null) s.close();
if (rs != null) s.close();
}
Ennen:
Jälkeen:
try (PreparedStatement ps = sql.prepareStatement(connection);
ResultSet rs = ps.executeQuery()) {
….
catch (Exception e) {
….
}
7. Confidential#CGIHR 7
Java 8
• Itselleni yksittäisenä devaajalle ehkä eniten uusia juttuja
tuonut versio
• Streamit ja lambda
• ParallelStreameillä voi tavoitella suorituskykyä, mutta
näiden käytössä on omat konnankoukkunsa.
• Optional
• ensimmäinen versio, täydentynyt myöhemmissä
julkaisuissa
• Tässä vaiheessa ehkä lähinnä vain nullien
korvaamiseen, myöhemmin tullut näppäriä
ominaisuuksia kuten ifPresentOrElse
• Uusi Time ja Date API
• Aiemmin erillisissä Joda-kirjastoissa käytettävissä
olleet LocalDate, LocalTime, LocalDateTime (jne) nyt
osana JDK:ta
private boolean hasEmptyIds(final List<Id> alternateIds) {
for (Id id : alternateIds) {
if (StringUtils.isEmpty(id.getValue)
return true;
}
}
Ennen streameja:
Jälkeen:
private boolean hasEmptyIds(final List<Id> alternateIds) {
return alternateIds.stream().anyMatch(id ->
StringUtils.isEmpty(id.getValue()));
}
Arrays.sort(strArray, (String s1, String s2) -> s2.length() - s1.length());
Lambda:
LocalTime start = LocalTime.of(0, 0);
LocalTime end = start.plusHours(2);
boolean isLater = end.isAfter(start);
Time & Date API:
8. Confidential#CGIHR 8
Java 9
• Modulaarisuus; JigSaw/JPMS
• Luokkapolun rinnalle moduulipolku
• Hyödyt itselleni hyödyt vähän epäselvät
• Ei pakollinen ja ilmeisesti globaalistikin jokseenkin vähän hyödynnetty
• Ei suoranaisesti korvaa Mavenin moduleita, mutta ei myöskään Javan
packageita
• JVM tuunauksia
• Esim G1 oletusroskienkeruuksi. Legendan mukaan full gc ei enää “stop
the world”
• Optionalin laajennuksia
• Objectsin laajennuksia, esim
• Objects.requireNonNullElse
• Collectioneiden factory metodit (immutable collectioneille)
• Set.of , List.of
String value = null;
If (value != null)
System.out.println(value);
else
System.out.println(“oli tyhjä”);
Ennen:
Jälkeen:
String value = null;
System.out.println(Objects.requireNonNullElse(value, “oli tyhjä”));
10. Confidential#CGIHR 10
Java 10
• “var”
• JVM tuunauksia
String value =“valuestring”;
List<String> list = new ArrayList<String>();
Ennen:
Jälkeen:
var value =“valuestring”;
var list = new ArrayList<String>();
11. Confidential#CGIHR 11
Java 11
• JVM tuunauksia
• Mm. JavaFx, Java EE ja Corba poistuneet JDK:sta, joidenkin
mukaan keventää JVMn muistikuormaa merkittävästikin
• LTS –versio
Ennen:
Jälkeen: