← Índex del curs Exercicis

Unitat 3. Utils del JDK

Unitat Didàctica 3:

En aquesta unitat aprendràs:

Concepte fonamental d'objecte, classe i instanciació
Classes essencials de la biblioteca estàndard: String, Scanner, Random i Math
Format de dades amb String.format(), printf() i Text Blocks
Crides a mètodes d'instància i pas de paràmetres
Mètodes estàtics i ús de constants de classe
Gestió de paquets i la instrucció import

Fonaments d'Objectes i Classes

En Java, gairebé tot gira al voltant dels objectes. Un objecte representa una entitat del món real o un concepte del programa que conté:

Una classe és el motlle, plantilla o definició a partir de la qual es creen (instancien) els objectes concrets utilitzant l'operador new.

Treballant amb cadenes: La classe String

String és una classe fonamental de Java que representa cadenes de text. En ser un objecte, disposa d'un conjunt molt potent de mètodes:

void main() { String nom = " Maria Garcia "; println("Longitud: " + nom.length()); println("Sense espais: " + nom.trim()); println("En majúscules: " + nom.toUpperCase()); println("Conté 'Garcia'? " + nom.contains("Garcia")); println("Subcadena: " + nom.trim().substring(0, 5)); // Maria }

Lectura de dades per teclat: Scanner

Per a llegir dades que l'usuari introdueix per la consola podem utilitzar la classe Scanner del paquet java.util:

import java.util.Scanner; void main() { Scanner scanner = new Scanner(System.in); print("Com et dius? "); String nom = scanner.nextLine(); print("Quants anys tens? "); int edat = scanner.nextInt(); println("Hola " + nom + ", tens " + edat + " anys!"); }

Mètodes d'instància enfront de mètodes estàtics

Hi ha dos tipus essencials de mètodes en Java:

void main() { // Math és una classe d'utilitats amb mètodes estàtics: double arrel = Math.sqrt(144); double potència = Math.pow(2, 8); int maxim = Math.max(45, 80); println("Arrel de 144: " + arrel); // 12.0 println("2^8: " + potència); // 256.0 println("Màxim: " + maxim); // 80 }

Generació de valors aleatoris: Random

La classe java.util.Random permet generar números a l'atzar per a simulacions, jocs i proves:

import java.util.Random; void main() { Random random = new Random(); int dau = random.nextInt(1, 7); // Genera un enter entre 1 i 6 (inclusiu) println("Ha sortit el número de dau: " + dau); }

Taula de Mètodes Comuns: String i Scanner

Aquesta taula recull els mètodes més habituals que utilitzaràs constantment. Pots cercar per nom de mètode o ordenar per tipus de retorn:

Classe Mètode Tipus Retorn Descripció
Stringlength()intRetorna la longitud en caràcters
StringcharAt(int idx)charRetorna el caràcter a la posició indicada
Stringsubstring(int inici, int fi)StringExtreu un subtext del rang especificat
Stringcontains(CharSequence s)booleanComprova si conté una cadena de text
StringtoUpperCase()StringConverteix tot el text a majúscules
StringtoLowerCase()StringConverteix tot el text a minúscules
Stringequals(Object obj)booleanCompara el contingut exacte de dues cadenes
ScannernextInt()intLlegeix el següent nombre enter pel teclat
ScannernextDouble()doubleLlegeix el següent nombre decimal
ScannernextLine()StringLlegeix tota la línia de text fins al salt
ScannerhasNextInt()booleanVerifica si el següent valor introduït és enter
RandomnextInt(int límit)intGenera un enter aleatori entre 0 i límit - 1

🚀 Modo extra: Hay una API para (casi) todo

Hasta ahora has aprendido a programar. Pero Java tiene una biblioteca enorme que permite hacer muchísimas cosas sin tener que programarlas desde cero.

Aquí tienes pequeñas piezas de Lego: cada una hace una cosa sencilla. Prueba a cambiar sus parámetros, repetirlas, combinarlas con if, for, while o Random... ¿Qué serías capaz de construir?

💡 La idea: no necesitas aprenderte estas API. Descubre que existen y experimenta con ellas.

🪟 Ventanas

API Con Java puedo... Snippet Explicación
JOptionPane 💬 Mostrar un mensaje
JOptionPane.showMessageDialog(null, "¡Hola!");
Muestra ¡Hola! en una ventana.
JOptionPane ❓ Preguntar algo
JOptionPane.showInputDialog("¿Cómo te llamas?");
Muestra una ventana donde el usuario puede escribir una respuesta.
JOptionPane ⚠️ Mostrar una advertencia
JOptionPane.showMessageDialog(null, "¡Cuidado!");
Muestra un mensaje emergente.

🖱️ Controlar el ordenador

API Con Java puedo... Snippet Explicación
Robot 🖱️ Mover el ratón
new Robot().mouseMove(500, 300);
Mueve el ratón a la posición (500, 300).
Robot 🖱️ Hacer clic
new Robot().click();
Hace clic con el botón izquierdo del ratón.
Robot ⌨️ Escribir
new Robot().type("¡Hola!");
Escribe ¡Hola! utilizando el teclado.
Robot ⌨️ Pulsar una tecla
new Robot().type(KeyEvent.VK_ENTER);
Pulsa la tecla Enter.
Robot 🎨 Averiguar el color de la pantalla
IO.println(new Robot().getPixelColor(500, 300));
Indica el color del píxel situado en (500, 300).
Robot ⏱️ Mover el ratón lentamente
new Robot().mouseMove(500, 300);
Mueve el ratón a una posición determinada. Cambia las coordenadas y experimenta.

🚀 Lanzar programas

API Con Java puedo... Snippet Explicación
ProcessBuilder 🚀 Abrir un programa
new ProcessBuilder("calc").start();
Abre la calculadora de Windows.
ProcessBuilder 💻 Ejecutar un comando
new ProcessBuilder("cmd", "/c", "echo Hola").start();
Ejecuta un comando del sistema.
ProcessBuilder 🛑 Cerrar un programa
new ProcessBuilder("taskkill", "/IM", "notepad.exe", "/F").start();
Cierra el Bloc de notas en Windows.
Thread ⏱️ Hacer una pausa
Thread.sleep(1000);
Hace que el programa espere un segundo antes de continuar.

🌐 Interactuar con el ordenador

API Con Java puedo... Snippet Explicación
Desktop 🌐 Abrir una página web
Desktop.getDesktop().browse(URI.create("https://google.com"));
Abre Google en el navegador predeterminado.
Desktop 📄 Abrir un archivo
Desktop.getDesktop().open(new File("foto.jpg"));
Abre el archivo con la aplicación predeterminada.
Desktop 🖨️ Imprimir un documento
Desktop.getDesktop().print(new File("documento.pdf"));
Envía el documento a la aplicación de impresión predeterminada.
Toolkit 📋 Copiar texto
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection("Hola desde Java"), null);
Copia Hola desde Java en el portapapeles.

📁 Trabajar con archivos

API Con Java puedo... Snippet Explicación
Files 📝 Crear un archivo
Files.writeString(Path.of("hola.txt"), "¡Hola!");
Crea hola.txt y escribe ¡Hola!.
Files 📖 Leer un archivo
IO.println(Files.readString(Path.of("hola.txt")));
Lee y muestra el contenido completo de hola.txt.
Files 📋 Copiar un archivo
Files.copy(Path.of("foto.jpg"), Path.of("copia.jpg"));
Hace una copia de foto.jpg.
Files ✏️ Cambiar el nombre de un archivo
Files.move(Path.of("viejo.txt"), Path.of("nuevo.txt"));
Cambia el nombre de viejo.txt a nuevo.txt.
Files 🗑️ Borrar un archivo
Files.delete(Path.of("basura.txt"));
Borra basura.txt.

🎵 Hacer música

Java puede controlar un sintetizador MIDI. No necesitas ningún archivo de sonido: puedes generar las notas directamente desde el programa.

API Con Java puedo... Snippet Explicación
javax.sound.midi 🎵 Tocar una nota
canal.noteOn(60, 100);
Hace sonar la nota MIDI número 60.
javax.sound.midi 🔇 Dejar de tocar una nota
canal.noteOff(60);
Deja de sonar la nota MIDI número 60.
javax.sound.midi 🎹 Cambiar de instrumento
canal.programChange(80);
Cambia el instrumento utilizado por el sintetizador.
javax.sound.midi 🎵 Tocar una melodía
for (int n : new int[]{60, 62, 64, 65, 67, 69, 71, 72}) { canal.noteOn(n, 100); Thread.sleep(300); canal.noteOff(n); }
Toca una escala musical. Cambia las notas o la duración y crea tu propia melodía.

🎨 Dibujar

Con Graphics2D puedes construir dibujos a partir de piezas muy sencillas. Cambia las coordenadas, repite las instrucciones o combina los dibujos con bucles y números aleatorios.

API Con Java puedo... Snippet Explicación
Graphics2D 📏 Dibujar una línea
g.drawLine(10, 10, 200, 100);
Dibuja una línea entre dos puntos.
Graphics2D ⭕ Dibujar un círculo
g.drawOval(50, 50, 100, 100);
Dibuja una circunferencia o una elipse.
Graphics2D 🟥 Dibujar un rectángulo
g.fillRect(50, 50, 100, 100);
Dibuja un rectángulo relleno.
Graphics2D 🔤 Dibujar texto
g.drawString("¡Hola!", 50, 50);
Dibuja un texto en la superficie gráfica.

📸 Jugar con la pantalla

API Con Java puedo... Snippet Explicación
Robot 📸 Hacer una captura
Robot r = new Robot(); Rectangle pantalla = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()); BufferedImage imagen = r.createScreenCapture(pantalla);
Captura la pantalla y guarda la imagen en memoria.
Robot 🎨 Leer el color de un punto
IO.println(new Robot().getPixelColor(100, 100));
Permite saber qué color hay en una posición concreta de la pantalla.

🌐 Hacer que dos ordenadores hablen

Estas API permiten que dos programas que están en distintos ordenadores intercambien datos a través de una red.

API Con Java puedo... Snippet Explicación
Socket 🌐 Conectarme a otro ordenador
new Socket("192.168.1.50", 5000);
Intenta conectar con un programa que está esperando en ese ordenador y puerto.
Socket 📤 Enviar un mensaje
socket.getOutputStream().write("¡Hola!".getBytes());
Envía un mensaje al otro programa.
ServerSocket 📡 Esperar a otro ordenador
new ServerSocket(5000).accept();
Espera hasta que otro programa se conecte al puerto 5000.

🤯 Y ahora... combina las piezas

Lo interesante no es aprender estas instrucciones de memoria. Lo interesante empieza cuando las combinas con lo que ya sabes.

🤖 Abrir un programa y escribir dentro

new ProcessBuilder("notepad").start(); Thread.sleep(2000); new Robot().type("¡Esto lo ha escrito Java!");

Java abre el Bloc de notas, espera dos segundos y escribe en él. ¿Qué podrías hacer si cambias el texto, el tiempo y las acciones del robot?

🎵 Componer una canción

int[] notas = {60, 62, 64, 65, 67, 69, 71, 72}; for (int nota : notas) { canal.noteOn(nota, 100); Thread.sleep(300); canal.noteOff(nota); }

Cambia las notas. Cambia la duración. Repite algunas. Cambia el instrumento. Añade silencios. ¿Puedes hacer que Java toque una canción?

🖱️ Crear una automatización

Robot r = new Robot(); r.mouseMove(500, 300); Thread.sleep(500); r.click(); Thread.sleep(500); r.type("Hola");

Has construido una pequeña macro. Ahora puedes cambiar las coordenadas, las esperas y las acciones. ¿Puedes automatizar una tarea que haces habitualmente?

🧱 Piensa en piezas de Lego: una instrucción puede parecer poca cosa. Pero puedes repetirla, cambiar sus parámetros y combinarla con otras. Muchas cosas grandes empiezan con una pieza muy pequeña.

Format de dades: String.format(), printf() i Text Blocks

Java ofereix eines elegants per formatar taules, tiquets i missatges amb precisió numèrica:

void main() { String producte = "Portàtil"; double preu = 899.95; int quantitat = 2; // printf permet indicar amplada i decimals: %s (text), %d (enter), %.2f (decimal amb 2 posicions) System.out.printf("Producte: %-15s | Unitats: %2d | Preu: %8.2f€%n", producte, quantitat, preu); // String.format per generar una cadena sense imprimir-la directament String linia = String.format("Total: %.2f €", preu * quantitat); println(linia); // Text Blocks per a plantilles de text multilínia netes: String factura = """ =========== FACTURA SIMPLIFICADA =========== Article: %s Total: %.2f € ============================================ """.formatted(producte, preu * quantitat); println(factura); }

Exercicis Pràctics i Qüestionaris

Posa a prova el que has après completant els qüestionaris interactius auto-avaluables i els reptes de programació.

Exercicis