暗送秋波什么意思| 什么蓝牙耳机好| 为什么医院都让喝雀巢奶粉| tb是什么| 半夜饿是什么原因| 农历11月18日是什么星座| 什么是金融行业| 在此是什么意思| 做梦梦到猪是什么意思| 印第安纹是什么| 差强人意什么意思| 檄文是什么意思| 后羿和嫦娥是什么关系| 宫颈癌前期有什么症状| 为什么说啄木鸟是树的医生| 骑自行车有什么好处| 为什么会得白癜风| 什么是应激反应| 5月8日什么星座| 飞机杯是什么| 为什么单位不愿意申请工伤| 生理性是什么意思| ggo是什么意思| 人工流产后可以吃什么| 湿疹是由什么引起的| 九月二十三是什么星座| 松花粉对肝有什么好处| 蚧壳虫用什么药| 吃什么补肝最好| 4月26日是什么星座| 狗眼屎多是什么原因| 增强免疫力的针叫什么| 国资委主任是什么级别| 荆棘是什么意思| 儿童肠炎吃什么药| 托人办事送什么礼物较好| 西洋参什么季节吃最好| 高泌乳素血症是什么原因引起的| 真太阳时是什么意思| 易烊千玺的真名叫什么| 胃一阵一阵的疼是什么原因| 心阳虚吃什么药| 头昏脑胀吃什么药| 肾主什么| 晚上喝蜂蜜水有什么好处| 晚上搬家有什么说法| 吃山楂片有什么好处| 洛索洛芬钠片和布洛芬有什么区别| 梦到发大水是什么意思| 猫什么时候打疫苗| 体细胞是什么意思| 游字五行属什么| 脸色暗沉发黑什么原因| 身体逐渐消瘦是什么原因| 诛心是什么意思| 乳腺癌三期是什么意思| 下巴底下长痘痘是什么原因| 胶原蛋白什么牌子好| 冥冥之中是什么意思| 四个一是什么字| 布洛芬吃多了有什么后果| 下颌骨紊乱挂什么科| 风湿和类风湿有什么区别| 什么是易孕体质| 遗忘的遗是什么意思| 女属羊和什么属相最配| 游戏是什么| 突然头晕是什么情况| 芒果是什么季节的水果| 吃了避孕药不能吃什么东西| 什么刺骨| 梦见闹离婚是什么意思| 呆萌是什么意思| 钻牛角尖什么意思| 火鸡面为什么这么贵| 甲亢什么不能吃| 是什么表情包| 圆周率是什么意思| 石千读什么| 珊瑚虫属于什么动物| 灸石门为什么会不孕| 小暑吃黄鳝有什么好处| 吞金为什么会死| 铜陵有什么好玩的地方| 下面有点痒用什么药| 什么情况下需要做心脏支架| 鼻炎吃什么食物好得快| 姜子牙姓什么| 总恶心是什么病的前兆| 煜怎么读音是什么意思| 心电轴不偏是什么意思| 内眼角越揉越痒用什么眼药水| 古尔邦节是什么意思| 什么是圆周率| 了是什么词性| 东施效颦的意思是什么| 回归热是什么病| 什么是人生| 土字旁有什么字| 读书是为了什么| 白带什么颜色| 巳蛇五行属什么| cps是什么意思| 大象吃什么| 胎儿为什么会喜欢臀位| 思钱想厚什么意思| 子宫瘢痕是什么意思| noon是什么意思| 女性排卵期一般是什么时候| 吃什么药可以延长射精| 舌头咬破了用什么药| 拉分是什么意思| 感冒低烧吃什么药| ken是什么意思| 家是什么结构的字| nars属于什么档次| 鱼头和什么搭配煲汤好| 喉咙肿大是什么原因| 觉悟是什么意思| 什么叫窦性心律| 丁字是什么意思| 亭亭净植的亭亭是什么意思| 落花生的落是什么意思| 胃溃疡吃什么好| 过的第五笔是什么| 孕酮偏高说明什么| 三拜九叩是什么意思| 周杰伦为什么喜欢昆凌| 什么的小虾| 腰封是什么意思| 筷子什么材质最好| 下腹坠胀是什么原因| 人死后为什么要守夜| 女性排卵期是什么时候| 风化是什么意思| 小米是什么米| 白蛋白下降是什么原因| 毕业送什么礼物给老师| 三魂七魄是什么| 穿旗袍配什么发型好看| 一诺千金是什么生肖| 潮吹是什么样的| 难过美人关是什么生肖| 五月十三号是什么日子| 重阳节是什么时候| 1961年属什么| 做亲子鉴定需要什么东西| 理疗是什么意思| 金晨什么星座| darling是什么意思| 体重下降是什么原因| 梦见下小雨是什么征兆| 吃杏有什么好处| 缺钾是什么原因| 为什么说成也萧何败也萧何| 快速眼动是什么意思| 毛囊炎是什么症状图片| 两点是什么时辰| 止步不前什么意思| bred是什么意思| 徘徊是什么意思| 男女授受不亲是什么意思| 补中益气丸适合什么人吃| 熬夜吃什么水果好| 百叶是什么| 蜂蜜和柠檬一起喝有什么作用| 农历三月三是什么日子| 热火朝天是什么生肖| 枸杞泡水有什么功效| 甲钴胺是什么| 裳能组什么词| 从什么时候开始| 反映是什么意思| 下线是什么意思| 蛇盘疮吃什么药| 产妇适合吃什么水果| 女儿红属于什么酒| 2023是什么年| 蛇五行属什么| 催乳素高是什么原因| 判官是什么意思| 生长激素是什么| 马来酸曲美布汀片什么时候吃| 阳萎早谢吃什么药最好| 梦见眼镜蛇是什么预兆| 隔离的作用是什么| 男人眉毛短是什么面相| chloe什么牌子| 腋下看什么科| 1985年属牛是什么命| 兰精莫代尔是什么面料| 身上遇热就痒是什么病| 什么是实性结节| 后援会是什么意思| 桑叶泡水喝有什么功效| 眼睛有眼屎是什么原因引起的| r一谷氨酰转移酶高说明什么| 屎为什么是臭的| 朝代表什么生肖| 李幼斌是什么军衔| 失眠是什么原因引起的| 十月是什么星座| 狐臭应该挂什么科| 鱿鱼炒什么好吃| 肾结石有什么影响| 尽性是什么意思| 什么果酒最好喝| 人为什么要日b| 脑白质变性是什么病| 准奏是什么意思| 什么生长| 肾病吃什么水果好| bpd是什么| 什么时候有流星| yq是什么意思| 鼻子发干是什么原因造成的| 小腿前面的骨头叫什么| 金牛座有什么特点| 夏季吃什么好| 头晕吃什么好| 情感是什么意思| 鸭蛋不能和什么一起吃| bg文是什么意思| 青花鱼是什么鱼| 儿保挂什么科| 梦见兔子是什么预兆| 一箭双雕是指什么生肖| 右肩膀疼痛预示什么病| 月经不来什么原因| 肉刺用什么药膏能治好| 眼睑炎用什么药效果好| 2月18日是什么星座| 今日冲什么生肖| 月的偏旁有什么字| 蒲公英的花是什么颜色| 月柱金舆是什么意思| 无水焗是什么意思| st是什么意思| 房室传导阻滞是什么意思| 边界欠清是什么意思| 手足口病咳嗽吃什么药| 梦见自己家盖房子是什么预兆| 阴道炎用什么洗液| 肌无力吃什么药| 羊癫疯是什么引起的| 尿液中有白色沉淀物是什么原因| 肝内结节是什么意思啊| 红糖不能和什么一起吃| 吃什么可以降火| 汗毛长的女人代表什么| 共鸣是什么意思| 惊为天人是什么意思| 每天吃黄瓜有什么好处| 承字属于五行属什么| 上面日下面立读什么| 花椒什么时候传入中国| 结婚20年是什么婚| 土乞念什么| 如五行属什么| 没有子宫会有什么影响| 止疼药吃多了有什么副作用| 巨峰葡萄为什么叫巨峰| 四风是什么| 减肥期间晚上可以吃什么| 百度Vai al contenuto

答好新时代网信考卷 谱写网络强国河南华章

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 24 (18 marzo 2025)
UtilizzoGeneral purpose
ParadigmiMulti-paradigma: generico, orientato agli oggetti (basato sulle classi), funzionale, imperativo, riflettivo, calcolo simultaneo
TipizzazioneForte
Specifiche di linguaggio The 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 web oracle.com/java/.
java.com.
百度 昨日,当看到新闻照片后,大家才知道郭鹏救人的事是真的。

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).

James Gosling, autore di Java

Java è stato creato a partire da ricerche effettuate alla Stanford University 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.[1] 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à.[2]

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++[3][4]; tuttavia a livello di linguaggio non sono state introdotte caratteristiche ritenute fonte di complessità non necessaria e che favoriscono 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 al C++ 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 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.[7] 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.[8] Il linguaggio è definito da un documento chiamato The Java Language Specification, spesso abbreviato JLS. 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, la Java SE 23.[9]

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 file di bytecode ottenuto dalla compilazione di un file Java è 0xCAFEBABE, che in inglese 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.

Java venne creato per cinque obiettivi primari:[11]

  1. essere "semplice, orientato agli oggetti e familiare";
  2. essere "robusto e sicuro";
  3. essere indipendente dalla piattaforma;
  4. contenere strumenti e librerie per il networking;
  5. essere progettato per eseguire codice da sorgenti remote in modo sicuro.
Lo stesso argomento in dettaglio: Sintassi Java.
Esempio di codice sorgente Java

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.[12][13]; un buon punto di partenza per imparare Java è il tutorial ufficiale[14].

Hello, world!

[modifica | modifica wikitesto]

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 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 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).

Duke, la mascotte di Java

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
Tipo Descrizione Classe contenitore
byte intero con segno a 8 bit Byte
short intero con segno a 16 bit Short
int intero con segno a 32 bit Integer
long intero con segno a 64 bit Long
float virgola mobile a 32 bit singola precisione (standard IEEE 754) Float
double virgola mobile a 64 bit doppia precisione (standard IEEE 754) Double
char carattere singolo Unicode (intero senza segno a 16 bit) Character
boolean true o false Boolean

Da tutto ciò consegue che i valori dei tipi base non sono oggetti. Tuttavia per ogni tipo base è definita una corrispondente classe, definita in gergo tipo wrapper o tipo contenitore, nel package java.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 classe wrapper 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 una sintassi comoda che "nasconde" la creazione di un oggetto della classe wrapper. Come molti altri linguaggi di programmazione anche Java possiede tra le strutture dati gli array (vedi array in Java).

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:

final double PREZZO = 15.99;

Per convenzione i nomi delle costanti sono tutti maiuscoli.

Inoltre è possibile dichiarare final 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]

Strutture di controllo

[modifica | modifica wikitesto]

Sono supportate le seguenti strutture di controllo:

  • Strutture selettive: if ... else e switch, come in C
  • Strutture iterative:
    • while e do ... while come in C
    • for mutuato dal C
    • for each che agisce su un array o collezione[15]
  • La gestione delle eccezioni in Java viene gestita dalla sintassi try ... catch ... finally simile a quella del C++.

Al di là dei costrutti per la programmazione ad oggetti il resto della sintassi di Java è detta like C, cioè derivata o simile a quella del linguaggio C.

Orientamento agli oggetti

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

Java è un linguaggio object-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 chiamate oggetti. Le specifiche che definiscono le caratteristiche di queste unità e in base a cui le stesse vengono create o in gergo istanziate, sono chiamate classi.
Java tuttavia non è un linguaggio ad oggetti puro, ma solamente object oriented (orientato agli oggetti): per esempio i valori dei tipi primitivi non sono oggetti.

Nel linguaggio Java gli oggetti sono dotati di campi (definiti anche attributi o variabili di istanza o di esemplare) e di metodi. I metodi sono abitualmente usati per implementare agevolmente molti altri costrutti che alcuni altri linguaggi forniscono nativamente, come la gestione degli eventi (implementata attraverso i listener) o delle proprietà, implementate tramite gli accessor method e, più in generale, con oggetti JavaBeans.

In Java non esistono le funzioni: i blocchi di codice che "non appartengono a nessun oggetto" sono implementati come metodi statici di una certa classe e quindi sono sempre dei metodi. In Java si pone un forte accento sulla distinzione tra interfaccia e implementazione 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 termine interfaccia è 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 comune Shape discendono molti tipi differenti, dotati di comportamenti diversi

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

In Java non esiste ereditarietà 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 alle interfacce, 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 il pattern 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 come modello standard di ereditarietà nelle tecnologie object-oriented ed è stata abbracciata anche dai linguaggi del framework .NET Microsoft. 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 qualsiasi editor di testo; in pratica, se si vuole scrivere qualcosa di più del classico hello world, occorre un ambiente 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 (ora Oracle) mette a disposizione un software development kit specifico, chiamato Java Development Kit (o JDK), che include un certo numero di tool di uso comune, fra cui javac, javadoc, jar, e altri, atti ad elaborare (compilare) i file sorgenti e/o già compilati, includendo dunque il Java Runtime Environment (JRE). Inoltre, nel 2019, Oracle ha rilasciato un nuovo interprete e compilatore dinamico chiamato GraalVM, che dal 2023 vedrà alcune sue porzioni integrate all'interno di OpenJDK.[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 del mouse.

Ambienti di sviluppo integrato

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

La Oracle stessa ha promosso lo sviluppo di un ambiente di sviluppo gratuito e open source chiamato NetBeans, 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 da IBM e il cui sviluppo è seguito da una enorme comunità di utenti.
  • Uno degli ambienti di sviluppo integrato commerciali più diffusi è JBuilder prodotto dalla Borland.
  • 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 e gratuito, anche se la versione ufficiale è sotto una licenza 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 di compilazione con ottenimento del cosiddetto bytecode, sono destinati all'esecuzione sulla piattaforma Java attraverso una fase di interpretazione (per questo motivo il linguaggio Java è detto anche semi-interpretato) ad opera di una Java Virtual Machine e in esecuzione hanno accesso alle API della libreria standard. Questi due passi forniscono un livello di astrazione che permette alle applicazioni di essere interamente indipendenti dal sistema hardware su cui esse saranno eseguite. Un'implementazione della piattaforma java è il Java Runtime Environment (JRE), necessario per l'esecuzione del programma compilato, mentre per lo sviluppo dei programmi in Java a partire dal codice sorgente è necessario il Java Development Kit (JDK) che include anche il JRE.

Schema che illustra il funzionamento del bytecode 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 una sintassi unificata per definire le sezioni 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 alla Java Virtual Machine, indicandola come il destinatario tipico del bytecode prodotto dalla compilazione iniziale di un programma Java, e infatti il compilatore javac incluso nel JDK compila proprio in bytecode. Tuttavia è possibile la compilazione verso architetture diverse, infatti è possibile produrre codice oggetto specifico di un certo sistema operativo servendosi di un compilatore apposito, ad esempio il GNU 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 molte piattaforme hardware diverse, questi dipendono dalle macchine virtuali che sono programmi a sé e che hanno inevitabilmente i loro bug, 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]

Versioni della piattaforma

[modifica | modifica wikitesto]

Il linguaggio in sé definisce solo una minima parte delle librerie 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 il programmatore può utilizzare un numero arbitrario di librerie di terze parti. Queste librerie, contenute in vari package, vengono utilizzate dal programmatore per utilizzare determinati metodi o attributi comuni per semplificare e uniformare i programmi e renderli maggiormente leggibili ai programmatori. Esistono numerosissimi package utilizzabili dai programmatori nel linguaggio 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 tool Javadoc 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 le annotazioni, 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è fornire metadati 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 a tempo di esecuzione, cosa che i commenti non possono fare.

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.

Versione Data pubblicazione End of Free
Public Updates[31][32][33][34]
Extended
Support Until
Vecchia versione non più supportata: JDK Beta 1995 ? ?
Vecchia versione non più supportata: JDK 1.0 gennaio 1996 ? ?
Vecchia versione non più supportata: JDK 1.1 febbraio 1997 ? ?
Vecchia versione non più supportata: J2SE 1.2 Playground dicembre 1998 ? ?
Vecchia versione non più supportata: J2SE 1.3 Kestrel maggio 2000 ? ?
Vecchia versione non più supportata: J2SE 1.4 Merlin febbraio 2002 ottobre 2008 febbraio 2013
Vecchia versione non più supportata: J2SE 5.0 Tiger settembre 2004 novembre 2009 aprile 2015
Vecchia versione non più supportata: Java SE 6 Mustang dicembre 2006 aprile 2013 dicembre 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 Dolphin luglio 2011 aprile 2015 luglio 2022
marzo 2026 per Liberica JDK BellSoft[37]
Versione precedente ancora supportata: Java SE 8 (LTS) marzo 2014 gennaio 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 9 settembre 2017 marzo 2018 per OpenJDK Non disponibile
Vecchia versione non più supportata: Java SE 10 marzo 2018 settembre 2018 per OpenJDK Non disponibile
Versione precedente ancora supportata: Java SE 11 (LTS) settembre 2018 settembre 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 12 marzo 2019 settembre 2019 per OpenJDK Non disponibile
Vecchia versione non più supportata: Java SE 13 settembre 2019 marzo 2020 per OpenJDK Non disponibile
Vecchia versione non più supportata: Java SE 14 marzo 2020 settembre 2020 per OpenJDK Non disponibile
Vecchia versione non più supportata: Java SE 15 settembre 2020 marzo 2021 per OpenJDK
marzo 2023 per Azul[35]
N.D.
Vecchia versione non più supportata: Java SE 16 marzo 2021 settembre 2021 per OpenJDK Non disponibile
Versione precedente ancora supportata: Java SE 17 (LTS) settembre 2021 settembre 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 18 marzo 2022 settembre 2022 per OpenJDK Non disponibile
Vecchia versione non più supportata: Java SE 19 settembre 2022 marzo 2023 per OpenJDK Non disponibile
Vecchia versione non più supportata: Java SE 20 marzo 2023 settembre 2023 per OpenJDK Non disponibile
Versione precedente ancora supportata: Java SE 21 (LTS) settembre 2023 settembre 2028
marzo 2032 per Liberica JDK BellSoft[43]
settembre 2031 per Oracle
Vecchia versione non più supportata: Java SE 22 marzo 2024 settembre 2024 ?
Vecchia versione non più supportata: Java SE 23 settembre 2024 marzo 2025 ?
Versione stabile corrente: Java SE 24 marzo 2025 settembre 2025 ?
Versione futura: Java SE 25 (LTS) settembre 2025 settembre 2028 per Oracle Settembre 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 il runtime 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 la J2SE 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 le Java Specification Request e conseguentemente implementati nel compilatore javac.

  • 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
  1. ^ The Java Language Specification, su java.sun.com. URL consultato il 5 maggio 2011.
  2. ^ JavaWorld.com, "So why did they decide to call it Java?", su javaworld.com. URL consultato il 5 maggio 2011 (archiviato dall'url originale il 3 agosto 2009).
  3. ^ Come indicato in Design Goals of the Java(TM) Programming Language: Simple, Object Oriented, and Familiar, su java.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 the OpenJDK (archiviato dall'url originale l'11 giugno 2007). project.
  8. ^ Open JDK is here! (TXT), su mail.openjdk.java.net, Sun Microsystems, 8 maggio 2007. URL consultato il 9 maggio 2007.
  9. ^ a b The Java Language Specification, su java.sun.com. URL consultato il 5 maggio 2011.
  10. ^ James Gosling private communication to Bill Bumgarner, su radio.weblogs.com. URL consultato il 1o agosto 2011 (archiviato dall'url originale il 23 maggio 2009).
  11. ^ Design Goals of the Java(TM) Programming Language, su java.sun.com. URL consultato il 6 maggio 2011.
  12. ^ Programming Language Popularity, su langpop.com, 2014. URL consultato il 7 febbraio 2014 (archiviato dall'url originale il 27 maggio 2012).
  13. ^ TIOBE Programming Community Index, su tiobe.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 di java.lang.Iterable.
  16. ^ James Gosling, Bill Joy, Guy Steele, Gilad Bracha, Chapter 4. Types, Values, and Variables, in The 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: vedi Java SE Specifications., Java SE Specifications.
  18. ^ The Java Language Environment, "Java language Interfaces", su java.sun.com. URL consultato il 6 maggio 2011.
  19. ^ James Gosling, Bill Joy, Guy Steele, Gilad Bracha, Chapter 9. Interfaces, in The Java Language Specification, Third Edition. URL consultato il 7 maggio 2011.
  20. ^ Java 8 explained: Default methods, su zeroturnaround.com. URL consultato il 3 aprile 2016.
  21. ^ (EN) Oleg ?elajev, Announcing GraalVM 19, su graalvm, 12 maggio 2019. URL consultato il 6 luglio 2023.
  22. ^ (EN) GraalVM Java Compilers Join OpenJDK in 2023, Align with OpenJDK Releases and Processes, su InfoQ. URL consultato il 6 luglio 2023.
  23. ^ Welcome to NetBeans.
  24. ^ Java SE Downloads.
  25. ^ Awards.
  26. ^ The Java Language Environment, su java.sun.com. URL consultato il 6 maggio 2011.
  27. ^ William Wong, Write Once, Debug Everywhere, su electronicdesign.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, su oracle.com. URL consultato il 16 giugno 2011.
  29. ^ The Java Language Specification, Annotations, su java.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. Vedi The Java Language Specification, Interfaces, su java.sun.com. URL consultato il 16 giugno 2011.
  31. ^ Oracle Java SE Support Roadmap, su oracle.com.
  32. ^ Support | AdoptOpenJDK, su adoptopenjdk.net.
  33. ^ Amazon Corretto 8 & 11 support extended, su aws.amazon.com.
  34. ^ Azul Java Support Roadmap, su kr.azul.com. URL consultato il 27 agosto 2021 (archiviato dall'url originale il 22 settembre 2021).
  35. ^ a b c (EN) Azul Support Roadmap, su Azul | Better Java Performance, Superior Java Support. URL consultato l'8 luglio 2021.
  36. ^ Liberica JDK 6 roadmap, su bell-sw.com.
  37. ^ Liberica JDK 7 roadmap, su bell-sw.com.
  38. ^ Liberica JDK 8 roadmap, su bell-sw.com.
  39. ^ (EN) Support roadmap for the Microsoft Build of OpenJDK, su docs.microsoft.com. URL consultato il 3 agosto 2021.
  40. ^ (EN) Announcing General Availability of Microsoft Build of OpenJDK, su Java at Microsoft, 25 maggio 2021. URL consultato il 3 agosto 2021.
  41. ^ Liberica JDK 11 roadmap, su bell-sw.com.
  42. ^ Liberica JDK 17 roadmap, su bell-sw.com.
  43. ^ Liberica JDK 21 roadmap, su bell-sw.com.
Fonti usate per la stesura della voce
Specifiche di linguaggio

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

Testi di approfondimento

Voci correlate

[modifica | modifica wikitesto]

Altri progetti

[modifica | modifica wikitesto]

Collegamenti esterni

[modifica | modifica wikitesto]
Controllo di autoritàLCCN (ENsh95008574 · GND (DE4401313-9 · BNE (ESXX540033 (data) · BNF (FRcb12533207m (data) · J9U (ENHE987007561288105171
  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica
装修公司名字取什么好 势力是什么意思 髓母细胞瘤是什么病 省内流量是什么意思 薇诺娜适合什么年龄
7.17什么星座 望洋兴叹是什么意思 血压什么时候量最准确 凝血酶是什么 甲鱼跟什么炖最补
没有味觉是什么病 血糖能吃什么水果 急性肠胃炎吃什么药效果好 一个火一个同念什么 铜是什么颜色的
怦然心动什么意思 针灸是什么 血清碱性磷酸酶高是什么意思 子宫切除后对身体有什么影响 肱骨头小囊变什么意思
泥鳅能钓什么鱼hcv8jop4ns8r.cn 骨关节疼痛什么原因hcv8jop7ns6r.cn 肚子特别疼是什么原因hcv8jop1ns3r.cn 亦字五行属什么hcv8jop7ns9r.cn 脊髓空洞症是什么病inbungee.com
amh是什么hcv9jop2ns3r.cn 孕妇喝什么牛奶对胎儿好hcv9jop2ns2r.cn 螃蟹的什么部位不能吃gangsutong.com 三剑客是什么意思hcv8jop4ns3r.cn 衾怎么读什么意思hcv9jop4ns1r.cn
生日礼物送什么好hcv9jop3ns3r.cn 宫腔镜检查后需要注意什么hcv9jop5ns2r.cn 咖啡有什么功效hcv8jop2ns1r.cn 飞机为什么怕小鸟hcv9jop2ns3r.cn 朱雀是什么hcv9jop1ns0r.cn
方知是什么意思hcv9jop5ns3r.cn 认知是什么hcv9jop6ns0r.cn 发烧能吃什么水果tiangongnft.com 什么是埋线双眼皮hcv9jop7ns3r.cn 公安厅长是什么级别hcv9jop2ns9r.cn
百度