Introducció
Java 9 va introduir una sèrie de novetats i millores significatives que han continuat evolucionant en les versions posteriors. Aquest tema cobreix les característiques clau de Java 9 i les millores que s'han anat afegint en les versions següents fins a l'actualitat.
Continguts
- Sistema de Mòduls de Java (Project Jigsaw)
- Millores en l'API de Fluxos (Streams)
- Interfície de Mètodes Privats
- Millores en la Consola JShell
- API de Processos
- Millores en la Gestió de Memòria
- Característiques de Java 10 i Més Enllà
- Exercicis Pràctics
- Sistema de Mòduls de Java (Project Jigsaw)
Explicació
El sistema de mòduls de Java, introduït en Java 9, permet dividir el codi en mòduls que poden ser gestionats de manera independent. Això millora la mantenibilitat i la seguretat del codi.
Exemples Pràctics
Definició d'un Mòdul
Ús d'un Mòdul
// com/example/myapp/Main.java package com.example.myapp; public class Main { public static void main(String[] args) { System.out.println("Hello, Java 9 Modules!"); } }
Exercici
- Crea un mòdul anomenat
com.example.helloworld
que contingui una classeHelloWorld
amb un mètodemain
que imprimeixi "Hello, World!".
- Millores en l'API de Fluxos (Streams)
Explicació
Java 9 va introduir noves operacions a l'API de fluxos, com takeWhile
, dropWhile
i ofNullable
.
Exemples Pràctics
takeWhile
i dropWhile
import java.util.List; import java.util.stream.Collectors; public class StreamExample { public static void main(String[] args) { List<Integer> numbers = List.of(1, 2, 3, 4, 5, 6, 7, 8, 9); List<Integer> taken = numbers.stream() .takeWhile(n -> n < 5) .collect(Collectors.toList()); System.out.println(taken); // Output: [1, 2, 3, 4] List<Integer> dropped = numbers.stream() .dropWhile(n -> n < 5) .collect(Collectors.toList()); System.out.println(dropped); // Output: [5, 6, 7, 8, 9] } }
Exercici
- Utilitza
takeWhile
idropWhile
per processar una llista de números i filtrar els elements segons una condició.
- Interfície de Mètodes Privats
Explicació
Java 9 permet definir mètodes privats dins d'interfícies, millorant la reutilització de codi dins de les interfícies.
Exemples Pràctics
public interface MyInterface { default void defaultMethod() { privateMethod(); } private void privateMethod() { System.out.println("This is a private method in an interface."); } }
Exercici
- Crea una interfície amb un mètode privat i un mètode per defecte que cridi al mètode privat.
- Millores en la Consola JShell
Explicació
JShell és una eina interactiva de línia de comandes per a Java, introduïda en Java 9, que permet provar codi de manera ràpida.
Exemples Pràctics
Inici de JShell
Executar Codi en JShell
Exercici
- Inicia JShell i prova diferents fragments de codi per familiaritzar-te amb l'eina.
- API de Processos
Explicació
Java 9 va millorar l'API de processos, permetent una millor gestió i control dels processos del sistema operatiu.
Exemples Pràctics
import java.io.IOException; public class ProcessExample { public static void main(String[] args) throws IOException { ProcessBuilder processBuilder = new ProcessBuilder("notepad.exe"); Process process = processBuilder.start(); System.out.println("Process ID: " + process.pid()); } }
Exercici
- Utilitza l'API de processos per iniciar una aplicació del sistema operatiu i obtenir el seu ID de procés.
- Millores en la Gestió de Memòria
Explicació
Java 9 va introduir millores en la gestió de memòria, com el Garbage Collector G1 per defecte i l'optimització de l'ús de memòria.
Exemples Pràctics
Configuració del Garbage Collector
Exercici
- Investiga les opcions de configuració del Garbage Collector i prova diferents configuracions en una aplicació Java.
- Característiques de Java 10 i Més Enllà
Explicació
Les versions posteriors a Java 9 han continuat afegint noves característiques i millores. Algunes de les més destacades són:
- Java 10:
var
per inferència de tipus local. - Java 11: API HTTP Client, millores en la gestió de cadenes.
- Java 12: Millores en el Garbage Collector,
switch
expressions (preview). - Java 13: Blocs de text (preview).
- Java 14:
switch
expressions,records
(preview). - Java 15:
sealed
classes (preview). - Java 16:
records
,pattern matching
per a l'operadorinstanceof
. - Java 17:
sealed
classes, millores en el Garbage Collector.
Exemples Pràctics
var
en Java 10
switch
Expressions en Java 14
public class SwitchExample { public static void main(String[] args) { int day = 3; String dayName = switch (day) { case 1 -> "Monday"; case 2 -> "Tuesday"; case 3 -> "Wednesday"; case 4 -> "Thursday"; case 5 -> "Friday"; case 6 -> "Saturday"; case 7 -> "Sunday"; default -> "Invalid day"; }; System.out.println(dayName); } }
Exercici
- Utilitza
var
per declarar variables en un programa Java. - Implementa una expressió
switch
en un programa Java.
- Exercicis Pràctics
Exercici 1: Crear un Mòdul
- Crea un projecte modular amb un mòdul anomenat
com.example.module
. - Defineix una classe
ModuleExample
dins del mòdul que imprimeixi un missatge.
Exercici 2: Utilitzar takeWhile
i dropWhile
- Crea una llista de números i utilitza
takeWhile
per obtenir els números menors que 10. - Utilitza
dropWhile
per obtenir els números majors o iguals a 10.
Exercici 3: Interfície amb Mètode Privat
- Defineix una interfície amb un mètode privat i un mètode per defecte que cridi al mètode privat.
- Implementa la interfície en una classe i crida al mètode per defecte.
Exercici 4: JShell
- Inicia JShell i prova diferents fragments de codi, com declaracions de variables, expressions i crides a mètodes.
Exercici 5: API de Processos
- Utilitza l'API de processos per iniciar una aplicació del sistema operatiu i obtenir el seu ID de procés.
Conclusió
Java 9 va introduir moltes millores significatives que han continuat evolucionant en les versions posteriors. Comprendre aquestes novetats i saber com utilitzar-les és essencial per mantenir-se al dia amb les millors pràctiques de programació en Java. Els exercicis pràctics proporcionats t'ajudaran a consolidar els coneixements adquirits i a aplicar-los en projectes reals.
Curs de Programació en Java
Mòdul 1: Introducció a Java
- Introducció a Java
- Configuració de l'Entorn de Desenvolupament
- Sintaxi i Estructura Bàsica
- Variables i Tipus de Dades
- Operadors
Mòdul 2: Flux de Control
Mòdul 3: Programació Orientada a Objectes
- Introducció a la POO
- Classes i Objectes
- Mètodes
- Constructors
- Herència
- Polimorfisme
- Encapsulació
- Abstracció
Mòdul 4: Programació Orientada a Objectes Avançada
Mòdul 5: Estructures de Dades i Col·leccions
Mòdul 6: Gestió d'Excepcions
Mòdul 7: Entrada/Sortida de Fitxers
- Lectura de Fitxers
- Escriptura de Fitxers
- Fluxos de Fitxers
- BufferedReader i BufferedWriter
- Serialització
Mòdul 8: Multithreading i Concurrència
- Introducció al Multithreading
- Creació de Fils
- Cicle de Vida dels Fils
- Sincronització
- Utilitats de Concurrència
Mòdul 9: Xarxes
- Introducció a les Xarxes
- Sockets
- ServerSocket
- DatagramSocket i DatagramPacket
- URL i HttpURLConnection