Elemente de Baza Java
Elemente de Baza Java
Curs 1
Elemente de baza Java
1
CE ESTE INGINERIA SOFTWARE?
Studiul și aplicarea
principiilor de inginerie în
proiectarea, dezvoltarea și
întreținerea aplicațiilor
software.
Dezvoltarea de procese și
metode ce conduc la un act
de implementare și rulare a
unui cod mai sigur și
reutilizabil
Dezvoltare de sisteme
software complexe
(https://www.techopedia.com/definition/
13296/software-engineering)
2
INGINERIE SOFTWARE
3
CUPRINS
Platforma Java
Caracteristici limbaj Java
Considerente evolutive
Utilitare Java
Compilare si rulare
Cuvinte cheie
Tipuri de date
Siruri de variabile
4
De ce Java?
5
platformăsoftware ideală
pentru dezvoltarea de aplicaţii
securizate distribuite sau
stand-alone, capabile să
ruleze pe o mare varietate de
platforme hardware
(computere, telefoane mobile,
smart-phone-uri, PDA-uri, etc.)
şi sisteme de operare
(Windows, LINUX, Solaris,
MacOS, etc.)
6
1996, ca alternativă la C/C++ (+, -)
sintaxă identică C++ (+ câteva diferențe)
consumul minim de resurse din partea maşinii gazdă
extinderea dinamică a facilităţilor intrinseci pe care le oferă
codului pe orice platformă hardware sau software
rularea
(independent de platformă)
- platformă = un mediu hardware şi/sau software care
permite rularea unei anumite aplicaţii
7
PLATFORMA JAVA
9
LIMBAJUL JAVA
10
Produse Java:
Java SE (Java Standard Edition)- platforma de bază
Java ME (Micro Edition) – platforma pentru dezvoltarea
aplicațiilor pentru dispozitive mobile și sisteme embedded. Oferă
un subset de funcționalități din Java SE, dar introduce și biblioteci
specifice dispozitivelor mobile (Android Studio 3.x - Hedgehog)
Java EE (Enterprise Edition) – pentru aplicații mai complexe,
distribuite, multi-tier, componente modulare ce rulează pe un
server de aplicații ( acum platforma Jakarta EE )
JavaFX - tehnologie nouă pentru crearea aplicaţiilor desktop şi
web avansate vizual. Face parte din platforma Java 7; asigură un
model de program consistent pentru construirea aplicaţiilor şi
realizează o diferenţă clară între interfaţa utilizator (UI) şi logica
business. (acum JavaFX 21)
- începând cu Java SE11 e implementat într-un modul 11
13
Considerente evolutive
14
CONSIDERENTE EVOLUTIVE
JavaOne conferința anuală despre Tehnologiile Java –
toamna fiecărui an → din 2018 Java Code One
JDK 1.0-1.1 : 1996 -1997
J2SE 1.2-1.4 : 1998 -> 2002
J2SE 5.0 : 2004 ->suport pana in 2015
JSE 6 (2006) ,
JSE7 (2011) – dupa preluarea Sun Microsystems de catre
Oracle
JSE 8 (2014) – LTS (Long-Term-Support)
JSE 9 and 10 (versiuni non-LTS)
JSE 11 - LTS din septembrie 2018 pana in 2021-2023
JSE 12-16, 2019-2024 (acum JSE 15)
JSE 17 (LTS) din 2021 (toamna) – suport pana in 2026
JSE 19 (sept 2022), JSE 20 (21 mar 2023)
Java SE21 (LTS) (sept 2023)
15
OPENJDK ORACLE - SUPORT INCEPAND CU JDK 11
OpenJDK – implementarea oficiala a Java SE incepand cu versiunea 7.
16
JDK – Java Developers Kit
17
JDK 11/21 - STRUCTURA DE SUBDIRECTOARE
18
JAVA DEVELOPER’S KIT
bin=> director de stocare a utilitarelor şi executabilelor
Java. Aici rezidă fişierele appletviewer.exe, jar.exe,
java.exe, javac.exe, javadoc.exe, javah.exe, javap.exe,
jdb.exe, serialver.exe, servertool.exe, etc.
19
JAVA DEVELOPER’S KIT
20
JAVA API INDEX – HELP
https://docs.oracle.com/en/java/javase/21/docs/api/index.html
21
Structura aplicațiilor Java
Compilarea și rularea
STRUCTURA APLICAȚIILOR JAVA
implementări de clase
23
COMENTARII JAVA
// comentariu
/* comentariu
extins
*/
24
STRUCTURA APLICAȚIILOR JAVA
25
RULAREA APLICAȚIILOR JAVA
Fisier
Compilator Bytecode Java
sursa
Java Test.class
Test.java
Java VM
(Interpretor
Java)
26
UTILITARE JAVA
javac.exe = compilator
Variante de compilare:
javac Test.java
javac –nowarn Test.java invalidează mesajele de warning
javac *.java compilează toate fișierele cu extensia .
java din director
https://docs.oracle.com/en/java/javase/21/docs/specs/man/index.html
27
UTILITARE JAVA
Clasa ce conține
java.exe = interpretor metoda main()
28
COMPILARE ȘI RULARE APLICAȚIE JAVA
Compilare Interpretor
(utilitar (utilitar
javac) java)
Rulare
Test.java Test.class aplicatia Test
29
UTILITARE JAVA - CONTINUARE
Rulare appleturi: appletviewer nume_fisier.html
(nu mai e disponibil in Java SE11)
30
ALTE UTILITARE JAVA
appletviewer (nu mai exista de la java11), jar, jarsigner, java,
javac, javadoc, javap, jcmd, jconsole, jdb, jdeprscan, jdeps, jfr,
jhsdb, jinfo, jlink, jmap, jmod, jpackage, jps, jrunscript, jshell,
jstack, jstat, jstatd, keytool, rmid, rmiregistry, serialver,
jabswitch, jaccessinspector, jaccesswalker, javaw, kinit, klist,
ktab
31
JAVA IDE
IDE = Integrated Development Environment
BlueJ, DrJava, Kawa – destinate pentru invatare, usor de
utilizat
Eclipse https://eclipse.org/
www.eclipse.org/eclipse/presentation/eclipse-slides.ppt
Elemente de baza ale
limbajului java
33
CUVINTE CHEIE IN JAVA
Pentru
excepţii try, catch, finally, throw, throws
34
CUVINTE CHEIE IN JAVA
35
Tipuri de date și conversii
36
TIPURI DE DATE ELEMENTARE JAVA
38
REPREZENTAREA NUMERELOR REALE
39
CLASE ÎNCAPSULATOARE JAVA (WRAPPER CLASSES)
Clasa Void - asociată tipului elementar void
Clasa Byte - asociată tipului elementar byte.
Clasa Short - asociată tipului elementar short.
Clasa Integer - asociată tipului elementar int.
Clasa Long - asociată tipului elementar long.
Clasa Float - asociată tipului elementar float.
Clasa Double - asociată tipului elementar double.
Clasa Boolean - asociată tipului elementar boolean.
44
Operatori unari
++ -- + - ! ~ () [ ]
/ % + - *
Și intre numere
reale !!!
45
Operatori logici pe biți
46
EXEMPLU OPERATORI LOGICI PE BITI
}
Operatori de comparație
Operator condițional
?: (if – then – else)
49
Operatori de asignare și compuși
= += -= *= /= %= &= ^= |= <<=
>>=
>>>=
50
Variabile și tablouri de variabile în
Java
51
Variabile în Java
variabile elementare: sunt variabilele care au ca tip un
tip de date elementar
variabile instanţă: declarate în interiorul clasei
Constante în Java
declarate cu specificatorul final
52
VARIABILE ÎN JAVA – CONVENȚII
53
ȘIRURI DE VARIABILE (TABLOURI UNIDIMENSIONALE)
Declarare:
tip [ ] nume_sir; sau tip nume_sir[];
unde tip tip primitiv (tablou de tip primitiv)
clasă (tablou de obiecte)
Creare:
nume_sir = new tip [dimensiune];
// dimensiune – intreg pozitiv
Inițializare: declarare și creare
tip nume_sir[ ] = new tip[dimensiune];
Asignare (atribuire):
nume_sir[index]=valoare; - pt un anumit element
sau prin copiere cu metoda arraycopy() din clasa System (ex slide 57)54
ȘIRURI DE VARIABILE
Exemplu:
int[ ] sir; sau int sir[ ]; // declararea unui sir
// (tablou) de intregi
sir = new int[10]; // crearea sirului
for(int i=0; i<sir.length; i++)
sir[i] = 1; // asignare
Obs!
1. Elementele tablourilor care nu au primit valori, vor avea implicit
valoarea 0 dacă sunt de tip numeric, respectiv null dacă sunt
obiecte.
2. Tablourile de obiecte sunt distruse automat când nu mai sunt
utilizate, sau explicit prin apelul metodei gc() din clasele System
sau Runtime folosind pachetul implicit java.lang :
System.gc();
Runtime.getRuntime().gc(); 56
ȘIRURI DE VARIABILE
Copierea șirurilor de variabile - metoda arraycopy din
clasa System:
char[ ] sursa = { 'a', 'b', 'c', 'd', 'e', 'f', 'g’, ‘h' );
char[ ] destinatie = new char[3];
System.arraycopy(sursa, 2, destinatie, 0, 3);
System.out.println(destinatie); // “cde”
57
ȘIRURI DE VARIABILE
Clasa java.util.Arrays => căutări, sortări, copieri, umpleri pe
șiruri de variabile
(https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/Arrays.
html)
- metode statice
static byte[ ] copyOf(byte[ ] original, int newLength);
static Boolean equals(int[ ] a, int[ ] a2);
static void fill(Object[ ] a, int fromIndex, int toIndex, Object val);
static void sort(double[ ] a);
static int binarySearch(char[ ] a, char key);
Obs: aceste metode au variante pentru toate tipurile (sunt
supraîncărcate), aici am specificat doar o variantă, ca exemplu 58
class Arrays_01 {
public static void main(String[ ] args) {
int sir[ ] = {7, 12, -1, 99};
Arrays.sort(sir); // in ordine crescatoare
for (int it: sir)
System.out.printf(" %d ", it);// -1 7 12 99
}
}
64
1) Clasa String – clasa care modelează șiruri constante de
caractere
(https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/String.html)
Exemplu:
public class Test{
public static void main(String[ ] args) {
String s1 = "abc";
String s2 = "abc"; // !!! s1 si s2 au aceeasi adresa
System.out.println("s1 == s2 is:" +(s1== s2)); // true
}
} 66
Când folosim operatorul new pentru a crea un obiect
String, JVM creează obiectul, dar nu îl stochează în
String Pool.
Exemplu:
public class Test{
public static void main(String[ ] args) {
String s1 = new String("abc");
String s2 = "abc";
// s1 si s2 sunt in locuri diferite → au adrese diferite
System.out.println("s1 == s2 is: " + (s1== s2)); // false
}
} 67
Metode din clasa String:
68
Unobiect din clasa String poate fi transformat într-un șir de
caractere in reprezentare Unicode, folosind metoda
toCharArray(), fără caracterul '\0’ la sfârșit (deosebire față
de C/C++)
Exemplu:
String s1 = new String("abc"); //”abc”
String s2 = s1 + "def"; //sirul ”def” este convertit automat in String
String s3 = s1 + 5; //se concateneaza sirul initial cu sirul de caractere ”5”
System.out.println(s1 + s2 + 100.23f); // abcabcdef100.23
//etc.
69
Exemplu: Compararea șirurilor – adrese și conținut
70
String s2 = "abc";
System.out.println("s1 == s2 ca adrese: " + (s1== s2));
//s1 si s2 comparate ca valoare
System.out.println("s1 == s2 ca valoare: " + (s1.equals(s2)));
}//main
}//Test
s1 == s2 ca adrese: false
s1 == s2 ca valoare: true
2) Clasa StringBuffer – modelează string-uri ce pot fi
modificate
(https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/StringBuffer.h
tml)
Inițializare:
şir vid de caractere
şir de o lungime inițială specificată, fără caractere
alt obiect de tip String primit ca parametru
72
EXEMPLU:
public class Test{
public static void main(String[ ] args) {
StringBuffer sb=new StringBuffer(0);
//capacitate initiala 0
System.out.println(sb.insert(0,"inceput"));
int len=sb.length();
System.out.println(sb.insert(len,"sfarsit"));
System.out.println(sb.insert(7,String.valueOf(777)));
System.out.println(sb.append(888));
}
}
73
4) Clasa StringTokenizer
(https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/StringTok
enizer.html)
Metode utile:
boolean hasMoreTokens()
String nextToken()
int countTokens()
74
EXEMPLU:
import java.util.StringTokenizer;
75
EXPRESII REGULARE IN JAVA
expresieregulară (regex) = definește un model (pattern)
pentru stringuri. Modelul căutat poate fi orice de la un
singur caracter la un șir cu caractere speciale sau expresie
complexă.
Expresiile
regulare pot fi utilizate pentru căutari, editări și
manipulări de texte.
import java.util.regex.Pattern;
public class Test{
public static void main(String args[]){
String content = "Acesta este un curs de programare";
String pattern = ".*curs.*";
boolean isMatch = Pattern.matches(pattern, content);
System.out.println("Textul contine 'curs'? " +
isMatch);
}
}
import java.util.regex.Pattern;
public class MyTokens {
public static void main(String a[]){
String str = "Sunt student la comunicatii. Imi
plac mult vacantele";
Pattern ptn = Pattern.compile("(la|Imi|mult)");
String[] parts = ptn.split(str);
for(String p: parts)
System.out.println(p);
}
}
78
Exemplu regex (validare cnp):
import java.util.Scanner;
import java.util.regex.Pattern;
if(Pattern.matches("[1256]{1}[0-9]{12}", cnp))
System.out.println("cnp corect");
else
System.out.println("cnp incorect");
} 79
}
80
Material suplimentar
81
JAVA SE 7
Pointeri pe 64-bit
82
- switch cu String-uri
- try with resources – management automat de resurse
- deducere de tip pentru la crearea instantelor generice
- declararea simplificata a metodelor varargs
- literali pentru intregi binari
- permite caracterul underscore in literalii numerici
- prinderea de exceptii multiple si resemnalizarea exceptiilor
cu verificarea de tip
- facilitati de programare concurenta
- o noua biblioteca I/O – independenta de platforma si support
pentru metadata. Noi pachete: java.nio.file si
java.nio.file.attribute
- suport pentru algoritmi Elliptic curve cryptography
83
- Un pipeline XRender pentru Java 2D, imbunatateste
gestionarea trasaturilor specifice GPU- urilor moderne
- Noi API –uri pentru caracteristici grafice
- Imbunatatirea suportului pentru noile protocoale de retea,
SCTP si Sockets Direct Protocol
- update-uri de upstream la XML si Unicode
SINTEZA JAVA 7:
Operatorul diamant:
84
Switch cu String:
Try cu resurse:
JAVA SE 8-17
Java SE 8 – LTS (with Lamda’s) appeared march 2014, update
8u241 ca LTS version
suport pentru expresii lambda
85
dezvoltatorii sa utilizeze o mica parte din Java SE pentru
implementarea de mici servicii sau instante separate in cloud
JSE 10 (JDK 9 – march 2018), noi trasaturi
86
Method reference + forEach:
Streams: secvență de obiecte, poate fi obținută dintr-o
colecție, tablou de obiecte sau resursă I/O. Pot fi aplicate
metode asupra obiectelor din stream → stream modificat →
lanț de metode sau lanț de stream-uri
Stream-urile fac scrierea codului mai rapidă și mai vizibilă
87
Java 8 Date API (nou API cu facilitati suplimentare):
import java.time.LocalDate;
public class LocalDateExample1 {
public static void main(String[] args) {
LocalDate date = LocalDate.now();
LocalDate yesterday = date.minusDays(1);
LocalDate tomorrow = yesterday.plusDays(2);
88
System.out.println("Today date: "+date);
System.out.println("Yesterday date: "+yesterday);
System.out.println("Tommorow date: "+tomorrow); }
}
Clase optionale (un mod de a evita exceptiile de tip NullPointerException
permitand accesul prin obiecte null fara a genera exceptie, gandind operatia
ca un mecanism fallback in caz de obiect null)
89
SINTEZA JAVA 10:
garbagecollector și parallel garbage collector,
managementul de memorie etc. Un nou cuvânt cheie var
pentru definirea de variabile
90
SINTEZA JAVA 11:
Suportul va fi preluat de openJdk Oracle Support, organizație open
source. OpenJdk devine noul standard java.
Local-Variable Syntax for Lambda Parameters (conceptul var este
extins și adăugat la expresiile lambda pentru cazurile în care se
doresc adnotari pe variabile):
91
Lansare programe sursă (Inainte de Java 11, pentru rulare trebuia
compilat programul sursă și fișierul bytecode obținut interpretat de
JVM și rulat). In Java 11 putem scrie direct:
java HelloWorld.java
Client HTTP (Standard) – noi îmbunătățiri