Java (limbaj de programare)

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare
Java
limbaj de programare
Logo Java.svg
Autor James Gosling ,
Sun Microsystems
Data de origine 23 mai 1995
Ultima versiune Java Standard Edition 14 (17 martie 2020)
Utilizare Scop general
Paradigme Orientat pe obiecte
Tastare Puternic
Specificații lingvistice Specificația limbajului Java, Java SE 9
Extensii comune .jar, .java, .class
Influențată de Simula , Ada 83 , C ++ , Eiffel , Java generic , Mesa , Modula-3 , Oberon , Objective-C , UCSD Pascal , Smalltalk
A influențat Ada 2005 , BeanShell , C # , Clojure , D , ECMAScript , Groovy , J # , JavaScript , PHP , Python , Scala , Seed7 , Vala
Implementare referință
Implementare interpret cu JITter
Sistem de operare Windows , Linux , macOS
Licență Licență publică generală GNU , proces comunitar Java
Site-ul web Java Technology Oracle Developers

În informatică Java este un limbaj de programare la nivel înalt , orientat spre obiect și tastare statică , care se bazează pe platforma software de execuție omonimă , special concepută pentru a fi cât mai independentă de platforma hardware de execuție (prin compilarea în bytecode înainte și interpretarea apoi de către un JVM ) (deși această caracteristică implică performanțe în termeni de calcul mai mici decât cele ale limbajelor compilate direct, cum ar fi C și C ++ sau, prin urmare, perfect adaptate la platforma hardware).

Istorie

James Gosling , autorul Java

Java a fost creat din cercetările făcute la Universitatea Stanford la începutul anilor 1990 . În 1992 s-a născut limba Oak (în italiană "stejar"), produsă de Sun Microsystems și creată de un grup de experți dezvoltatori condus de James Gosling . [1] Acest nume a fost ulterior schimbat în Java din cauza problemelor legate de drepturile de autor : limbajul de programare Oak exista deja. [2]

Pentru a facilita tranziția către Java pentru programatorii de modă veche , în special pentru cei legați de limbaje precum C ++ , sintaxa de bază ( structuri de control , operatori etc.) a fost păstrată aproape identică cu cea a C ++ [3] ] [4] ; cu toate acestea, la nivel de limbaj, nu au fost introduse caracteristici care sunt considerate o sursă de complexitate inutilă și care favorizează introducerea anumitor erori în timpul programării, cum ar fi aritmetica indicatorului și moștenirea de clase multiple. [5] Pentru caracteristicile orientate obiect ale limbajului, am fost inspirați de C ++ și mai ales de Obiectivul C. [6]

La început, Sun a decis să utilizeze acest nou produs pentru a crea aplicații complexe pentru dispozitive electronice mici; abia în 1993, odată cu explozia internetului, Java a început să fie remarcat ca un instrument pentru a începe programarea pentru internet. În același timp, Netscape Corporation a anunțat alegerea de a-și echipa celebrul browser de atunci cu numele și mașina virtuală Java (JVM). Aceasta marchează o revoluție în lumea internetului: datorită appleturilor , paginile web au devenit interactive la nivel de client, adică aplicațiile rulează direct pe computerul utilizatorului de internet și nu pe un server la distanță. De exemplu, utilizatorii ar putea juca jocuri direct pe paginile web și să profite de chat-urile dinamice și interactive.

Java a fost anunțat oficial pe 23 mai 1995 la SunWorld. La 13 noiembrie 2006 , Sun Microsystems a lansat implementarea compilatorului Java și a mașinii virtuale sub GPL . Nu toate platformele Java sunt gratuite. Mediul Java gratuit se numește IcedTea. [7] La 8 mai 2007, Sun a lansat, de asemenea, bibliotecile, cu excepția unor componente care nu îi aparțin, sub licența GPL, făcând din Java un limbaj de programare a cărui implementare de referință este gratuită. [8] Limba este definită de un document numit The Java Language Specification, adesea prescurtat JLS . Prima ediție a documentului a fost publicată în 1996. [9] De atunci limba a suferit numeroase modificări și adăugiri, adăugate din când în când în edițiile următoare. La sfârșitul anului 2018, cea mai recentă versiune a specificațiilor este Java SE 11 Edition . [9]

Descriere

Limba

Unul dintre principiile fundamentale ale limbajului este exprimat de deviza WORA ( scrie o dată, rulează oriunde , adică „scrie o dată, rulează oriunde”): codul compilat care rulează pe o platformă nu trebuie recompilat pentru a rula pe o platformă diferită ; de fapt, produsul compilației este într-un format numit bytecode care poate fi executat prin orice implementare a unui procesor virtual numit Java Virtual Machine ; începând din 2014 Java pare să fie unul dintre cele mai utilizate limbaje de programare din lume, în special pentru aplicațiile client-server , cu un număr de dezvoltatori estimat la aproximativ 9 milioane. [10] [11] ; un bun punct de plecare pentru învățarea Java este tutorialul oficial [12] .

Principii

Java a fost creat pentru a îndeplini cinci obiective principale: [13]

  1. să fie „simplu, orientat spre obiect și familiar”;
  2. să fie „robust și sigur”;
  3. să fie independent de platformă ;
  4. conțin instrumente și biblioteci pentru rețea ;
  5. să fie proiectat pentru a rula în siguranță codul de la surse la distanță.
Pictogramă lupă mgx2.svg Același subiect în detaliu: sintaxa Java .
Exemplu de cod sursă Java

Salut Lume!

Mai jos este codul sursă al unui program simplu care tipărește textul „ Hello world ” pe consolă .

 clasa HelloWorld {
public static void main ( String [] args ) {
Sistem . afară . println ( "Hello World" );
}
}

Un program Java minim trebuie să includă definiția clasei utilizând cuvântul cheie de clasă urmat de class_name și metoda metodă principală sau primară și punctul de intrare al programului în care sunt definite variabile globale, obiecte și numite metode statice ale variabilelor și / sau dinamică pe obiecte.

În exemplul de mai sus, main conține instrucțiunile pentru imprimarea șirului Hello World pe ecran; deși este pe deplin funcțional și ușor de înțeles, filosofia orientată pe obiect care se aplică în mod normal oricărui program scris în Java nu este exploatată. Mai jos este codul sursă al unui program care efectuează aceeași sarcină ca și cea anterioară folosind programarea orientată pe obiecte .

 public class Message {
private String toPrint ;

Mesaj public ( tipărire șir ) {
aceasta . toPrint = print ;
}

public nul print () {
Sistem . afară . println ( this . toPrint );
}

public static void main (String args []) {
Mesaj helloworld = mesaj nou ( „Hello World!”);
buna lume . print ();
}
}

Metoda principală încredințează tipărirea mesajului unui obiect creat special pentru această sarcină, pe care se invocă metoda de imprimare dinamică definită înainte de main împreună cu constructorul clasei sau acea metodă specială (cu același nume al clasei) care este folosit pentru a inițializa atributul de clasă ' toPrint al obiectului creat / instanțiat în main. Metodele definibile pot fi declarate private (marcate cu cuvântul cheie privat ) dacă pot fi apelate în cadrul aceleiași clase sau publice (marcate cu cuvântul cheie public ) numai dacă pot fi apelate și de alte clase, de tip static (marcate cu cuvânt cheie static ) dacă este invocabil liber în cadrul clasei (de exemplu, pe variabile globale), dinamic dacă este invocabil pe obiecte.

Scriind noi clase care acceptă operația de imprimare , se poate adapta programul pentru a afișa mesaje de tipuri radical diferite, lăsând principalul aproape neschimbat, schimbând doar jumătatea liniei care urmează noii . De exemplu, puteți lua în considerare un mesaj scris într-o fereastră care apare pe ecranul computerului utilizat sau un șir trimis printr-o conexiune de rețea să apară pe fereastra unui computer client . Sau programul poate vorbi cu utilizatorul pe linia de comandă sau într-o fereastră (considerând că dialogul este un „mesaj interactiv”).

Este posibil să se modifice radical comportamentul programului cu modificări limitate și în puncte predispuse a priori ( polimorfism ): programul poate rezista actualizărilor și nevoilor neașteptate. Mai jos este codul sursă a două programe care arată același text într-o fereastră . Primul creează o fereastră standard în care este scris șirul introdus ca parametru, în timp ce al doilea program creează o fereastră care respectă parametrii (de exemplu dimensiunea ferestrei) inserate în cod.

 import javax.swing.JOptionPane ;
clasă publică HelloWorld {
public static void main ( String [] args ) {
JOptionPane . showMessageDialog ( nul , „Hello World!” );
}
}
 //HelloWorld.java
pachet 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 extinde aplicația {
@Trece peste
public vid start ( Etapa primară Etapa ) {
Buton btn = buton nou ();
btn . setText ( „Spune„ Hello World ”” );
btn . setOnAction ( nou EventHandler < ActionEvent > () {
@Trece peste
void mâner publice (eveniment ActionEvent) {
Sistem . afară . println ( "Hello World!" );
}
});
        
StackPane root = new StackPane ();
rădăcină . getChildren (). adăugați ( btn );

Scena scenă = Scenă nouă ( rădăcină , 300 , 250 );

primaryStage . setTitle ( "Hello World!" );
primaryStage . setScene ( scene );
primaryStage . show ();
}
public static void main ( String [] args ) {
lansare ( args );
}
}

Codul propus creează obiecte utilizate pentru gestionarea interfeței grafice. Se creează inițial o fereastră al cărei titlu este Hello World! ; în interiorul acestei ferestre se introduce o etichetă care conține cuvântul Hello World! în centru . . În cele din urmă, se stabilește dimensiunea ferestrei care, în cele din urmă, este făcută vizibilă împreună cu eticheta care poartă scrisul care trebuie afișat. De asemenea, în acest cod se utilizează programarea obiectelor, dar într-un mod diferit: principalul nu cunoaște mecanismele necesare pentru a crea o interfață grafică pe ecran și acestea sunt decise de clasele JFrame și JLabel care au fost pregătite a priori ( încapsulare ) .

Tip sistem

Duke, mascota Java

Java este un sistem sigur de tip , tipat static , de tip nominativ și limbaj de tastare manifest . În virtutea acestor caracteristici, este considerat, în general, un limbaj puternic tastat . Limbajul distinge în mod clar tipurile primitive care definesc valorile atomice de tipurile structurate care definesc structurile de date compuse.
Tipurile primitive sunt numite și tipuri atomice și tipuri de bază și sunt definite în specificațiile limbajului: setul exact de valori permise și operatorii suportați sunt cunoscuți pentru fiecare.

Tipurile structurate sunt și tipuri de referință , adică definesc obiecte și sunt clase sau interfețe. Dintre acestea, clasele matrice sunt definite în specificația limbii; toate celelalte tipuri structurate sunt „ definite de utilizator ”, adică de către programator. Tipurile definite de utilizator care sunt legate de limbă dintr-un anumit motiv sunt adunate în java.lang și subpachetele sale; limbajul stabilește pentru unele dintre ele ( Object , String , Iterable și altele) reguli sintactice sau semantice suplimentare.

Tipurile de referință includ clase pentru gestionarea șirurilor, tablouri și colecții (liste, hărți etc.).

Tipuri de bază
Tip Descriere Clasa de containere
octet Număr întreg semnat pe 8 biți Octet
mic de statura Număr întreg semnat pe 16 biți Mic de statura
int Număr întreg semnat pe 32 de biți Întreg
lung Număr întreg semnat pe 64 de biți Lung
pluti Variantă mobilă de precizie pe 32 de biți (standard IEEE 754 ) Pluti
dubla 64-bit dublu punct de precizie flotant (standard IEEE 754 ) Dubla
char Caracter unic Unicode (număr întreg nesemnat pe 16 biți) Caracter
boolean true sau false Boolean

Din toate acestea rezultă că valorile tipurilor de bază nu sunt obiecte. Cu toate acestea, pentru fiecare tip de bază este definită o clasă corespunzătoare, definită în jargon ca tip de ambalaj sau tip container , în java.lang , o clasă care vă permite să încapsulați o valoare de tip primitiv în interiorul unui obiect. Metodele adecvate ale clasei wrapper permit obținerea obiectului care încapsulează o anumită valoare și valoarea încapsulată de un anumit obiect.

De la versiunea 5.0 sunt susținute începând cu autoboxing și despachetare care vă permit să convertiți de la tipul primitiv la clasa înveliș și vice - versa corespunzătoare. Compilatorul, „în culise”, traduce conversia într-o invocare adecvată a metodei din clasa containerului; de aceea nu este o conversie reală, ci o sintaxă convenabilă care „ascunde” crearea unui obiect din clasa wrapper. La fel ca multe alte limbaje de programare, Java are, de asemenea, tablouri printre structurile sale de date (consultați tablourile din Java ).

Constante

Valorile constante în Java sunt identificate cu cuvintele cheie prefixate: final static urmat de tipul, numele constantei și valoarea atribuită:

 static final constant_type <constant_name> = valoare;

exemplu:

 dublu final static PRET = 15,99 ;

Prin convenție, numele constantelor sunt majuscule.

Structuri de date

Structuri de control

Sunt suportate următoarele structuri de control :

  • Structuri selective: if ... else și switch , ca în C
  • Structuri iterative:
    • while și do ... while ca în C
    • for împrumutat de la C
    • pentru fiecare acțiune pe o matrice sau colecție [14]
  • Tratarea excepțiilor în Java este gestionată de try ... catch ... finally sintaxă similară cu cea a C ++.

Dincolo de construcțiile pentru programarea orientată pe obiecte, restul sintaxei Java se numește ca C , care este derivat sau similar cu cel al limbajului C.

Orientarea obiectului

Pictogramă lupă mgx2.svg Același subiect în detaliu: Programare orientată pe obiecte .

Java este un limbaj orientat obiect . Ideea din spatele POO este de a reprezenta entitățile reale sau abstracte care determină dinamica problemei rezolvate de software sub formă de entități unitare, cu utilizare specifică și operație definită a priori. Aceste entități sunt numite obiecte . Specificațiile care definesc caracteristicile acestor unități și sub care sunt create sau instanțiate în jargon se numesc clase .
Java însă nu este un limbaj de obiect pur, ci doar orientat spre obiect : de exemplu valorile tipurilor primitive nu sunt obiecte.

În limbajul Java, obiectele au câmpuri (numite și instanță sau exemple de atribute sau variabile ) și metode . Metodele sunt de obicei utilizate pentru a implementa cu ușurință multe alte construcții pe care alte limbi le oferă în mod nativ, cum ar fi gestionarea evenimentelor (implementate prin ascultători ) sau proprietăți, implementate prin metode de accesor și, mai general, cu obiecte JavaBeans .

În Java nu există funcții: blocurile de cod care „nu aparțin nici unui obiect” sunt implementate ca metode statice ale unei anumite clase și, prin urmare, sunt întotdeauna metode. În Java, se pune un accent puternic pe distincția dintre interfață și implementarea unei clase sau obiecte: prima este setul de specificații publice pe care utilizatorii unui anumit obiect îl pot folosi, în timp ce al doilea este setul de structuri interne și instrucțiuni executabile care , în ansamblu, îndeplinesc aceste specificații. Termenul de interfață este, de asemenea, utilizat într-un alt sens, explicat mai jos.

Moştenire

Exemplu de polimorfism: de la baza comună Forma coboară multe tipuri diferite, cu comportamente diferite
Pictogramă lupă mgx2.svg Același subiect în detaliu: Moștenirea (informatică) .

Este acceptată moștenirea între tipuri. Acest lucru vă permite să stabiliți ierarhia claselor care alcătuiesc un program. Limba necesită ca binecunoscuta clasă java.lang.Object fie în fruntea ierarhiei. [15]

În Java, nu există moștenire multiplă între clase. [16] Pe de o parte, această constrângere permite o ierarhie de clase liniară și previne dezavantajele introduse de moștenirea multiplă. Pe de altă parte, este ușor de depășit folosind interfețe , adică tipuri similare claselor, dar special concepute pentru a fi extinse și supuse anumitor restricții impuse de limbă. [17] [18] În consecință, acestea oferă unele avantaje ale moștenirii multiple, cum ar fi posibilitatea ca același obiect să aparțină unor tipuri diferite, fără dezavantaje precum ambiguitatea introdusă de faptul că o clasă poate moșteni implementări diferite ale aceleiași metode .

De la apariția Java, moștenirea unică s-a stabilit treptat ca model standard de moștenire în tehnologiile orientate obiect și a fost, de asemenea, îmbrățișată de limbajele cadrului Microsoft .NET . Din Java 8 este posibil să se exploateze metodele implicite ale interfețelor pentru a construi o moștenire multiplă limitată. Acest lucru nu afectează moștenirea principală care rămâne unică, dar permite metodelor să fie moștenite de la mai multe interfețe în același timp. [19]

Medii de dezvoltare

Pentru a dezvolta programe în Java, orice editor de text este teoretic suficient; în practică, dacă doriți să scrieți ceva mai mult decât lumea clasică Hello , aveți nevoie de un mediu de dezvoltare integrat (IDE): există mai multe IDE ( Integrated Development Environment ), unele gratuite și altele contra cost.

Kit de dezvoltare Java

Sun (acum Oracle ) oferă un set specific de dezvoltare software , numit Java Development Kit (sau JDK ), care include o serie de instrumente utilizate în mod obișnuit, inclusiv javac , javadoc , jar și altele, concepute pentru a procesa ( compila ) sursa și / sau fișiere deja compilate, incluzând astfel Java Runtime Environment (JRE). Acestea lucrează la codul deja scris și salvat pe sistem: niciunul dintre ele nu oferă un mediu de scriere vizual cu acele caracteristici care sunt utile în crearea de programe complexe, cum ar fi evidențierea sintaxei prin diferite culori, completarea automată sau capacitatea de a naviga între surse făcând clic pe mouse .

Medii de dezvoltare integrate

Eclipse , un IDE pentru dezvoltare în Java

Oracle însuși a promovat dezvoltarea unui mediu de dezvoltare liber și open source numit NetBeans , care poate fi descărcat singur [20] sau (opțional) cu JDK [21] .

  • Un mediu de dezvoltare integrat open-source utilizat pe scară largă este Eclipse , donat comunității de dezvoltatori de IBM și a cărui dezvoltare este urmată de o imensă comunitate de utilizatori.
  • Unul dintre cele mai populare medii de dezvoltare integrată comercială este JBuilder produs de Borland .
  • Un mediu de dezvoltare integrată care a câștigat mai multe premii [22] este IntelliJ IDEA .
  • Un mediu de dezvoltare gratuit și mai ales ușor pentru Java este BlueJ, cu o abordare didactică clară.
  • Un alt mediu de dezvoltare integrat pentru Java este JCreator , ale cărui avantaje sunt mai presus de toate simplitatea interfeței și ușurința.
  • Un mediu de dezvoltare pentru Java (și alte limbaje de programare) este Visual Studio Code : software gratuit și gratuit , chiar dacă versiunea oficială se află sub o licență proprietară .

Mediul de execuție

Platforma Java

Pictogramă lupă mgx2.svg Același subiect în detaliu: platforma Java .
Diagrama diferitelor platforme Java existente

Programele scrise în limbaj Java, după o fază inițială de compilare cu obținerea așa-numitului bytecode , sunt destinate executării pe platforma Java printr-o fază de interpretare (din acest motiv, limbajul Java este numit și semiinterpretat) de o mașină virtuală Java și rulează au acces la API-urile standard ale bibliotecii . Acești doi pași oferă un nivel de abstractizare care permite aplicațiilor să fie complet independente de sistemul hardware pe care vor rula. O implementare a platformei java este Java Runtime Environment (JRE), necesară pentru executarea programului compilat, în timp ce pentru dezvoltarea programelor în Java începând de la codul sursă, Java Development Kit (JDK) care include și JRE .

Portabilitate

Diagramă care ilustrează funcționarea codului secundar pe diferite platforme.

Rularea programelor scrise în Java trebuie să aibă un comportament similar în contexte de execuție diferite. Pentru a realiza acest lucru, lucrăm la diferite niveluri, iar primul dintre ele este, desigur, limbajul special conceput în acest scop. De exemplu, oferă o sintaxă unificată pentru definirea secțiunilor critice , o sarcină care în alte limbi are loc de obicei folosind biblioteci terțe sau primitive de sistem. [23] În plus, practic nu lasă loc pentru un comportament nedefinit sau un comportament dependent de implementare al mediului de execuție.

Specificarea limbajului necesită un mediu de execuție care supraveghează execuția programului și interzice anumite operațiuni care altfel ar fi nesigure. Acestea se referă în mod explicit la mașina virtuală Java , indicând-o ca destinatar tipic al bytecodului produs de compilarea inițială a unui program Java și, de fapt, javac inclus în JDK compilează exact în bytecode. Cu toate acestea, este posibil să se compileze spre diferite arhitecturi, de fapt este posibil să se producă un cod obiect specific al unui anumit sistem de operare folosind un compilator special, de exemplu colecția GNU Compiler .

În principiu, ar trebui să puteți scrie programul o singură dată și să îl rulați peste tot, de unde faimosul slogan Sun: „scrieți o dată, rulați peste tot”. Portabilitatea este un obiectiv tehnic dificil de atins, iar succesul Java în acest domeniu este o chestiune de controversă. Deși este într-adevăr posibil să scrieți programe în Java care se comportă în mod constant pe multe platforme hardware diferite, acestea depind de mașinile virtuale care sunt programe în sine și care au inevitabil propriile bug-uri , diferite între ele: de aceea este creată o parodie al sloganului Soarelui „Scrie o dată, rulează peste tot” („Scrie o dată, rulează oriunde”), care a devenit „Scrie o dată, depanează oriunde” („Scrie o dată, fixează peste tot”). [24]

Biblioteci

Versiuni ale platformei

Limbajul în sine definește doar o mică parte a bibliotecilor care pot fi utilizate în combinație cu limba în sine. Restul este definit de platforma pe care este rulat programul. Oracle oferă trei platforme oficiale, fiecare destinată diferitelor domenii:

Biblioteci terțe

În plus, programatorul poate utiliza un număr arbitrar de biblioteci terțe. Aceste biblioteci, conținute în diferite pachete , sunt utilizate de programator pentru a utiliza anumite metode sau atribute comune pentru a simplifica și standardiza programele și a le face mai lizibile de către programatori. Există multe pachete care pot fi utilizate de programatori în limbajul Java . De exemplu, există pachete:

Applet

Pictogramă lupă mgx2.svg Același subiect în detaliu: Java Applet .

Platforma Java a fost unul dintre primele sisteme care a oferit suport extins pentru executarea codului din surse la distanță. Un applet Java este un tip special de aplicație care poate fi lansat în browserul utilizatorului prin executarea codului descărcat de pe un server web la distanță. Acest cod este executat într-o zonă foarte restricționată ( sandbox ) pentru a proteja utilizatorul de codul rău intenționat sau cod care are un comportament nedorit; cine publică codul poate aplica un certificat pe care îl utilizează pentru a semna digital applet-uri care le declară „sigure”, dându-le permisiunea de a ieși din zona restricționată și de a accesa sistemul de fișiere și rețeaua, probabil cu aprobarea și sub controlul utilizatorului. În realitate, applet-urile nu au avut prea mult noroc. De fapt, se presupune că clientul pe care este rulat a instalat JRE care urmează să ruleze codul applet. Aplicațiile care includ așa-numitul thin-client, adică un client „ușor” care nu are nevoie de instrumente speciale pentru a executa codul la distanță, uneori este nevoie doar de browser, au avut noroc.

Documentație

Specificațiile lingvistice nu impun o anumită sintaxă pentru documentarea surselor, cu toate acestea, în timp, cea recunoscută de instrumentul Javadoc și reglementată de specificații oficiale bine definite (deși externe limbii) a devenit formatul standard [25] . Acest standard prevede că documentația este furnizată în cadrul comentariilor inserate direct în surse și echipate cu o formatare specială, care este ignorată de compilator, dar recunoscută de instrumente specializate. Acest lucru face ușoară actualizarea documentației, deoarece însoțește direct elementul sintactic marcat de aceasta; în plus, atunci când citiți sursele unui program, acest lucru vă permite să aveți o privire de ansamblu asupra specificațiilor și implementării elementului de program luat în considerare.

Un alt instrument care poate fi utilizat pentru documentare sunt adnotările , introduse în a treia versiune a specificației lingvistice [26] . Deși au o sintaxă formal diferită de comentariile Javadoc, acestea sunt utilizate în același scop, și anume pentru a furniza metadate care descriu entitățile programate marcate. Cu toate acestea, în timp ce comentariile raportează specificațiile într-un mod discursiv (deși structurat), adnotările prin natura lor sunt ideale pentru procesarea prin instrumente, mai degrabă decât pentru citirea umană. Inoltre, sotto opportune condizioni [27] , 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.

Versioni

A partire dal 2017, solo Java 8 e 10 sono supportati pubblicamente. Non verranno più rilasciate security update per Java 9 [28] .

  • JDK 1.0 (none) 23 gennaio 1996
  • JDK 1.1 (none) 19 febbraio 1997
    • JDK 1.1.4 (Sparkler) 12 settembre 1997
    • JDK 1.1.5 (Pumpkin) 3 dicembre 1997
    • JDK 1.1.6 (Abigail) 24 aprile 1998
    • JDK 1.1.7 (Brutus) 28 settembre 1998
    • JDK 1.1.8 (Chelsea) 8 aprile 1999
  • J2SE 1.2 (Playground) 4 dicembre 1999
    • J2SE 1.2.1 (none) 30 marzo 1999
    • J2SE 1.2.2 (Cricket) 8 luglio 1999
  • J2SE 1.3 (Kestrel) 8 maggio 2000
    • J2SE 1.3.1 (Ladybird) 17 maggio 2001
  • J2SE 1.4.0 (Merlin) 13 febbraio 2002
    • J2SE 1.4.1 (Hopper) 16 settembre 2002
    • J2SE 1.4.2 (Mantis) 26 giugno 2003
  • J2SE 5.0 (1.5.0) (Tiger) 29 settembre 2004
  • Java SE 6 (1.6.0) (Mustang) 11 dicembre 2006
  • Java SE 7 (1.7.0) (Dolphin) 28 luglio 2011
  • Java SE 8 (1.8.0) 18 marzo 2014
  • Java SE 9, 21 settembre 2017
  • Java SE 10, 20 marzo 2018
  • Java SE 11, 25 settembre 2018
  • Java SE 12, 19 marzo 2019
  • Java SE 13, 17 settembre 2019
  • Java SE 14, marzo 2020
  • Java SE 15, settembre 2020
  • Java SE 16, marzo 2021

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 rilasciare 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

Curiosità

  • Sembra che il nome Oak derivi dal fatto che Gosling ei 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.
  • Una leggenda metropolitana -mai confermata- vuole che il nome del linguaggio sia stato inteso, 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.
  • Dato che gli ideatori del linguaggio si trovavano spesso ad un caffè presso il quale discutevano del progetto, sembrerebbe che il linguaggio prese il nome e il simbolo da tale abitudine ( 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) [29] .

Note

  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 il 3 marzo 2012 in WebCite .; the source is being released via the OpenJDK Archiviato l'11 giugno 2007 in Internet Archive . 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. ^ Programming Language Popularity , su langpop.com , 2014. URL consultato il 7 febbraio 2014 (archiviato dall' url originale il 27 maggio 2012) .
  11. ^ TIOBE Programming Community Index , su tiobe.com , 2009. URL consultato il 6 maggio 2009 .
  12. ^ The Java Tutorials
  13. ^ Design Goals of the Java(TM) Programming Language , su java.sun.com . URL consultato il 6 maggio 2011 .
  14. ^ in particolare è definito per lavorare su un qualunque oggetto che sia istanza di java.lang.Iterable
  15. ^ 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 .
  16. ^ 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 .
  17. ^ The Java Language Environment, "Java language Interfaces" , su java.sun.com . URL consultato il 6 maggio 2011 .
  18. ^ James Gosling, Bill Joy, Guy Steele, Gilad Bracha, Chapter 9. Interfaces , in The Java Language Specification, Third Edition . URL consultato il 7 maggio 2011 .
  19. ^ Java 8 explained: Default methods , su zeroturnaround.com . URL consultato il 3 aprile 2016 .
  20. ^ Welcome to NetBeans
  21. ^ Java SE Downloads
  22. ^ Awards
  23. ^ The Java Language Environment , su java.sun.com . URL consultato il 6 maggio 2011 .
  24. ^ 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.
  25. ^ How to Write Doc Comments for the Javadoc Tool , su oracle.com . URL consultato il 16 giugno 2011 .
  26. ^ The Java Language Specification, Annotations , su java.sun.com . URL consultato il 16 giugno 2011 .
  27. ^ 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 .
  28. ^ Oracle Java SE Support Roadmap , su www.oracle.com . URL consultato il 4 ottobre 2018 .
  29. ^ James Gosling private communication to Bill Bumgarner , su radio.weblogs.com . URL consultato il 1º agosto 2011 (archiviato dall' url originale il 23 maggio 2009) .

Bibliografia

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

Altri progetti

Collegamenti esterni

Controllo di autorità LCCN ( EN ) sh95008574 · GND ( DE ) 4401313-9 · BNF ( FR ) cb12533207m (data) · BNE ( ES ) XX540033 (data)
Informatica Portale Informatica : accedi alle voci di Wikipedia che trattano di informatica