Movatterモバイル変換


[0]ホーム

URL:


Vai al contenuto
WikipediaL'enciclopedia libera
Ricerca

Java (linguaggio di programmazione)

Da Wikipedia, l'enciclopedia libera.
Java
linguaggio di programmazione
Logo del linguaggio
AutoreJames Gosling(designer),Sun Microsystems(programmatore)
Data di origine23 maggio 1995; 30 anni fa
Ultima versioneJava SE 25 (16 settembre 2025)
UtilizzoGeneral purpose
ParadigmiMulti-paradigma: generico,orientato agli oggetti (basato sulle classi),funzionale,imperativo,riflettivo, calcolo simultaneo
TipizzazioneForte
Specifiche di linguaggioThe Java Language Specification, Java SE 17 (PDF).
Estensioni comuni.java, .class,.jar, .jmod
Influenzato daSimula,Ada 83,C++,Eiffel,Generic Java,Mesa,Modula-3,Oberon,Objective-C,UCSD Pascal,Smalltalk
Ha influenzatoAda 2005,BeanShell,C#,Clojure,D,ECMAScript,Groovy,J#,JavaScript,Kotlin,PHP,Python,Scala,Seed7,Vala
Implementazione di riferimento
Implementazioneinterprete con JITter
Sistema operativoWindows,Linux,macOS
LicenzaGNU General Public License,Java Community Process
Sito weboracle.com/java/.
java.com.
Modifica dati su Wikidata ·Manuale

IninformaticaJava è unlinguaggio di programmazione ad alto livello,orientato agli oggetti e atipizzazione statica, che si appoggia sull'omonima piattaforma software diesecuzione, specificamente progettato per essere il più possibile indipendente dallapiattaformahardware diesecuzione (tramitecompilazione inbytecode prima einterpretazione poi da parte di unaJVM) (sebbene questa caratteristica comporti prestazioni in termini di computazione inferiori a quelle di linguaggi direttamente compilati comeC eC++ ovvero dunque perfettamente adattati alla piattaforma hardware).

Storia

[modifica |modifica wikitesto]
James Gosling, autore di Java

Java è stato creato a partire da ricerche effettuate allaStanford University agli inizi deglianni novanta. Nel1992 nasce il linguaggio Oak (in italiano 'quercia'), prodotto daSun Microsystems e realizzato da un gruppo di esperti sviluppatori capitanati daJames Gosling.[1] Questo nome fu successivamente cambiato in Java (una varietà dicaffè indonesiana; il logo adottato è una tazzina per tale bevanda) per problemi dicopyright: il linguaggio di programmazione Oak esisteva già.[2]

Per facilitare il passaggio a Java ai programmatoriold-fashioned, legati in particolare a linguaggi come ilC++, lasintassi di base (strutture di controllo,operatori ecc.) è stata mantenuta pressoché identica a quella del C++[3][4]; 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.[5] Per le caratteristiche orientate agli oggetti del linguaggio ci si è ispirati alC++ e soprattutto all'Objective C.[6]

In un primo momento Sun decise di destinare questo nuovo prodotto alla creazione di applicazioni complesse per piccoli dispositivi elettronici; fu solo nel1993 con l'esplosione diinternet 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 celeberrimobrowser dellaJava Virtual Machine (JVM). Questo segna una rivoluzione nel mondo di Internet: grazie agliapplet 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 maggio1995 a SunWorld. Il 13 novembre2006 la Sun Microsystems ha distribuito la sua implementazione del compilatore Java e della macchina virtuale sotto licenzaGPL. Non tutte le piattaforme Java sono libere. L'ambiente Java libero si chiama IcedTea.[7] L'8 maggio2007 Sun ha pubblicato anche le librerie, tranne alcuni componenti non di sua proprietà, sotto licenza GPL, rendendo Java un linguaggio di programmazione la cuiimplementazione di riferimento è libera.[8] Il linguaggio è definito da un documento chiamatoThe Java Language Specification, spesso abbreviatoJLS. La prima edizione del documento è stata pubblicata nel 1996.[9] 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, laJava SE 23.[9]

Nome

[modifica |modifica wikitesto]

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 ilmagic number che identifica unfile dibytecode ottenuto dallacompilazione di un file Java è0xCAFEBABE, che ininglese significa ragazza (babe) del caffè (cafe)[10].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

[modifica |modifica wikitesto]

Principi

[modifica |modifica wikitesto]

Java venne creato per cinque obiettivi primari:[11]

  1. essere "semplice,orientato agli oggetti e familiare";
  2. essere "robusto e sicuro";
  3. essereindipendente dalla piattaforma;
  4. contenere strumenti elibrerie per ilnetworking;
  5. essere progettato per eseguire codice da sorgenti remote in modo sicuro.

Linguaggio

[modifica |modifica wikitesto]
Lo stesso argomento in dettaglio:Sintassi Java.
Esempio dicodice sorgente Java

Uno dei principi fondamentali del linguaggio è espresso dal mottoWORA (write once, run anywhere, ossia "scrivi una volta, esegui ovunque"): il codicecompilato 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 chiamatobytecode che può essere eseguito da una qualunque implementazione di un processore virtuale dettoJava Virtual Machine; al 2014 Java risulta essere uno dei linguaggi di programmazione più usati al mondo, specialmente per applicazioniclient-server, con un numero di sviluppatori stimato intorno ai 9 milioni.[12][13]; un buon punto di partenza per imparare Java è il tutorial ufficiale[14].

Hello, world!

[modifica |modifica wikitesto]

Segue ilcodice sorgente di un semplice programma che stampa il testo "Hello world" sullaconsole.

classHelloWorld{publicstaticvoidmain(String[]args){System.out.println("Hello World");}}

Un programma minimale in Java deve obbligatoriamente contenere la definizione diclasse tramite la parola chiaveclass seguita dalnome_classe e ilmetodomain o metodo principale nonchéentry point del programma in cui vengono definitevariabili, oggetti e richiamati metodi statici su variabili e/o dinamici sugli oggetti.

Nell'esempio soprastante ilmain contiene l'istruzione per la stampa a video della stringaHello World; pur essendo perfettamente funzionante e semplice da comprendere, non viene sfruttata la filosofia ad oggetti che viene normalmente applicata ad ogni programma scritto in Java. Segue il codice sorgente di un programma che svolge lo stesso compito del precedente usando laprogrammazione orientata agli oggetti.

publicclassMessaggio{privateStringtoPrint;publicMessaggio(Stringprint){this.toPrint=print;}publicvoidprint(){System.out.println(this.toPrint);}publicstaticvoidmain(Stringargs[]){MessaggiociaoMondo=newMessaggio("Hello World!");ciaoMondo.print();}}

Il metodomain affida la stampa del messaggio a un oggetto creato apposta per questo compito, su cui è invocato il metodo dinamicoprint definito prima del main assieme alcostruttore della classe ovvero quel particolare metodo (con ugual nome della classe) che serve per inizializzare l'attributo della classetoPrint dell'oggetto creato/istanziato nel main. I metodi definibili possono essere dichiaratiprivati (contrassegnati dalla parola chiaveprivate) se richiamabili solo all'interno della stessa classe oppurepubblici (contrassegnati dalla parola chiavepublic) se richiamabili anche da altre classi, di tipostatico (contrassegnati dalla parola chiavestatic) se invocabili liberamente all'interno della classe (ad es. su variabili globali),dinamici se invocabili su oggetti.

Scrivendo nuove classi che supportano l'operazioneprint, si può adattare il programma per mostrare messaggi di tipi radicalmente diversi, lasciando ilmain pressoché immutato, cambiando soltanto la metà riga che segue ilnew. Per esempio si può considerare un messaggio la scritta in unafinestra che appare sullo schermo del computer in uso, oppure una stringa inviata su connessione di rete per apparire sulla finestra di un computerclient. Oppure il programma può dialogare con l'utente sullariga 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 ilcodice sorgente di due programmi che mostrano lo stesso testo all'interno di unafinestra. 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.

importjavax.swing.JOptionPane;publicclassHelloWorld{publicstaticvoidmain(String[]args){JOptionPane.showMessageDialog(null,"Hello World!");}}
//HelloWorld.javapackagehelloworld;importjavafx.application.Application;importjavafx.event.ActionEvent;importjavafx.event.EventHandler;importjavafx.scene.Scene;importjavafx.scene.control.Button;importjavafx.scene.layout.StackPane;importjavafx.stage.Stage;publicclassHelloWorldextendsApplication{@Overridepublicvoidstart(StageprimaryStage){Buttonbtn=newButton();btn.setText("Say 'Hello World'");btn.setOnAction(newEventHandler<ActionEvent>(){@Overridepublicvoidhandle(ActionEventevent){System.out.println("Hello World!");}});StackPaneroot=newStackPane();root.getChildren().add(btn);Scenescene=newScene(root,300,250);primaryStage.setTitle("Hello World!");primaryStage.setScene(scene);primaryStage.show();}publicstaticvoidmain(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 scrittaHello 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: ilmain 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

[modifica |modifica wikitesto]
Duke, la mascotte di Java

Java è un linguaggiotype safe, atipizzazione statica, con unnominativetype system, e dotato dimanifest typing. In virtù di queste caratteristiche, viene generalmente considerato un linguaggio atipizzazione forte. Il linguaggio distingue chiaramente itipi primitivi che definiscono valori atomici daitipi strutturati che definiscono strutture dati composte.
I tipi primitivi sono detti anchetipi atomici etipi 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 anchetipi riferimento, cioè definisconooggetti, 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 packagejava.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
TipoDescrizioneClasse contenitore
byteintero con segno a 8 bitByte
shortintero con segno a 16 bitShort
intintero con segno a 32 bitInteger
longintero con segno a 64 bitLong
floatvirgola mobile a 32 bit singola precisione (standardIEEE 754)Float
doublevirgola mobile a 64 bit doppia precisione (standardIEEE 754)Double
charcarattere singoloUnicode (intero senza segno a 16 bit)Character
booleantrue ofalseBoolean

Da tutto ciò consegue che i valori dei tipi basenon sono oggetti. Tuttavia per ogni tipo base è definita una corrispondente classe, definita in gergotipo wrapper otipo contenitore, nel packagejava.lang, classe che permette di incapsulare dentro un oggetto un valore di tipo primitivo. Opportuni metodi della classe wrapper permettono di ottenere l'oggetto che incapsula un certo valore, e il valore incapsulato da un certo oggetto.

Dalla versione 5.0 in poi sono supportati l'autoboxing e l'unboxing che permettono di convertire da tipo primitivo a corrispondente classewrapper e viceversa. Il compilatore, "dietro le quinte", traduce la conversione in una opportuna invocazione a metodo sulla classe contenitore; quindi non si tratta di una vera conversione, ma di unasintassi comoda che "nasconde" la creazione di un oggetto della classe wrapper. Come molti altri linguaggi di programmazione anche Java possiede tra lestrutture dati gliarray (vediarray in Java).

Costanti

[modifica |modifica wikitesto]

Valori costanti in Java si identificano con la parola chiave:final seguita dal tipo, nome della costante e dal valore assegnato:

final tipo_costante <nome_costante> = valore;

esempio:

finaldoublePREZZO=15.99;

Per convenzione i nomi delle costanti sono tutti maiuscoli.

Inoltre è possibile dichiararefinal anche un metodo oppure una classe quando si vuole impedire che si faccia overriding del metodo in una sottoclasse nel primo caso oppure impedire che venga creata un classe figlia a partire dalla classe in questione nel secondo caso

Strutture dati

[modifica |modifica wikitesto]
Sezione vuotaQuesta sezione sull'argomento informatica è ancora vuota.Aiutaci a scriverla!

Strutture di controllo

[modifica |modifica wikitesto]

Sono supportate le seguentistrutture di controllo:

  • Strutture selettive:if ... else eswitch, come in C
  • Strutture iterative:
    • while edo ... while come in C
    • for mutuato dal C
    • for each che agisce su unarray o collezione[15]
  • Lagestione delle eccezioni in Java viene gestita dalla sintassitry ... catch ... finally simile a quella del C++.

Al di là dei costrutti per la programmazione ad oggetti il resto dellasintassi di Java è dettalike C, cioè derivata o simile a quella dellinguaggio C.

Orientamento agli oggetti

[modifica |modifica wikitesto]
Lo stesso argomento in dettaglio:Programmazione orientata agli oggetti.

Java è un linguaggioobject-oriented. L'idea che sta alla base della OOP è di rappresentare le entità reali o astratte che determinano le dinamiche del problema risolto dal software sotto forma di entità unitarie, dotate di specifiche d'uso e di funzionamento definite a priori. Queste entità sono chiamateoggetti. Le specifiche che definiscono le caratteristiche di queste unità e in base a cui le stesse vengono create o in gergoistanziate, sono chiamateclassi.
Java tuttavia non è un linguaggio ad oggetti puro, ma solamenteobject oriented (orientato agli oggetti): per esempio i valori dei tipi primitivi non sono oggetti.

Nel linguaggio Java gli oggetti sono dotati dicampi (definiti ancheattributi ovariabili di istanza odi esemplare) e dimetodi. I metodi sono abitualmente usati per implementare agevolmente molti altri costrutti che alcuni altri linguaggi forniscono nativamente, come la gestione degli eventi (implementata attraverso ilistener) o delle proprietà, implementate tramite gliaccessor method e, più in generale, con oggettiJavaBeans.

In Java non esistono le funzioni: i blocchi di codice che "non appartengono a nessun oggetto" sono implementati comemetodi statici di una certa classe e quindi sono sempre dei metodi. In Java si pone un forte accento sulla distinzione trainterfaccia eimplementazione di una classe o oggetto: la prima è l'insieme delle specifiche pubbliche di cui gli utilizzatori di un certo oggetto possono servirsi, mentre la seconda è l'insieme delle strutture interne e delle istruzioni eseguibili che, nel complesso, adempiono a tali specifiche. Il termineinterfaccia è usato anche in un'altra accezione, spiegata nel seguito.

Ereditarietà

[modifica |modifica wikitesto]
Lo stesso argomento in dettaglio:Ereditarietà (informatica).
Esempio di polimorfismo: dalla base comuneShape discendono molti tipi differenti, dotati di comportamenti diversi

È supportata l'ereditarietà tra tipi. Questo permette di stabilire lagerarchia delle classi che compongono un programma. Il linguaggio impone che a capo della gerarchia ci sia la nota classejava.lang.Object.[16]

In Java non esisteereditarietà multipla tra classi.[17] Da un lato questo vincolo permette di avere una gerarchia di classi lineare e previene gli svantaggi introdotti dall'ereditarietà multipla. Dall'altro esso viene agevolmente superato facendo ricorso alleinterfacce, ovvero a tipi analoghi alle classi, ma progettati apposta per essere estesi e soggetti a determinate restrizioni imposte dal linguaggio.[18][19] Di conseguenza esse forniscono alcuni vantaggi dell'ereditarietà multipla, come la possibilità che uno stesso oggetto appartenga a tipi diversi tra loro, senza gli svantaggi come l'ambiguità introdotta dal fatto che una classe possa ereditare implementazioni diverse di uno stesso metodo.

L'ereditarietà multipla in java si può anche simulare tramite ilpattern decorator, che se implementato correttamente, permette di "estendere" a runtime metodi e caratteristiche ad un oggetto.

Dopo l'avvento di Java l'ereditarietà singola si è gradualmente affermata comemodello standard di ereditarietà nelle tecnologie object-oriented ed è stata abbracciata anche dai linguaggi del framework.NETMicrosoft. Dal Java 8 è possibile sfruttare i default method delle interfacce per costruire una seppur limitata ereditarietà multipla. Questa non intacca la linea ereditaria principale che rimane singola, ma permette di ereditare metodi da più interfacce allo stesso tempo.[20]

Ambienti di sviluppo

[modifica |modifica wikitesto]

Per sviluppare programmi in Java è teoricamente sufficiente un qualsiasieditor di testo; in pratica, se si vuole scrivere qualcosa di più del classicohello world, occorre unambiente di sviluppo integrato (IDE): esistono diversi IDE (Integrated Development Environment, ambiente di sviluppo integrato), alcuni gratuiti ed altri a pagamento.

Java Development Kit

[modifica |modifica wikitesto]

Sun (oraOracle) mette a disposizione unsoftware development kit specifico, chiamatoJava Development Kit (oJDK), che include un certo numero di tool di uso comune, fra cuijavac,javadoc,jar, e altri, atti ad elaborare (compilare) ifile sorgenti e/o già compilati, includendo dunque ilJava Runtime Environment (JRE). Inoltre, nel 2019, Oracle ha rilasciato un nuovo interprete e compilatore dinamico chiamatoGraalVM, che dal 2023 vedrà alcune sue porzioni integrate all'interno diOpenJDK.[21][22] Essi lavorano sul codice già scritto e salvato sul sistema: nessuno di essi fornisce un ambiente visivo di scrittura con quelle caratteristiche che tornano utili nella realizzazione di programmi complessi come l'evidenziazione della sintassi tramite colori diversi, l'autocompletamento, o la possibilità di navigare tra i sorgenti tramite il click delmouse.

Ambienti di sviluppo integrato

[modifica |modifica wikitesto]
Eclipse, unIDE per lo sviluppo in Java

La Oracle stessa ha promosso lo sviluppo di un ambiente di sviluppo gratuito e open source chiamatoNetBeans, che può essere scaricato da solo[23], oppure (facoltativamente) con il JDK[24].

  • Un ambiente di sviluppo integrato open-source largamente utilizzato èEclipse, donato alla comunità di sviluppatori daIBM e il cui sviluppo è seguito da una enorme comunità di utenti.
  • Uno degli ambienti di sviluppo integrato commerciali più diffusi èJBuilder prodotto dallaBorland.
  • Un ambiente di sviluppo integrato che ha vinto diversi premi[25] èIntelliJ IDEA.
  • Un ambiente di sviluppo per Java gratuito, e soprattutto leggero, è BlueJ, di chiara impostazione didattica.
  • Un altro ambiente di sviluppo integrato per Java èJCreator, i cui pregi sono soprattutto la semplicità dell'interfaccia e la leggerezza.
  • Un ambiente di sviluppo per Java (e altri linguaggi di programmazione) èVisual Studio Code:software libero egratuito, anche se la versione ufficiale è sotto unalicenza proprietaria.

Ambiente di esecuzione

[modifica |modifica wikitesto]

Piattaforma Java

[modifica |modifica wikitesto]
Lo stesso argomento in dettaglio:Piattaforma Java.
Schema delle varie piattaforme Java esistenti

I programmi scritti in linguaggio Java, dopo una fase iniziale dicompilazione con ottenimento del cosiddettobytecode, sono destinati all'esecuzione sullapiattaforma Java attraverso una fase diinterpretazione (per questo motivo il linguaggio Java è detto anche semi-interpretato) ad opera di unaJava Virtual Machine e in esecuzione hanno accesso alleAPI dellalibreria standard. Questi due passi forniscono un livello di astrazione che permette alleapplicazioni di essere interamenteindipendenti dal sistema hardware su cui esse saranno eseguite. Un'implementazione della piattaforma java è ilJava Runtime Environment (JRE), necessario per l'esecuzione del programma compilato, mentre per lo sviluppo dei programmi in Java a partire dal codice sorgente è necessario ilJava Development Kit (JDK) che include anche il JRE.

Portabilità

[modifica |modifica wikitesto]
Schema che illustra il funzionamento delbytecode sulle diverse piattaforme.

L'esecuzione di programmi scritti in Java deve avere un comportamento simile in contesti di esecuzione diversi. Per raggiungere questo obiettivo si lavora su livelli diversi e il primo di essi è naturalmente il linguaggio che è stato progettato appositamente proprio per questo scopo. Ad esempio esso fornisce unasintassi unificata per definire lesezioni critiche, compito che in altri linguaggi si svolge tipicamente ricorrendo a librerie di terze parti o primitive di sistema.[26] Inoltre praticamente non lascia spazio ai comportamenti non definiti (undefined behavior) o dipendenti dall'implementazione dell'ambiente di esecuzione.

Le specifiche di linguaggio richiedono un ambiente di esecuzione che vigila sull'esecuzione del programma e che proibisce determinate operazioni che altrimenti risulterebbero insicure. Esse fanno riferimento esplicito allaJava Virtual Machine, indicandola come il destinatario tipico delbytecode prodotto dallacompilazione iniziale di un programma Java, e infatti il compilatorejavac incluso nel JDK compila proprio in bytecode. Tuttavia è possibile la compilazione verso architetture diverse, infatti è possibile produrrecodice oggetto specifico di un certosistema operativo servendosi di un compilatore apposito, ad esempio ilGNU Compiler Collection.

In linea di principio si dovrebbe essere in grado di scrivere il programma una sola volta e di farlo eseguire dovunque, di qui il famoso slogan di Sun: "write once, run everywhere". La portabilità è un obiettivo tecnicamente difficile da raggiungere e il successo di Java in questo ambito è materia di alcune controversie. Sebbene in effetti sia possibile scrivere in Java programmi che si comportano in modo coerente attraverso moltepiattaforme hardware diverse, questi dipendono dallemacchine virtuali che sono programmi a sé e che hanno inevitabilmente i lorobug, diversi l'una all'altra: per questo è nata una parodia dello slogan di Sun "Write once, run everywhere" ("Scrivi una volta, esegui ovunque"), che è diventato "Write once,debug anywhere" ("Scrivi una volta,correggi ovunque").[27]

Librerie

[modifica |modifica wikitesto]

Versioni della piattaforma

[modifica |modifica wikitesto]

Il linguaggio in sé definisce solo una minima parte dellelibrerie utilizzabili in combinazione con il linguaggio stesso. La parte restante è definita dalla piattaforma su cui il programma è eseguito. La Oracle mette a disposizione tre piattaforme ufficiali, ciascuna destinata ad ambiti diversi:

Librerie di terze parti

[modifica |modifica wikitesto]

In aggiunta ilprogrammatore può utilizzare un numero arbitrario di librerie di terze parti. Queste librerie, contenute in varipackage, vengono utilizzate dalprogrammatore per utilizzare determinatimetodi oattributi comuni per semplificare e uniformare iprogrammi e renderli maggiormente leggibili ai programmatori. Esistono numerosissimi package utilizzabili dai programmatori nellinguaggio Java. Ad esempio esistono package:

Documentazione

[modifica |modifica wikitesto]

Le specifiche di linguaggio non impongono una determinata sintassi per la documentazione dei sorgenti, tuttavia nel tempo si è imposto come formato standard quello riconosciuto dal toolJavadoc e regolato da specifiche ufficiali ben definite (seppure esterne al linguaggio)[28]. Questo standard prevede che la documentazione sia fornita all'interno di commenti inseriti direttamente nei sorgenti e dotati di una speciale formattazione, che viene ignorata dal compilatore, ma riconosciuta da tool specializzati. Ciò rende facile aggiornare la documentazione, in quanto essa accompagna direttamente l'elemento sintattico da essa marcato; inoltre, durante la lettura dei sorgenti di un programma, ciò permette di avere sott'occhio insieme le specifiche e l'implementazione dell'elemento di programma preso in considerazione.

Un altro strumento utilizzabile per la documentazione sono leannotazioni, introdotte nella terza versione delle specifiche di linguaggio[29]. Pur avendo una sintassi formalmente differente dai commenti Javadoc, esse sono usate per lo stesso scopo, cioè forniremetadati che descrivono le entità di programma marcate. Tuttavia, mentre i commenti riportano le specifiche in maniera discorsiva (seppure strutturata), le annotazioni per loro stessa natura sono ideali per l'elaborazione tramite i tool, più che per la lettura da parte di esseri umani. Inoltre, sotto opportune condizioni[30], le informazioni che forniscono sono compilate insieme al codice e possono essere lette perfino atempo di esecuzione, cosa che i commenti non possono fare.

Versioni

[modifica |modifica wikitesto]

Nel settembre 2017, Mark Reinhold, chief Architect della piattaforma Java, ha proposto di modificare il piano di pubblicazione, da una versione ogni due anni agli attuali sei mesi. Non tutte le versioni però hanno un supporto prolungato (LTS - Long Term Support), quest'ultime vengono pubblicate ogni 3 anni, attualmente sono LTS le versioni 21, 17, 11 e 8.

VersioneData pubblicazioneEnd of Free
Public Updates[31][32][33][34]
Extended
Support Until
Vecchia versione non più supportata: JDK Beta1995??
Vecchia versione non più supportata: JDK 1.0gennaio 1996??
Vecchia versione non più supportata: JDK 1.1febbraio 1997??
Vecchia versione non più supportata: J2SE 1.2 Playgrounddicembre 1998??
Vecchia versione non più supportata: J2SE 1.3 Kestrelmaggio 2000??
Vecchia versione non più supportata: J2SE 1.4 Merlinfebbraio 2002ottobre 2008febbraio 2013
Vecchia versione non più supportata: J2SE 5.0 Tigersettembre 2004novembre 2009aprile 2015
Vecchia versione non più supportata: Java SE 6 Mustangdicembre 2006aprile 2013dicembre 2018
dicembre 2026, supporto a pagamento per Azul Platform Core[35]
marzo 2026 per Liberica JDK BellSoft[36]
Vecchia versione non più supportata: Java SE 7 Dolphinluglio 2011aprile 2015luglio 2022
marzo 2026 per Liberica JDK BellSoft[37]
Versione precedente ancora supportata: Java SE 8 (LTS)marzo 2014gennaio 2019 per uso commerciale Oracle
dicembre 2030 per uso non commerciale Oracle
dicembre 2030 per Azul
Almeno maggio 2026 per AdoptOpenJDK
Almeno maggio 2026 per Amazon Corretto
marzo 2031 per Liberica JDK BellSoft[38]
dicembre 2030
Vecchia versione non più supportata: Java SE 9settembre 2017marzo 2018 per OpenJDKNon disponibile
Vecchia versione non più supportata: Java SE 10marzo 2018settembre 2018 per OpenJDKNon disponibile
Versione precedente ancora supportata: Java SE 11 (LTS)settembre 2018settembre 2026 per Azul
Almeno ottobre 2024 per AdoptOpenJDK
Almeno settembre 2027 per Amazon Corretto
Almeno ottobre 2024 per Microsoft[39][40]
marzo 2027 per Liberica JDK BellSoft[41]
settembre 2026
settembre 2028 per Azul[35]
Vecchia versione non più supportata: Java SE 12marzo 2019settembre 2019 per OpenJDKNon disponibile
Vecchia versione non più supportata: Java SE 13settembre 2019marzo 2020 per OpenJDKNon disponibile
Vecchia versione non più supportata: Java SE 14marzo 2020settembre 2020 per OpenJDKNon disponibile
Vecchia versione non più supportata: Java SE 15settembre 2020marzo 2021 per OpenJDK
marzo 2023 per Azul[35]
N.D.
Vecchia versione non più supportata: Java SE 16marzo 2021settembre 2021 per OpenJDKNon disponibile
Versione precedente ancora supportata: Java SE 17 (LTS)settembre 2021settembre 2029 per Azul
Almeno settembre 2027 per Microsoft
marzo 2030 per Liberica JDK BellSoft[42]
settembre 2029 o successivo
settembre 2031 per Azul Platform Prime
Vecchia versione non più supportata: Java SE 18marzo 2022settembre 2022 per OpenJDKNon disponibile
Vecchia versione non più supportata: Java SE 19settembre 2022marzo 2023 per OpenJDKNon disponibile
Vecchia versione non più supportata: Java SE 20marzo 2023settembre 2023 per OpenJDKNon disponibile
Versione precedente ancora supportata: Java SE 21 (LTS)settembre 2023settembre 2028
marzo 2032 per Liberica JDK BellSoft[43]
settembre 2031 per Oracle
Vecchia versione non più supportata: Java SE 22marzo 2024settembre 2024?
Vecchia versione non più supportata: Java SE 23settembre 2024marzo 2025?
Versione stabile corrente:Java SE 24marzo 2025settembre 2025?
Versione futura: Java SE 25 (LTS)settembre 2025settembre 2028 per OracleSettembre 2033 per Oracle
Legenda:
Vecchia versione
Versione precedente ancora supportata
Versione corrente
Ultima versione di anteprima
Versione futura

Java fu inizialmente distribuito come Java Development Kit 1.0 (JDK 1.0). Questo comprende ilruntime Java (la virtual machine e le librerie di classi), e gli strumenti di sviluppo (il compilatore Java e altri strumenti). Successivamente, Sun fornì un pacchetto che comprendeva solo il runtime, chiamato Java Runtime Environment (JRE). Normalmente le persone si riferiscono ad una particolare versione di Java attraverso la versione del JDK (es. JDK 1.4) Le versioni JDK 1.2 e successive sono spesso chiamate Java 2. Per esempio, il nome ufficiale del JDK 1.4 è Java (TM) 2 Platform, Standard Edition 1.4.

Il linguaggio è rimasto stabile dal JDK 1.0 al JDK 1.4.x, con laJ2SE 5.0 sono state introdotte nuove funzionalità nel linguaggio. La libreria di classi che viene fornita con JDK è stata progressivamente ampliata e modificata in alcune parti.

Nel settembre 2017 Mark Reinhold, responsabile capo per la piattaforma Java ha proposto di pubblicare una nuova versione di Java ogni 6 mesi, invece di ogni 2 anni come avveniva precedentemente.

Versioni delle specifiche di linguaggio

I cambiamenti nel linguaggio sono formalizzati nelle specifiche di linguaggio. Ogni nuova edizione delle specifiche integra i cambiamenti richiesti fino a quel momento tramite leJava Specification Request e conseguentemente implementati nel compilatorejavac.

  • The Java Programming Language, First Edition
  • The Java Programming Language, Second Edition
  • The Java Programming Language, Third Edition
  • The Java Programming Language, Java SE 7 Edition
  • The Java Programming Language, Java SE 8 Edition
  • The Java Programming Language, Java SE 9 Edition

Note

[modifica |modifica wikitesto]
  1. ^The Java Language Specification, sujava.sun.com.URL consultato il 5 maggio 2011.
  2. ^JavaWorld.com, "So why did they decide to call it Java?", sujavaworld.com.URL consultato il 5 maggio 2011(archiviato dall'url originale il 3 agosto 2009).
  3. ^Come indicato inDesign Goals of the Java(TM) Programming Language: Simple, Object Oriented, and Familiar, sujava.sun.com.URL consultato il 6 maggio 2011.
  4. ^The Java Language Environment.
  5. ^The Java Language Environment.
  6. ^The Java(tm) Language: An Overview.
  7. ^"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."Free and Open Source Java FAQ(archiviato dall'url originale il 3 marzo 2012).; the source is being released via theOpenJDK(archiviato dall'url originale l'11 giugno 2007). project.
  8. ^Open JDK is here! (TXT), sumail.openjdk.java.net, Sun Microsystems, 8 maggio 2007.URL consultato il 9 maggio 2007.
  9. ^abThe Java Language Specification, sujava.sun.com.URL consultato il 5 maggio 2011.
  10. ^James Gosling private communication to Bill Bumgarner, suradio.weblogs.com.URL consultato il 1º agosto 2011(archiviato dall'url originale il 23 maggio 2009).
  11. ^Design Goals of the Java(TM) Programming Language, sujava.sun.com.URL consultato il 6 maggio 2011.
  12. ^Programming Language Popularity, sulangpop.com, 2014.URL consultato il 7 febbraio 2014(archiviato dall'url originale il 27 maggio 2012).
  13. ^TIOBE Programming Community Index, sutiobe.com, 2009.URL consultato il 6 maggio 2009.
  14. ^The Java Tutorials.
  15. ^in particolare è definito per lavorare su un qualunque oggetto che sia istanza dijava.lang.Iterable.
  16. ^ James Gosling, Bill Joy, Guy Steele, Gilad Bracha,Chapter 4. Types, Values, and Variables, inThe Java Language Specification, Third Edition.URL consultato il 6 maggio 2011.
  17. ^Le specifiche di linguaggio non ammettono l'indicazione di più di una superclasse nella definizione di una data classe: vediJava SE Specifications.,Java SE Specifications.
  18. ^The Java Language Environment, "Java language Interfaces", sujava.sun.com.URL consultato il 6 maggio 2011.
  19. ^ James Gosling, Bill Joy, Guy Steele, Gilad Bracha,Chapter 9. Interfaces, inThe Java Language Specification, Third Edition.URL consultato il 7 maggio 2011.
  20. ^Java 8 explained: Default methods, suzeroturnaround.com.URL consultato il 3 aprile 2016.
  21. ^(EN) Oleg Šelajev,Announcing GraalVM 19, sugraalvm, 12 maggio 2019.URL consultato il 6 luglio 2023.
  22. ^(EN)GraalVM Java Compilers Join OpenJDK in 2023, Align with OpenJDK Releases and Processes, suInfoQ.URL consultato il 6 luglio 2023.
  23. ^Welcome to NetBeans.
  24. ^Java SE Downloads.
  25. ^Awards.
  26. ^The Java Language Environment, sujava.sun.com.URL consultato il 6 maggio 2011.
  27. ^ William Wong,Write Once, Debug Everywhere, suelectronicdesign.com.URL consultato il 3 agosto 2008(archiviato dall'url originale il 21 marzo 2009).So far, the "write-once, run-everywhere" promise of Java hasn't come true. The bulk of a Java application will migrate between most Java implementations, but taking advantage of a VM-specific feature causes porting problems.
  28. ^How to Write Doc Comments for the Javadoc Tool, suoracle.com.URL consultato il 16 giugno 2011.
  29. ^The Java Language Specification, Annotations, sujava.sun.com.URL consultato il 16 giugno 2011.
  30. ^Il tipo che definisce l'annotazione in uso deve essere stato marcato con la meta-annotazione@Retention. VediThe Java Language Specification, Interfaces, sujava.sun.com.URL consultato il 16 giugno 2011.
  31. ^Oracle Java SE Support Roadmap, suoracle.com.
  32. ^Support | AdoptOpenJDK, suadoptopenjdk.net.
  33. ^Amazon Corretto 8 & 11 support extended, suaws.amazon.com.
  34. ^Azul Java Support Roadmap, sukr.azul.com.URL consultato il 27 agosto 2021(archiviato dall'url originale il 22 settembre 2021).
  35. ^abc(EN)Azul Support Roadmap, suAzul | Better Java Performance, Superior Java Support.URL consultato l'8 luglio 2021.
  36. ^Liberica JDK 6 roadmap, subell-sw.com.
  37. ^Liberica JDK 7 roadmap, subell-sw.com.
  38. ^Liberica JDK 8 roadmap, subell-sw.com.
  39. ^(EN)Support roadmap for the Microsoft Build of OpenJDK, sudocs.microsoft.com.URL consultato il 3 agosto 2021.
  40. ^(EN)Announcing General Availability of Microsoft Build of OpenJDK, suJava at Microsoft, 25 maggio 2021.URL consultato il 3 agosto 2021.
  41. ^Liberica JDK 11 roadmap, subell-sw.com.
  42. ^Liberica JDK 17 roadmap, subell-sw.com.
  43. ^Liberica JDK 21 roadmap, subell-sw.com.

Bibliografia

[modifica |modifica wikitesto]
Fonti usate per la stesura della voce
Specifiche di linguaggio

Le diverse edizioni delle specifiche sonoaccessibili sul sito della Oracle. L'ultima edizione è la seguente:

Testi di approfondimento

Voci correlate

[modifica |modifica wikitesto]

Altri progetti

[modifica |modifica wikitesto]

Altri progetti

Collegamenti esterni

[modifica |modifica wikitesto]
V · D · M
Principalilinguaggi di programmazione(tutti)
ABAP ·Ada ·ALGOL ·APL ·Assembly ·Awk ·BASIC ·C ·C++ ·C# ·COBOL ·Delphi ·Eiffel ·Fortran ·F# ·Haskell ·IDL ·Java ·JavaScript ·J# ·Lisp ·LOGO ·Lua ·ML ·Objective-C ·OCaml ·Pascal ·Perl ·PHP ·PL/I ·PLaSM ·Prolog ·Python ·Ruby ·Rust ·SAS ·Scheme ·sh ·Simula ·Smalltalk ·SQL ·Swift ·Visual Basic
V · D · M
Software libero e open source
GeneraleCopyleft ·Eventi ·Software libero ·Definizione ·Gratis versus libre ·Open source
Famiglie di sistemi operativiAros Research Operating System ·BSD ·Darwin ·eCos ·FreeDOS ·GNU ·Haiku ·Inferno ·Linux ·Mach ·Minix ·OpenSolaris ·Plan 9 ·ReactOS ·Redox ·Symbian OS
Sviluppo software open sourceEclipse ·Free Pascal ·GCC ·Gambas ·Java ·LLVM ·Lua ·NetBeans ·Octave ·Open64 ·Perl ·PHP ·Python ·ROSE ·Ruby ·Tcl
Storia del software liberoGNU ·Haiku ·Linux ·Mozilla (Application Suite ·Firefox ·Thunderbird)
OrganizzazioniApache Software Foundation ·Blender Foundation ·Eclipse Foundation ·freedesktop.org ·Free Software Foundation (Europe ·India ·Latin America) ·FSMI ·GNOME Foundation ·Google Code ·KDE ·Linux Foundation ·Mozilla Foundation ·Open Source Geospatial Foundation ·Open Source Initiative ·Software Freedom Conservancy ·SourceForge ·Symbian Foundation ·The Document Foundation ·Ubuntu Foundation ·Xiph.Org Foundation ·XMPP Standards Foundation ·X.Org Foundation ·Software Freedom Law Center
Licenze libereApache ·Artistica ·BSD ·GNU GPL ·GNU LGPL ·ISC ·MIT ·MPL ·Ms-PL/RL ·zlib ·Licenze approvate da FSF
Standard di licenzeOpen Source Definition ·The Free Software Definition ·Debian Free Software Guidelines
SfideBlob binario ·Canonical's contributor agreement ·Digital rights management ·Rebranding dei programmi Mozilla ·Software proprietario ·Causa SCO-IBM ·Restrizioni hardware ·Trusted computing ·Licenza virale ·Guerra dei browser ·Halloween Documents
Altri argomentiTermini alternativi ·Comunità software libero ·Distribuzione Linux ·Forking ·Movimento software libero ·Microsoft Open Specification Promise ·Revolution OS
V · D · M
Android
Sviluppo software
Strumenti di sviluppo ufficiali
UfficialiKit di sviluppo software (Android Debug Bridge ·Fastboot ·Android Package) ·Android Native Development Kit ·Kit di sviluppo Android Open Accessory · Bionic · RenderScript · Skia ·Dalvik ·Android Runtime ·AdMob ·Material Design ·Font (Droid ·Roboto · Noto) ·Google Developers
AltriOpenBinder ·Apache Harmony ·OpenJDK ·Gradle
Ambienti di sviluppo
integrati
(IDE)
Android Studio (IntelliJ IDEA) ·Eclipse (Android Development Tools) ·App Inventor
Linguaggi e databaseJava ·Kotlin ·XML ·C ·C++ ·SQLite
Realtà virtualeCardboard ·Daydream
Eventi e comunitàGoogle I/O ·Developer Challenge ·Android Open Source Project
Android logo
Versioni1.0 ·1.1 ·Cupcake (1.5) ·Donut (1.6) ·Eclair (2.0–2.1) ·Froyo (2.2) ·Gingerbread (2.3) ·Honeycomb (3.x) ·Ice Cream Sandwich (4.0) ·Jelly Bean (4.1–4.3) ·KitKat (4.4) ·Lollipop (5.x) ·Marshmallow (6.0) ·Nougat (7.x) ·Oreo (8.x) ·Pie (9) ·10 ·11 ·12 ·13 ·14 ·15
DerivatiAndroid Auto ·Android Things ·Android TV ·Wear OS
Dispositivi mobili
PixelPixel e Pixel XL ·2 e 2 XL ·3 e 3 XL ·3a e 3a XL ·C ·4 e 4 XL ·4a e 4a 5G ·5 ·5a ·6 ·7 ·8 ·9
NexusNexus One ·Nexus S ·Galaxy Nexus ·Nexus 4 ·Nexus 5 ·Nexus 6 ·Nexus 5X ·Nexus 6P · Nexus 7 (2012 ·2013) ·Nexus 10 ·Nexus 9 ·Nexus Q ·Nexus Player
Play EditionHTC One (M7) ·HTC One (M8) ·LG G Pad 8.3 ·Moto G ·Samsung Galaxy S4 ·Sony Xperia Z Ultra
AltroAndroid Go ·Android One ·Altri smartphone Android
Varianti personalizzate/e/ ·Android-x86 ·AOKP ·Baidu Yi · Barnes & Noble Nook ·ColorOS ·CyanogenMod ·Fire OS ·Funtouch OS ·Flyme OS ·HyperOS ·LineageOS ·MIUI ·Nokia X Software Platform ·OmniROM ·OxygenOS · Paranoid Android ·Replicant ·Ubuntu for Android ·XobotOS
ApplicazioniAssistente (Google Now) ·Earth (Sky) ·Gmail ·Google Chrome for Android ·Goggles ·Hangouts ·Maps ·Pay (Send) ·Play (Giochi ·Libri) ·TV ·Voice
APIGoogle Maps ·Google Play Services ·Google Search
Interfacce utente alternativeAsus ZenUI ·HTC Sense ·Google Pixel UI ·LG UX (Optimus UI) ·One UI (Experience ·TouchWiz) ·EMUI ·MIUI
ElenchiApplicazioni per webmaster ·Dispositivi Android ·Distribuzioni derivate da Android AOSP ·Servizi Google per Android ·Servizi web di Google ·Videogiochi per Android
Voci correlateGoogle ·Chromecast · Java vs. Android API · Questioni giuridiche (Oracle contro Google · Guerra per i brevetti sugli smartphone) ·XDA Developers ·Rooting
Controllo di autoritàLCCN(ENsh95008574 ·GND(DE4401313-9 ·BNE(ESXX540033(data) ·BNF(FRcb12533207m(data) ·J9U(EN, HE987007561288105171
  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica
Estratto da "https://it.wikipedia.org/w/index.php?title=Java_(linguaggio_di_programmazione)&oldid=146930187"
Categorie:
Categorie nascoste:

[8]ページ先頭

©2009-2025 Movatter.jp