In informatica Java è un linguaggio di programmazione ad alto livello, orientato agli oggetti e a tipizzazione statica, che si appoggia sull'omonima piattaforma software di esecuzione, specificamente progettato per essere il più possibile indipendente dalla piattaforma hardware di esecuzione (tramite compilazione in bytecode prima e interpretazione poi da parte di una JVM) (sebbene questa caratteristica comporti prestazioni in termini di computazione inferiori a quelle di linguaggi direttamente compilati come C e C++ ovvero dunque perfettamente adattati alla piattaforma hardware).

Storia

Java è stato creato a partire da ricerche effettuate all'Università di Stanford agli inizi degli anni novanta. Nel 1992 nasce il linguaggio Oak (in italiano 'quercia'), prodotto da Sun Microsystems e realizzato da un gruppo di esperti sviluppatori capitanati da James Gosling. Questo nome fu successivamente cambiato in Java (una varietà di caffè indonesiana; il logo adottato è una tazzina per tale bevanda) per problemi di copyright: il linguaggio di programmazione Oak esisteva già.

Per facilitare il passaggio a Java ai programmatori old-fashioned, legati in particolare a linguaggi come il C++, la sintassi di base (strutture di controllo, operatori ecc.) è stata mantenuta pressoché identica a quella del C++Come indicato in ; tuttavia a livello di linguaggio non sono state conservate delle caratteristiche del C++ ritenute fonte di complessità non necessaria e che favorivano l'introduzione di determinati bug durante la programmazione, come l'aritmetica dei puntatori e l'ereditarietà multipla delle classi. Per le caratteristiche orientate agli oggetti del linguaggio ci si è ispirati al C++ e soprattutto all'Objective C.

In un primo momento Sun decise di destinare questo nuovo prodotto alla creazione di applicazioni complesse per piccoli dispositivi elettronici; fu solo nel 1993 con l'esplosione di internet che Java iniziò a farsi notare come strumento per iniziare a programmare per internet. Contemporaneamente Netscape Corporation annunciò la scelta di dotare il suo allora omonimo e celeberrimo browser della Java Virtual Machine (JVM). Questo segna una rivoluzione nel mondo di Internet: grazie agli applet le pagine web diventarono interattive a livello client, ovvero le applicazioni vengono eseguite direttamente sulla macchina dell'utente di internet e non su un server remoto. Per esempio gli utenti poterono utilizzare giochi direttamente sulle pagine web e usufruire di chat dinamiche e interattive.

Java fu annunciato ufficialmente il 23 maggio 1995 a SunWorld. Il 13 novembre 2006 la Sun Microsystems ha distribuito la sua implementazione del compilatore Java e della macchina virtuale sotto licenza GPL. Non tutte le piattaforme Java sono libere. L'ambiente Java libero si chiama IcedTea."Q: What components of the JDK software are you open sourcing today? A: We're open sourcing the Java programming language compiler ("javac"), and the Java HotSpot virtual machine."; the source is being released via the project. L'8 maggio 2007 Sun ha pubblicato anche le librerie, tranne alcuni componenti non di sua proprietà, sotto licenza GPL, rendendo Java un linguaggio di programmazione la cui implementazione di riferimento è libera. Il linguaggio è definito da un documento chiamato The Java Language Specification, spesso abbreviato JLS. La prima edizione del documento è stata pubblicata nel 1996. Da allora il linguaggio ha subito numerose modifiche e integrazioni, aggiunte di volta in volta nelle edizioni successive. Il 17 settembre 2024 è stata rilasciata l'ultima versione, la Java SE 23. Nome Sembra che il nome 'Oak' derivasse dal fatto che Gosling e i suoi colleghi, nel periodo in cui svilupparono il linguaggio, avessero avuto come unica compagnia quella di una quercia che si trovava proprio fuori dalla finestra dell'ufficio in cui lavoravano. Eliminato il nome 'Oak', gli ideatori del linguaggio si ispirarono al caffè presso il quale discutevano del progetto, (Java è una qualità di caffè dell'omonima isola dell'Indonesia), tanto che il magic number che identifica un di bytecode ottenuto dalla compilazione di un file Java è 0xCAFEBABE, che in inglese significa ragazza (babe) del caffè (cafe). Una leggenda metropolitana – mai confermata – aggiunge che tale nome è stato anche favorito, in un secondo momento e dagli stessi creatori, come acronimo per "Just Another Vacuum Acronym" ("Soltanto un altro vuoto Acronimo"), con riferimento ironico all'altissimo numero di abbreviazioni utilizzate in ambiente informatico.

Descrizione

Principi Java venne creato per cinque obiettivi primari: essere "semplice, orientato agli oggetti e familiare"; essere "robusto e sicuro"; essere indipendente dalla piattaforma; contenere strumenti e librerie per il networking; essere progettato per eseguire codice da sorgenti remote in modo sicuro.

Linguaggio

Uno dei principi fondamentali del linguaggio è espresso dal motto WORA (write once, run anywhere, ossia "scrivi una volta, esegui ovunque"): il codice compilato che viene eseguito su una piattaforma non deve essere ricompilato per essere eseguito su una piattaforma diversa; infatti il prodotto della compilazione è in un formato chiamato bytecode che può essere eseguito da una qualunque implementazione di un processore virtuale detto Java Virtual Machine; al 2014 Java risulta essere uno dei linguaggi di programmazione più usati al mondo, specialmente per applicazioni client-server, con un numero di sviluppatori stimato intorno ai 9 milioni.; un buon punto di partenza per imparare Java è il tutorial ufficiale.

Hello, world! Segue il codice sorgente di un semplice programma che stampa il testo "Hello world" sulla console. class HelloWorld { public static void main(String[] args) { System.out.println("Hello World");

Un programma minimale in Java deve obbligatoriamente contenere la definizione di classe tramite la parola chiave class seguita dal nome_classe e il metodo main o metodo principale nonché entry point del programma in cui vengono definite variabili, oggetti e richiamati metodi statici su variabili e/o dinamici sugli oggetti.

Nell'esempio soprastante il main contiene l'istruzione per la stampa a video della stringa Hello World; pur essendo perfettamente funzionante e semplice da comprendere, non viene sfruttata la filosofia a oggetti che viene normalmente applicata a ogni programma scritto in Java. Segue il codice sorgente di un programma che svolge lo stesso compito del precedente usando la programmazione orientata agli oggetti. public class Messaggio { private String toPrint;

public Messaggio(String print) { this.toPrint = print;

public void print() { System.out.println(this.toPrint);

public static void main(String args[]) { Messaggio ciaoMondo = new Messaggio("Hello World!"); ciaoMondo.print();

Il metodo main affida la stampa del messaggio a un oggetto creato apposta per questo compito, su cui è invocato il metodo dinamico print definito prima del main assieme al costruttore della classe ovvero quel particolare metodo (con ugual nome della classe) che serve per inizializzare l'attributo della classe toPrint dell'oggetto creato/istanziato nel main. I metodi definibili possono essere dichiarati privati (contrassegnati dalla parola chiave private) se richiamabili solo all'interno della stessa classe oppure pubblici (contrassegnati dalla parola chiave public) se richiamabili anche da altre classi, di tipo statico (contrassegnati dalla parola chiave static) se invocabili liberamente all'interno della classe (ad es. su variabili globali), dinamici se invocabili su oggetti.

Scrivendo nuove classi che supportano l'operazione print, si può adattare il programma per mostrare messaggi di tipi radicalmente diversi, lasciando il main pressoché immutato, cambiando soltanto la metà riga che segue il new. Per esempio si può considerare un messaggio la scritta in una finestra che appare sullo schermo del computer in uso, oppure una stringa inviata su connessione di rete per apparire sulla finestra di un computer client. Oppure il programma può dialogare con l'utente sulla riga di comando o in una finestra (considerando il dialogo come un "messaggio interattivo").

Si può modificare radicalmente il comportamento del programma con modifiche circoscritte e in punti predisposti a priori (polimorfismo): il programma può resistere ad aggiornamenti ed esigenze non previste. Segue il codice sorgente di due programmi che mostrano lo stesso testo all'interno di una finestra. Il primo crea una finestra standard dove viene scritta la stringa inserita come parametro mentre il secondo programma crea una finestra rispettando i parametri (ad esempio la grandezza della finestra) inseriti nel codice. import javax.swing.JOptionPane; public class HelloWorld { public static void main( String[] args) { JOptionPane.showMessageDialog(null, "Hello World!");

//HelloWorld.java package helloworld;

import javafx.application.Application; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.layout.StackPane; import javafx.stage.Stage;

public class HelloWorld extends Application { @Override public void start(Stage primaryStage) { Button btn = new Button(); btn.setText("Say 'Hello World'"); btn.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { System.out.println("Hello World!");

});

StackPane root = new StackPane(); root.getChildren().add(btn);

Scene scene = new Scene(root, 300, 250);

primaryStage.setTitle("Hello World!"); primaryStage.setScene(scene); primaryStage.show();

public static void main(String[] args) { launch(args);

Il codice proposto crea degli oggetti utilizzati per gestire l'interfaccia grafica. Viene inizialmente creata una finestra il cui titolo è Hello World!; all'interno di questa finestra viene inserita un'etichetta che contiene al centro la scritta Hello World!. Infine viene stabilita la dimensione della finestra che, finalmente, viene resa visibile assieme all'etichetta che porta la scritta da visualizzare. Anche in questo codice si fa uso della programmazione a oggetti, ma in un modo diverso: il main non conosce i meccanismi necessari per creare una interfaccia grafica sullo schermo e questi sono decisi dalle classi JFrame e JLabel che sono state predisposte a priori (incapsulamento).

Type system

Java è un linguaggio type safe, a tipizzazione statica, con un nominative type system, e dotato di manifest typing. In virtù di queste caratteristiche, viene generalmente considerato un linguaggio a tipizzazione forte. Il linguaggio distingue chiaramente i tipi primitivi che definiscono valori atomici dai tipi strutturati che definiscono strutture dati composte.I tipi primitivi sono detti anche tipi atomici e tipi base e sono definiti nelle specifiche di linguaggio: di ognuno sono noti l'insieme esatto dei valori ammessi e gli operatori supportati.

I tipi strutturati sono anche tipi riferimento, cioè definiscono oggetti, e sono classi o interfacce. Tra queste, le classi degli array sono definite nelle specifiche di linguaggio; tutti gli altri tipi strutturati sono "definiti dall'utente" (user-defined), cioè dal programmatore. I tipi definiti dall'utente che sono legati al linguaggio per qualche motivo sono riuniti nel package java.lang e nei suoi sottopackage; il linguaggio stabilisce per alcuni di essi (Object, String, Iterable, e altri) delle regole sintattiche o semantiche aggiuntive.

I tipi riferimento includono le classi per la gestione delle stringhe, gli array e le collezioni (liste, mappe, ecc.).

Tipi base