Se afișează postările cu eticheta JRE. Afișați toate postările
Se afișează postările cu eticheta JRE. Afișați toate postările

joi, 21 august 2025

Limbajul de programare Java


Un limbaj de programare de nivel înalt complet orientat spre obiecte este limbajul Java, un limbaj actual cu o popularitate imensă. Inițial a fost numit OAK dezvoltat de compania JavaSoft, de către James Gosling, în cadrul firmei SunMicrosystems, în 1995. În 2010, Oracle a achiziționat Sun Microsystems și a preluat toate produsele și tehnologiile acestora, inclusiv Java.

Limbajul Java este versatil și poate fi folosit pentru dezvoltarea unei game variate de aplicații, inclusiv:

  • Aplicații desktop: Java poate fi utilizat pentru crearea de aplicații desktop cu interfețe grafice. AWT (Abstract Window Toolkit) și Swing sunt două biblioteci Java populare pentru dezvoltarea interfețelor grafice.
  • Aplicații web: Java este folosit în dezvoltarea de aplicații web, fie prin intermediul servletelelor (clase Java care extind capacitățile serverului web pentru a gestiona cereri și răspunsuri HTTP) sau prin folosirea framework-urilor precum Spring, Java Server Faces (JSF) sau Play Framework.
  • Aplicații mobile: Dezvoltarea de aplicații mobile Android se face adesea în Java, utilizând Android SDK și Android Studio.
  • Servicii web: Java este folosit pentru crearea de servicii web, atât pentru dezvoltarea API-urilor (Application Programming Interface), cât și pentru implementarea serverelor care gestionează cererile și oferă răspunsuri.
  • Baze de date: Există numeroase biblioteci și framework-uri Java care facilitează interacțiunea cu bazele de date, cum ar fi JDBC (Java Database Connectivity), Spring Data, Hibernate, permițând dezvoltatorilor să creeze aplicații care interacționează eficient cu diferite sisteme de gestiune a bazelor de date.
  • Aplicații pentru Internetul lucrurilor (IoT): Java este utilizat în dezvoltarea aplicațiilor pentru IoT datorită capacității sale de a gestiona diverse dispozitive și comunicații.

Sunt furnizate 4 platforme Java de către Oracle:

  • Java SE (Standard Edition). Platforma de bază a limbajului ce oferă un set de biblioteci și instrumente (JDK, JRE) pentru dezvoltarea aplicațiilor desktop și generale.
  • Java EE (Enterprise Edition). Extensie a Java SE pentru aplicații web și enterprise complexe; acum evoluează sub denumirea Jakarta EE, sub egida Eclipse Foundation.
  • Java ME (Micro Edition). Destinată aplicațiilor pe telefoane mobile (feature phones) și dispozitive IoT cu resurse limitate; astăzi are o utilizare redusă.
  • JavaFX. Platformă pentru construirea de aplicații GUI (Graphical User Interface) și aplicații web bogate, RIA (Rich Internet Applications). A fost integrată în Java SE până la JDK 8, iar din JDK 11 este dezvoltată separat ca OpenJFX. 
  • GraalVM.  Este un runtime poliglot dezvoltat de Oracle care poate rula cod Java, JavaScript, Python și altele, cu performanță îmbunătățită și posibilitatea de a genera aplicații native. Practic, cu un runtime poliglot poți să ai componente scrise în limbaje diferite într-o singură aplicație și să le faci să comunice între ele eficient, fără a fi nevoie de un alt runtime separat pentru fiecare limbaj.
  • J2ME Embedded – o variantă a Java ME pentru sisteme încorporate (embedded devices). Sisteme încorporate sunt dispozitive care au un calculator integrat pentru a controla funcții specifice, dar nu sunt calculatoare generale. De exemplu electrocasnice inteigente, calculatoare inteligente, etc
  • Java Card – platformă pentru carduri inteligente și dispozitive securizate, cum ar fi SIM-uri sau carduri bancare.

  • JavaFX Mobile – o versiune a JavaFX pentru aplicații mobile (mai mult experimental și învechit).

Limbajul Java este definit de următoarele caracteristici principale:

  • Portabilitate. Datorită mașinii virtuale Java (JVM), Java este un limbaj independent de platforma de lucru, ceea ce înseamnă că aceeași aplicație rulează fără nici o modificare pe sisteme diferite cum ar fi Windows, Linux, ș.a, fapt ce aduce economii substanțiale companiilor. Sloganul de bază fiind ,,Write once, run anywhere”.
  • Orientat pe obiecte. Java este un limbaj de programare orientat pe obiecte, în care totul este tratat ca un obiect, facilitând astfel structurarea și organizarea codului.
  • Sintaxă simplă și familiară. Sintaxa Java este similară cu cea a altor limbaje precum C++ sau C#, ceea ce face mai ușoară învățarea pentru cei care au experiență cu alte limbaje. Caracteristicile ca moștenirea multiplă, șabloanele, întâlnite în alte limbaje de programare au fost eliminate.
  • Securitate: Java are un sistem puternic de securitate integrat care protejează împotriva executării de cod rău intenționat.
  • Gestionarea automată a memoriei. Java are un sistem de gestionare automată a memoriei prin colectarea de gunoi (Garbage Collector), eliminând necesitatea dezvoltatorului de a gestiona manual memoria.
  • Bibliotecă extinsă. Include o bibliotecă standard (Java Standard Library) bogată, care oferă funcționalități pentru diverse sarcini, cum ar fi lucrul cu fișiere, rețele, criptografie, interfețe grafice etc.
  • Multi-threading. Suportă programarea multi-threading, permițând executarea simultană a mai multor fire de execuție în cadrul unei aplicații.
Aceste caracteristici sunt doar câteva dintre motivele pentru care Java este adesea alegerea preferată în dezvoltarea de software, în special pentru aplicații mari și complexe. Flexibilitatea, portabilitatea și securitatea sa sunt aspecte cheie care îl fac să fie utilizat într-o gamă largă de domenii și aplicații.

Limbajul Java este definit de următoarele caracteristici principale:

Pentru a dezvolta programe Java este nevoie de următoarele resurse:

  • JDK (Java Development Kit)[1] ce include setul de aplicații necesare dezvoltării programelor Java.
  • Editor de cod performant ca de exemplu NetBeans[2], Eclipse[3], Intellij IDEA[4], ș.a.

miercuri, 18 septembrie 2019

Prelucrarea tablourilor unidimensionale în Java


Un vector, tablou, masiv unidimensional sau array reprezintă un container pentru un număr de elemente de același tip, fiecare element fiind indexat de un număr. 
În limbajul Java vectorii sunt obiecte, tipul acestora fiind referință.

Vectorii sunt de 2 tipuri:
1.  cu lungime fixă – dimensiunea  vectorului este stabilită la crearea acestuia și nu poate fi modificată ulterior. Pentru ei nu există o clasă care se instanţiază  pentru a obține un obiect vector.
2. cu lungime variabilă – dimensiunea vectorului poate fi modificată pe parcursul rulării programului. Pentru ei există clase Java predefinite ce pot fi instanțiate (de ex.  java.util.Vector, java.util.Arrays, ș.a).

Iată structura unui vector:


După cum observați în figura de mai sus, fiecărui element dintr-un vector îi corespunde un index numeric, cu ajutorul căruia poate fi accesat. Numerotarea elementelor începe întotdeauna de la 0, ceea ce înseamnă că, de exemplu, cel de-al nouălea element va fi accesat de indexul 8.

Pentru a folosi un vector este necesar să:

1. declarați o variabilă de tip vector care va servi drept referință către vectorul propriu-zis: 
Pentru a declara o variabila de tip vector se va respecta sintaxa:
tip [] nume;
unde
tip este tipul de date al elementelor conținute de vector;
[ ] sunt simboluri speciale ce indică ca variabila respectivă este un vector;
nume este identificatorul variabilei vectorului;

Ca şi în cazul altor tipuri de variabile, declararea nu creează de fapt un vector, dar pur şi simplu anunță compilatorul că variabila respectivă va deține un vector de tipul specificat. Deci, la această etapă vectorul nu poate fi utilizat.
Exemple:
byte[]unVectorDeTipByte;
short[]unVectorDeTipShort;
double[]unVectorDeTipDouble;
boolean[]unVectorDeTipBoolean;
char[]unVectorDeTipChar;
String[]unVectorDeTipString;
 

2. creați vectorul și stabiliți dimensiunea acestuia, adică numărul de elemente pe care le va putea conține.
Un vector poate fi creat utilizând operatorul new printr-o construcție de forma: 
new tip_vector [dimensiune]; 
unde:
tip_vector reprezintă tipul elementelor stocate în vector
dimensiune este o expresie de tip întreg pozitivă ce semnifică numărul de elemente ce se vor stoca în vector.

Întreaga construcție va crea un vector de tip tip_vector cu o dimensiune de dimensiune elemente indexate de la 0 la dimensiune-1.

Dacă această instrucțiune ar lipsi, compilatorul ar afișa o eroare asemănătoare celei de mai jos și execuția programului ar eșua:    
Variable anArray may not have been initialized.
De exemplu:
int [] a; // se declară variabila a ce conţine referință către un vector cu elemente întregi
a = new int[5];     // se crează un vector cu 5 elemente întregi de același tip cu variabila a  

3. accesați elementele vectorului, folosind variabila declarată, fie pentru a le atribui valori, fie pentru a citi valorile deja stocate.
Fiecare element distinct din vector poate fi accesat ca o variabilă separată printr-o construcție de forma:
nume [index]
unde 
nume reprezintă numele vectorului ce stochează elementele
index este o expresie de tip întreg strict pozitivă ce semnifică poziția elementului care doriți să îl accesați din vectorul dat. 

Dacă vectorul conține elemente atunci index trebuie să fie cuprins în intervalul  [0, n-1], în caz contrar o excepție de execuție va fi semnalată.

De exemplu:
int [] a; // se declară variabila a ce conţine referință către un vector cu elemente întregi
a = new int[5]; // se crează un vector cu 5 elemente întregi de același tip cu variabila a
a[0] = 23;    // primului element din vector i se atribuie valoarea 23
a[4] = 10;    // ultimului element din vector i se atribuie valoarea 10
a[5] = 9;     // excepție generată! Indexul nu se află în diapazonul [0,4]

Exemplu A: Declararea, inițializarea și afișarea pe ecran a elementelor unui vector

class ExArray {
  public static void main(String[] args) {
   int[] anArray;
   anArray = new int[10];
       
   anArray[0] = 100;
   anArray[1] = 200;
   anArray[2] = 300;
   anArray[3] = 400;
   anArray[4] = 500;
   anArray[5] = 600;
   anArray[6] = 700;
   anArray[7] = 800;
   anArray[8] = 900;
   anArray[9] = 1000;
        
System.out.println("Elementul cu index 0: " + anArray[0]);
System.out.println("Elementul cu index 1: " + anArray[1]);
System.out.println("Elementul cu index 2: " + anArray[2]);
System.out.println("Elementul cu index 3: " + anArray[3]);
System.out.println("Elementul cu index 4: " + anArray[4]);
System.out.println("Elementul cu index 5: " + anArray[5]);
System.out.println("Elementul cu index 6: " + anArray[6]);
System.out.println("Elementul cu index 7: " + anArray[7]);
System.out.println("Elementul cu index 8: " + anArray[8]);
System.out.println("Elementul cu index 9: " + anArray[9]);
}}


Alternativ, poate fi creat și inițializat un vector în felul următor:

int[] anArray = {100, 200, 300, 400, 500, 600, 700, 800, 900, 1000};

În acest caz, dimensiunea vectorului este determinată automat de numărul de valori specificate între acolade și poate fi obținută prin anArray.length.

Deci, fiecare vector conține, pe lângă elemente, o variabilă de instanță publică ce nu poate fi modificată numită length ce stochează numărul de elemente în vector. 

Prin urmare accesând această variabilă putem obține lungimea unui vector.

Exemplu:
double[] v;
v = new double[5];
System.out.println(v.length);      // se va afișa valoarea 5

Expresia:
double[] v;
v = new double[5];

este echivalentă cu expresia:
 double[] v = new double[5];

Orice vector îndată ce a fost declarat este inițializat cu valori default după cum urmează: 
  • pentru byte, shortintlong - valoarea default este 0;
  • pentru float, double - valoarea default este 0.0;
  • pentru boolean - valoarea default este false;
  • pentru obiecte - valoarea default este null;
Exemplul B Inițializarea unui vector cu valori implicite (default):

public class Main {
public static void main(String[] args) {
int[] v = new int[5]; 

System.out.println("Valorile implicite ale vectorului sunt:");
for (int i = 0; i < v.length; i++) {
 System.out.println("v[" + i + "] = " + v[i]);
}}}

Exemplul D Citirea valorilor unui vector de la tastatură

import java.util.Scanner;
public class Main {
 public static void main(String[] args) {
  Scanner sc = new Scanner(System.in);
   int[] v = new int[5]; // vector cu 5 elemente
   for (int i = 0; i < v.length; i++) {
   System.out.print("Introduceți elementul " + i + ": ");
   v[i] = sc.nextInt();
}
System.out.println("Vectorul introdus este:");
for (int x : v) {
   System.out.print(x + " ");
}}}

Rețineți! 
for (int x : v) {
   System.out.print(x + " ");
}
Acestei forme a instrucțiunii for i se mai spune în Java for-each sau forma scurtă a ciclului for. Dacă ar fi să traducem această instrucțiune în limba română ar suna cam în felul următor: pentru fiecare element x din vectorul v afișează la ecran pe x
Această formă a instrucțiunii parcurge automat toate elementele vectorului v și la fiecare iterație, variabila x primește valoarea curentă din vector. Aici nu există de a depăși limitele vectorului, pentru că nu se lucrează cu i. Este ideal pentru citirea elementelor, afișări, calcule simple. Pe lângă aceste beneficii, sunt desigur și limitări. Nu poți modifica valorile direct în vector prin variabila x, deoarece x este doar o copie a elementului. Nu ai acces la index, deci nu-l poți folosi când ai nevoie să știi poziția unui element.

Exemplul D găsirea elementului minim dintr-un vector folosind for-each

public class Main {
    public static void main(String[] args) {
        int[] v = {12, -3, 45, 0, 7, -10, 9};

        int minim = v[0]; 

        for (int x : v) {
            if (x < minim) {
                minim = x;
            }}

        System.out.println("Elementul minim este: " + minim);
    }
}


Să identificăm, din cele expuse mai sus, care sunt restricțiile impuse în lucrul cu masivele unidimensionale în Java: 
  • Dimensiunea tabloului este fixă, deci ea NU poate fi modificată.
  • Pentru a declara un vector se folosește sintaxa: tip[] denumire = new tip[dimensiune];
  • Tipul vectorului poate fi atât primitiv, cât și referință.
  • Vectorul o dată ce a fost declarat este inițializat cu valori default.
  • Indexarea elementelor în vector începe de la 0.
  • Accesul în afara limitelor indicilor elementeor produce eroare de execuție: ArrayIndexOutOfBoundsException.