Salta al contenuto principale

01 - Fondamenti di Programmazione Java

Introduzione a Java: storia, filosofia WORA, differenza tra JVM/JRE/JDK, setup ambiente di sviluppo, struttura programma e convenzioni di naming.

Cosa ne pensi di questo articolo?

In Breve

Introduzione a Java: storia, filosofia WORA, differenza tra JVM/JRE/JDK, setup ambiente di sviluppo, struttura programma e convenzioni di naming.

Introduzione a Java

Java è uno dei linguaggi di programmazione più utilizzati al mondo, nato nel 1995 da Sun Microsystems (ora Oracle). La sua filosofia "Write Once, Run Anywhere" lo ha reso la scelta preferita per applicazioni enterprise, Android e sistemi distribuiti.

Cosa Imparerai

  • Storia e filosofia di Java
  • Differenza tra JVM, JRE e JDK
  • Configurazione dell'ambiente di sviluppo
  • Struttura di un programma Java
  • Convenzioni di naming

Storia di Java

Java nasce nel 1991 come progetto interno di Sun Microsystems chiamato "Oak", guidato da James Gosling. L'obiettivo era creare un linguaggio per dispositivi embedded, ma con l'esplosione del web, Java trovo la sua nicchia nelle applet e nelle applicazioni server-side.

Tappe Fondamentali

  • 1995: Prima release pubblica (Java 1.0)
  • 2004: Java 5 introduce generics, annotations, enum
  • 2014: Java 8 porta lambda expressions e Stream API
  • 2017: Oracle adotta release semestrali
  • 2021: Java 17 LTS (Long Term Support)
  • 2023: Java 21 LTS con virtual threads

JVM, JRE e JDK

Comprendere la differenza tra questi tre componenti è fondamentale per ogni sviluppatore Java.

JVM (Java Virtual Machine)

La JVM è il cuore dell'ecosistema Java. È una macchina virtuale che esegue il bytecode Java, rendendo i programmi indipendenti dalla piattaforma.

Processo di Compilazione
Codice Sorgente (.java)
        |
        v
    Compilatore (javac)
        |
        v
    Bytecode (.class)
        |
        v
    JVM (esecuzione)

JRE (Java Runtime Environment)

Il JRE include la JVM più le librerie standard necessarie per eseguire applicazioni Java. È sufficiente per gli utenti finali che devono solo eseguire programmi Java.

JDK (Java Development Kit)

Il JDK include il JRE più gli strumenti di sviluppo: compilatore (javac), debugger, documentazione e utility varie. È necessario per sviluppare applicazioni Java.

Relazione tra i Componenti
+------------------------------------------+
|                  JDK                     |
|  +------------------------------------+  |
|  |               JRE                  |  |
|  |  +------------------------------+  |  |
|  |  |            JVM               |  |  |
|  |  +------------------------------+  |  |
|  |  + Librerie Standard            |  |  |
|  +------------------------------------+  |
|  + Compilatore (javac)                   |
|  + Debugger                              |
|  + Tools (jar, javadoc, etc.)            |
+------------------------------------------+

Setup Ambiente di Sviluppo

1. Installazione JDK

Per sviluppare in Java, consiglio di installare una distribuzione LTS (Long Term Support) come Java 21.

Installazione su Ubuntu/Debian
# Aggiorna i repository
sudo apt update

# Installa OpenJDK 21
sudo apt install openjdk-21-jdk

# Verifica l'installazione
java --version
javac --version
Installazione su macOS (Homebrew)
# Installa OpenJDK 21
brew install openjdk@21

# Aggiungi al PATH
echo 'export PATH="/opt/homebrew/opt/openjdk@21/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc

# Verifica
java --version
Installazione su Windows
# Scarica da: https://adoptium.net/
# Oppure usa winget:
winget install EclipseAdoptium.Temurin.21.JDK

# Verifica (PowerShell)
java --version

2. Configurazione IDE

IntelliJ IDEA è l'IDE più utilizzato per lo sviluppo Java professionale. La versione Community è gratuita e sufficiente per questo corso.

IDE Consigliati

  • IntelliJ IDEA: Il più completo, ottimo per progetti enterprise
  • VS Code: Leggero, con estensioni Java (Extension Pack for Java)
  • Eclipse: Storico, ancora usato in ambito enterprise

Struttura di un Programma Java

Il Primo Programma

Ogni programma Java inizia con una classe che contiene il metodo main.

HelloWorld.java
/**
 * Il mio primo programma Java.
 * Questo è un commento Javadoc.
 */
public class HelloWorld {

    /**
     * Punto di ingresso dell'applicazione.
     * @param args argomenti da linea di comando
     */
    public static void main(String[] args) {
        // Questo è un commento su singola riga
        System.out.println("Ciao, Mondo!");

        /*
         * Questo è un commento
         * su più righe
         */
    }
}

Analisi della Struttura

Elementi Fondamentali
public class HelloWorld    // Dichiarazione della classe
{                          // La classe DEVE avere lo stesso nome del file

    public                 // Modificatore di accesso (visibile ovunque)
    static                 // Metodo di classe (non richiede istanza)
    void                   // Tipo di ritorno (nessun valore)
    main                   // Nome del metodo (entry point)
    (String[] args)        // Parametri (array di stringhe)

    System.out.println()   // Stampa su console con newline
}

Compilazione ed Esecuzione

Da Terminale
# Compila il file sorgente
javac HelloWorld.java

# Viene generato HelloWorld.class (bytecode)

# Esegui il programma
java HelloWorld

# Output: Ciao, Mondo!

Convenzioni di Naming

Java ha convenzioni di naming ben definite che rendono il codice leggibile e professionale.

Convenzioni Standard
// CLASSI: PascalCase (maiuscola iniziale ogni parola)
public class StudenteUniversitario { }
public class GestoreOrdini { }

// METODI e VARIABILI: camelCase (minuscola iniziale)
public void calcolaMedia() { }
private String nomeCompleto;
int conteggioStudenti;

// COSTANTI: UPPER_SNAKE_CASE
public static final int MAX_STUDENTI = 30;
public static final String CODICE_SCUOLA = "SC001";

// PACKAGE: tutto minuscolo, dominio invertito
package com.scuola.gestione.studenti;
package it.istituto.registro.voti;

Best Practices per i Nomi

Regole da Seguire

  • Descrittivi: calcolaMediaVoti() invece di calc()
  • Evita abbreviazioni: studente invece di std
  • Verbi per metodi: getVoto(), setNome(), isPromosso()
  • Sostantivi per classi: Studente, Corso, Voto
  • Plurale per collezioni: List<Studente> studenti

Tipi di Commenti

Commenti in Java
// 1. Commento su singola riga
int voto = 8; // Voto dello studente

// 2. Commento su più righe
/*
 * Questo blocco di codice calcola
 * la media dei voti di uno studente
 * considerando tutti i trimestri.
 */

// 3. Commento Javadoc (per documentazione)
/**
 * Calcola la media aritmetica dei voti.
 *
 * @param voti array dei voti da mediare
 * @return la media calcolata
 * @throws IllegalArgumentException se l'array è vuoto
 */
public double calcolaMedia(int[] voti) {
    // implementazione
}

Esempio Completo: Registro Scolastico

RegistroScolastico.java
package it.scuola.registro;

/**
 * Classe principale del Registro Scolastico.
 * Dimostra la struttura base di un programma Java.
 *
 * @author Federico Calo
 * @version 1.0
 */
public class RegistroScolastico {

    // Costanti della classe
    public static final String NOME_SCUOLA = "Liceo Scientifico Einstein";
    public static final int ANNO_SCOLASTICO = 2025;

    /**
     * Punto di ingresso dell'applicazione.
     *
     * @param args argomenti da linea di comando (non utilizzati)
     */
    public static void main(String[] args) {
        // Stampa intestazione
        System.out.println("================================");
        System.out.println("  " + NOME_SCUOLA);
        System.out.println("  Anno Scolastico: " + ANNO_SCOLASTICO);
        System.out.println("================================");

        // Dati di esempio
        String nomeStudente = "Mario Rossi";
        String classe = "3A";
        int[] votiMatematica = {7, 8, 6, 9, 8};

        // Calcolo media
        double media = calcolaMedia(votiMatematica);

        // Stampa risultato
        System.out.println("\nStudente: " + nomeStudente);
        System.out.println("Classe: " + classe);
        System.out.println("Media Matematica: " + media);
        System.out.println("Esito: " + (media >= 6 ? "Promosso" : "Rimandato"));
    }

    /**
     * Calcola la media aritmetica di un array di voti.
     *
     * @param voti array contenente i voti
     * @return la media aritmetica dei voti
     */
    public static double calcolaMedia(int[] voti) {
        if (voti == null || voti.length == 0) {
            return 0.0;
        }

        int somma = 0;
        for (int voto : voti) {
            somma += voto;
        }

        return (double) somma / voti.length;
    }
}
Output del Programma
================================
  Liceo Scientifico Einstein
  Anno Scolastico: 2025
================================

Studente: Mario Rossi
Classe: 3A
Media Matematica: 7.6
Esito: Promosso

Conclusione

In questo primo articolo abbiamo visto le basi di Java: la sua storia, l'architettura JVM/JRE/JDK, come configurare l'ambiente di sviluppo e la struttura di un programma Java.

Nel prossimo articolo approfondiremo i tipi di dato primitivi e il controllo del flusso: variabili, operatori, condizioni e cicli.

Punti Chiave da Ricordare

  • JDK: Necessario per sviluppare (include compilatore)
  • JRE: Necessario per eseguire (include JVM + librerie)
  • JVM: Esegue il bytecode, garantisce portabilita
  • main: Punto di ingresso di ogni applicazione Java
  • Naming: PascalCase per classi, camelCase per metodi/variabili
  • Javadoc: Documenta il codice in modo professionale

Domande frequenti

Qual è la filosofia di base che ha reso Java così popolare?

La filosofia "Write Once, Run Anywhere" permette di scrivere il codice una volta e eseguirlo su diverse piattaforme.

Perché Java non è stato originariamente progettato per le applicazioni web?

L'obiettivo iniziale era creare un linguaggio per dispositivi embedded, ma l'esplosione del web ha reso la programmazione web una delle nicchie principali di Java.

Qual è il ruolo della JVM (Java Virtual Machine) nell'ecosistema Java?

La JVM è la macchina virtuale che esegue il bytecode Java, rendendo i programmi indipendenti dalla piattaforma.

Quali sono le differenze principali tra JDK e JRE?

Il JDK include il JRE più gli strumenti di sviluppo necessari per creare applicazioni Java, mentre il JRE è sufficiente per eseguire programmi Java.

Fonti e approfondimenti

Prova Questi Strumenti

Strumenti gratuiti correlati a questo argomento.

Commenti

Caricamento commenti...

Accedi per commentare

Discuti questo articolo nella community

Unisciti al gruppo Telegram per discutere con altri sviluppatori, fare domande e condividere le tue esperienze.

Ti è piaciuto questo articolo?

Esplora altri contenuti sul blog o scopri i miei progetti