4  El primer programa en Java

Objectius

  • Conèixer què és Java.
  • Escriure, compilar i executar el primer programa en Java.
  • Entendre l’estructura mínima d’un programa (classe i mètode main).
  • Mostrar informació per pantalla amb System.out.
  • Llegir dades de l’usuari amb Scanner.
  • Escriure comentaris i traduir pseudocodi senzill a Java.
NotaAbans de començar: instal·la l’entorn

Per executar aquests programes necessites tenir instal·lat el JDK i un editor. Tot el procés està explicat als annexos.

4.1 Què és Java?

Java és un llenguatge de programació creat als anys 90 i encara avui un dels més usats del món, sobretot en aplicacions empresarials, Android i sistemes grans. Nosaltres farem servir la versió Java 25, tot i que pel contingut del curs, amb versions més antigues també seria suficient.

La gran idea de Java és “escriu una vegada, executa a tot arreu”. Un mateix programa funciona a Windows, Linux, macOS, dispositius electrònics,… sense canvis. Per aconseguir-ho, cal compilar el codi i executar-lo en una màquina virtual de Java JVM.

De codi font a execució

L’ordinador no entén Java directament. El teu codi passa per un procés abans d’executar-se:

flowchart LR
    A["Codi font<br/>Hola.java"] -->|"compilador<br/>javac"| B["Bytecode<br/>Hola.class"]
    B -->|"màquina virtual<br/>java (JVM)"| C["Programa<br/>en execució"]

  • Codi font. El text que escrius tu, en fitxers amb extensió .java. El codi.
  • Compilació. El compilador (javac) tradueix el codi font a bytecode, un format intermedi, i genera un fitxer .class.
  • Execució. La màquina virtual de Java (JVM) llegeix el bytecode i l’executa. La JVM és el que hi ha de diferent a cada sistema operatiu; per això el teu programa és el mateix a tot arreu.

4.2 El primer programa: Hola món

Per tradició, el primer programa de qualsevol llenguatge mostra el text “Hola, món!”. Crea un fitxer anomenat HolaMon.java amb aquest contingut:

public class HolaMon {
    public static void main(String[] args) {
        System.out.println("Hola, món!");
    }
}

Sembla que hi ha moltes coses per a una sola línia útil. Tranquil·litat: ara ho desglossarem tot.

De moment, fixa’t que la línia que fa la feina és System.out.println("Hola, món!");.

Compilar i executar des del terminal

Si fas servir un IDE, n’hi ha prou amb prémer el botó d’executar. Però és important que entenguis què passa per sota. Des d’un terminal, situats al directori on hi ha el fitxer anterior, executem:

    javac HolaMon.java   
    java HolaMon           

La primera comanda, compila el codi i genera el fitxer HolaMon.class i la segona ho executa. La sortida serà:

    Hola, món!
ConsellEl nom del fitxer importa

El fitxer s’ha de dir exactament igual que la classe pública, respectant majúscules i minúscules, i acabar en .java. La classe HolaMon ha d’estar al fitxer HolaMon.java.

Si no coincideixen, el compilador es queixarà.

4.3 Estructura d’un programa Java

Aquest és l’esquelet mínim de tot programa Java:

    public class NomDelPrograma {                   // (1) la classe
        public static void main(String[] args) {    // (2) el mètode main
            ...                                     // (3) aquí van les instruccions
        }
    }
  1. La classe. De moment pensa-ho com un contenidor que embolcalla tot el programa. Tot el codi de Java viu dins d’una classe. El nom l’escrivim en PascalCase, la primera lletra de cada paraula en majúscula: HolaMon, CalculadoraIva.

  2. **El mètode main. És el punt d’entrada: quan s’executa un programa, Java busca aquest mètode i comença per la seva primera línia. Aquesta línia és sempre igual; ara mateix la copies tal qual. Més endavant en veurem l’explicació.

  3. Les instruccions. Dins del mètode principal, entre les claus { }, van les ordres que s’executen una rere l’altra, de dalt a baix.

flowchart TD
    A["Classe HolaMon"] --> B["Mètode main"]
    B --> C["Instrucció 1"]
    C --> D["Instrucció 2"]
    D --> E["..."]

Regles de sintaxi

Java és estricte en la forma. Aquestes normes són obligatòries:

Regla Exemple
Cada instrucció acaba amb punt i coma ; System.out.println("Hola");
Els blocs van entre claus { } main(...) { ... }
Distingeix majúscules i minúscules Main no és main
Indentació de 4 espais per llegibilitat (dins de cada bloc)
AlertaError típic: oblidar el punt i coma

Un dels principals errors al principi és oblidar-se el ; al final d’una instrucció.

4.4 Comentaris

Els comentaris són text que escrius per a les persones, no per a l’ordinador. El compilador els ignora completament. Serveixen per explicar què fa el codi.

Java té tres formes de comentari:

// Comentari d'una línia: des de les dues barres fins al final de la línia.

/* Comentari de bloc:
   pot ocupar
   diverses línies. */

/**
 * Comentari de documentació (Javadoc).
 * Serveix per documentar classes i mètodes. El veurem més endavant.
 */

Per ara, utilitzarem les dues primeres.

4.5 Mostrar informació: System.out

Per escriure per pantalla, Java ens dona System.out. Té dos mètodes principals:

Instrucció Què fa
System.out.println(...) Escriu i salta de línia al final
System.out.print(...) Escriu sense saltar de línia


Exemple:

public class Sortida {
    public static void main(String[] args) {
        System.out.print("Hola, ");
        System.out.print("món");
        System.out.println("!");      // aquí sí que salta de línia
        System.out.println("Nova línia");
    }
}

Genera aquesta sortida per pantalla:

    Hola, món!
    Nova línia

Combinar text i valors amb +

Amb l’operador + pots concatenar (enganxar) textos i valors dins d’un println:

public class Salutacio {
    public static void main(String[] args) {
        String nom = "Marta";
        int edat = 19;
        System.out.println("Hola, " + nom + ". Tens " + edat + " anys.");
    }
}

Sortida:

    Hola, Marta. Tens 19 anys.

Mini-repte

Escriu un programa que mostri, en tres línies diferents, el teu nom, la teva edat i la teva ciutat. Fes servir tres crides a System.out.println.

4.6 Llegir dades de l’usuari: Scanner

Per llegir dades introduïdes per l’usuari des del teclat, fem servir la classe Scanner.

Els passos a seguir són:

  1. Importar la classe Scanner al principi del fitxer.
  2. Crear un objecte de tipus Scanner connectat al teclat (System.in):
  3. Llegir el valor amb els mètodes que ens ofereix la classe.
  4. Tancar l’objecte creat per alliberar recursos.
Mètode Llegeix
nextLine() Una línia sencera de text (String)
nextInt() Un número enter (int)
nextDouble() Un número amb decimals (double)


Exemple de programa que demana el nom i l’edat i saluda l’usuari:

import java.util.Scanner;

public class Salutacio {
    public static void main(String[] args) {
        Scanner lector = new Scanner(System.in);

        System.out.print("Com et dius? ");
        String nom = lector.nextLine();

        System.out.print("Quants anys tens? ");
        int edat = lector.nextInt();

        System.out.println("Hola, " + nom + "! L'any que ve en faràs " + (edat + 1) + ".");

        lector.close();   // tanquem el Scanner quan ja no el necessitem
    }
}
AlertaError típic: barrejar nextInt() i nextLine()

Quan llegeixes un número amb nextInt() i tot seguit un text amb nextLine(), el segon sovint “s’empassa” una línia buida i sembla que no funciona.

És un descuit molt comú de principiant. De moment, si et passa, canvia l’ordre de les lectures o afegeix un nextLine() extra per netejar.

4.7 De pseudocodi a Java

A continuació, tenim un exemple per passar un pseudocodi a llenguatge Java.

Pseudocodi:

    Algorisme MitjanaTresNotes
        Llegir nota1, nota2, nota3
        mitjana ← (nota1 + nota2 + nota3) / 3
        Escriure "La mitjana és:", mitjana
    FiAlgorisme

Java:

import java.util.Scanner;

public class MitjanaTresNotes {
    public static void main(String[] args) {
        Scanner lector = new Scanner(System.in);

        System.out.print("Nota 1: ");
        double nota1 = lector.nextDouble();
        System.out.print("Nota 2: ");
        double nota2 = lector.nextDouble();
        System.out.print("Nota 3: ");
        double nota3 = lector.nextDouble();

        double mitjana = (nota1 + nota2 + nota3) / 3;
        System.out.println("La mitjana és: " + mitjana);

        lector.close();
    }
}

Observa el paral·lelisme: Llegir es converteix en Scanner, es converteix en =, i Escriure es converteix en System.out.println. La lògica és exactament la mateixa que ja havies dissenyat. Programar en Java és, en bona part, traduir algorismes que ja saps pensar.

ConsellEl pseudocodi continua sent útil

Encara que ara sàpigues Java, no abandonis el pseudocodi. Per a un problema nou, pensa primer l’algorisme en pseudocodi o en un diagrama de flux, i després tradueix-lo. Et concentres en la lògica sense encallar-te amb la sintaxi.

Mini-repte

Tradueix a Java aquest algorisme: demana un preu sense IVA, calcula el preu amb un 21% d’IVA i mostra’l. Pista: double preuFinal = preu * 1.21;.

4.8 Resum

  • Java és un llenguatge compilat a bytecode, que la JVM executa a qualsevol sistema operatiu: “escriu una vegada, executa a tot arreu”.
  • El codi passa de .java (font) a .class (bytecode) amb javac, i s’executa amb java.
  • Tot programa viu dins d’una classe i comença pel mètode main. Cada instrucció acaba amb ; i els blocs van entre { }.
  • Els comentaris (//, /* */, /** */) són per a les persones; el compilador els ignora.
  • System.out.println i System.out.print escriuen per pantalla; + concatena text i valors.
  • Scanner llegeix dades del teclat: importar, crear l’objecte i cridar nextLine(), nextInt() o nextDouble().
  • Traduir de pseudocodi a Java és directe: passa a =, Llegir a Scanner, Escriure a System.out.println.