Sunteți pe pagina 1din 50

Curs 1

Bibliografie suplimentara:
https://docs.oracle.com/javase/8/docs/api/java/util/Scanner.html
http://www.functionx.com/java/
http://www.tutorialspoint.com/java/java_characters.htm
https://docs.oracle.com/javase/tutorial/
https://docs.oracle.com/javase/tutorial/java/data/numberformat.html
https://docs.oracle.com/javase/tutorial/java/data/beyondmath.html
https://docs.oracle.com/javase/tutorial/java/data/QandE/numbers-questions.html
https://docs.oracle.com/javase/tutorial/displayCode.html?
code=https://docs.oracle.com/javase/tutorial/java/data/QandE/MaxVariablesDemo.java
https://docs.oracle.com/javase/tutorial/java/data/numberclasses.html
https://docs.oracle.com/javase/tutorial/java/data/numberformat.html
https://docs.oracle.com/javase/tutorial/java/data/beyondmath.html
JAVA. Notiuni sumare introductive
http://www.oracle.com/technetwork/java/archive-139210.html
Java este un mediu de programare ce ofer utilizatorului cadrul necesar i uneltele necesare
pentru dezvoltarea aplicaiilor Java.
Java este o tehnologie ce ofer suport dezvoltrii de aplicaii distribuite, independente de
platform. Programele Java pot rula pe diferite tipuri de platforme, cu condiia ca pe aceste
platforme s fie instalat o main virtual Java deasupra platformei respective. Avantajul
limbajului Java, comparativ cu alte limbaje de programare este conexiunea strns cu tehnologia
Internet.
Tehnologia Java se concretizeaz ntr-un portofoliu de produse concepute pornind de la
ideea c acelai software trebuie s ruleze pe sisteme i dispozitive diferite. Produsele sunt
organizate dup urmtoarea structur:
Nucleu/Aplicaii desktop J2SE ( Java 2 Platform Standard Edition )
Suport enterprise/Server J2EE ( Java 2 Platform Enterprise Edition )
Suport pentru dispozitive mobile J2ME ( Java 2 Platform Micro Edition )
Suport pentru Servicii WEB si suport XML
Alte tehnologii
Nucleu/Aplicaii desktop J2SE ( Java 2 Standard Edition )
J2SE pune la dispoziia programatorilor un mediu complet pentru dezvoltarea aplicaiilor
desktop i constituie baza pentru J2EE.
Nucleul
Conine limbajul Java, i mediul de execuie pentru aplicaii. Utilizat mpreun
cu componentele desktop furnizeaz suport pentru toat gama de aplicaii i
applet-uri independente de paltform;
Aplicaii desktop
Cuprind biblioteci de clase pentru crearea componentelor reutilizabile, precum
i a aplicaiilor cu interfa grafic;

Suport enterprise/Server J2EE ( Java 2 Platform Enterprise Edition )


Definete standarde pentru dezvoltarea aplicaiilor bazate pe componente, n cadrul unei
arhitecturi multi-nivel.
Suport pentru dispozitive mobile J2ME ( Java 2 Platform Micro Edition )
Pune la dispoziie un mediu de aplicaie ce se adreseaz necesitilor specifice
domeniului telefoniei mobile, i altor dispozitive mobile. Include maini virtuale i un set de
interfee de programare a aplicaiilor definite n cadrul comunitii Java, precum i de experi ai
fabricanilor renumii de dispozitive.
Suport pentru Servicii WEB
Serviciile WEB reprezint aplicaii orientate WEB care folosesc standardele deshise
XML i protocoale de transport pentru schimbul de informaii cu aplicaii client sau alte servicii
WEB. Suportul se concretizeaz n interfee de programare a aplicaiilor i instrumente pentru
dezvoltarea de servicii WEB interoperabile i aplicaii client. Interschimbul de date se realizeaz
datorit faptului c acestea sunt reprezentate n standardul XML.
Suport XML - Extensible Markup Language (XML), reprezint un standard deschis,
interoperabil i bazat pe text pentru reprezentarea datelor. De asemenea constituie un element
esenial n dezvoltarea de servicii WEB, dup cum s-a artat mai sus.
Descrierea tehnologiilor Java
Java Foundation Classes (JFC)
Reprezint un ansamblu de biblioteci de clase distribuite ca parte integrant din
platforma Java 2, ediia standard (J2SE), ce ofer suport pentru construirea de interfee
grafice utilizator, pentru aplicaii client ce ruleaz pe platformele Microsoft Windows,
Linux i MacOS.
JavaBeans
Aceast tehnologie specific arhitectura componentelor J2SE. Componentele reprezint
programe reutilizabile, ce se dezvolt i asambleaz cu uurin pentru a crea produse
complexe.
JDBC ( Java Database Conectivity )
Se constituie ntr-o interfa de programare a aplicaiilor cu baze de date relaionale,
pentru o mare varietate de furnizori. Ofer suport i pentru prelucrarea surselor de date
tabulare, ca de exemplu foi de calcul, i fiierelor text. Accesul la bazele de date se
realizeaz prin drivere specifice fiecrui furnizor.
Java RMI Java Remote Method Invocation )
Permite programatorilor dezvoltarea de aplicaii distribuite n cadrul crora
metodele obiectelor aflate la distan pot fi invocate de pe alte maini virtuale. Pentru
transfer se folosete mecanismul de serializare.
JAI ( Java Advanced Imaging )
Ofer un set de interfee bazate pe un model de programare avansat pentru manipularea
facil a imaginilor.
JAAS ( Java Authentication And Authorization Service )
Set de interfee de programare a aplicaiilor care permit impunerea autorizrii
utilizatorilor i controlul accesului acestora. Implementeaz varianta Java a cadrului
standard PAM ( Pluggable Authentication Module) i suport autentificare bazat pe user.
JCA ( Java Communications API )

Se utilizeaz n cadrul aplicaiilor cu suport de comunicaie independent de platform


prin fax, voice-mail i smart-cards.
JCE ( Java Cryptography Extension )
Se constituie ntr-un set de pachete ce ofer un cadru pentru implementarea criptrii,
generrii de chei i a algoritmilor de autentificare a mesajelor. Sunt implementate cifruri
sincrone, asincrone, la nivel de bloc i la nivel de flux. De asemenea se ofer suport
pentru obiecte sigilate i fluxuri securizate.
JMX ( Java Management Extensions )
Cuprinde un set de instrumente pentru dezvoltarea de soluii distribuite, dinamice i
modulare pentru gestiunea i monitorizarea dispozitivelor, aplicaiilor i reelelor
orientate pe servicii.
JMF ( Java Media Framework )
Permite exploatarea de ctre aplicaii a resurselor multimedia, ntr-o manier specific
tehnologiei Java. Ofer faciliti pentru captur, redare, codificare i decodificare n i din
multiple formate.
JNDI ( Java Naming And Directory Interface )
nzestreaz aplicaiile bazate pe tehnologia Java cu o interfa unificat pentru
multiple servicii de nume i directoare.
JSSE ( Java Secure Socket Extension )
Pachet ce gestioneaz securitatea comunicaiilor pe Internet. Reprezint versiunea Java
pentru protocoalele SSL ( Secure Sockets Layer ) i TLS ( Transport Layer Security ).
nglobeaz funcionalitate pentru criptarea datelor, autentificare la nivel de server,
integritatea mesajelor i opional autentificare la nivel client.
JAXP( Java API for XML Processing )
Permite aplicaiilor citirea i transformarea documentelor XML independent de o anumit
implementare de procesare.
JAXR ( Java API for XML Registries )
Ofer o modalitate uniform de folosire a nregistrrilor bazate pe standarde deschise( ca
de exemplu ebXML ) sau a specificaiilor de cosoriu ( UDDI ).
Java Mail
Pune la dispoziie un cadru independent de platform i protocol pentru dezvoltarea
aplicaiilor pentru trimiterea de mesaje prin pot electronic.
JMS ( Java Message Service ) - reprezint un standard de mesaje ce permite componentelor de
aplicaie J2EE s creeze, s trimit, s primeasc i s citeasc mesaje. Permite comunicarea n
mediu distribuit prin cuplare slab i n mod asincron.
Java Servlet
Implementeaz un mecanism simplu i consistent pentru extinderea funcionalitii unui
server WEB, pentru accesarea sistemelor de afaceri existente. Este de fapt o aplicaie ce
se execut pe server la cererea unui client, cu un scop bine precizat.
JSP ( Java Server Pages ) - tehnologie reprezint varianta Java pentru gestionarea paginilor
WEB cu
coninut dinamic. Permite dezvoltarea rapid a aplicaiilor independente de server i
platform.
J2EE Connector - tehnologie Java pentru problema interconectrii ntre variate servere de
aplicaii i sistemele informatice de ntreprindere EIS Enterprise Information Systems.
SAAJ ( SOAP with Attachments API for Java )

Pune la dispoziie un standard de trimitere a documentelor XML prin Internet.


J2EE Transactions
Simplific programarea aplicaiilor pentru gestiunea tranzaciilor distribuite. Suportul
pentru tranzaciile distribuite este implementat prin dou specificaii JTA ( Java
Transaction API ) i JTS ( Java Transaction Service ).
JMI ( Java Metadata Intarface )
Aceast specificaie permite implementarea unei infrastructuri dinamice i independente
de platform pentru gestiunea crerii, stocrii, accesrii, descoperirii i schimbului de
metadate. Se bazeaz pe specificaia MOF ( Meta Object Facility ) definit de OMG
( Object Management Group ), un standard industrial aprobat pentru gestiunea
metadatelor. Standardul MOF const ntr-un set de artefacte de modelare de baz,
descrise prin UML. Modelele pentru metadate ( metamodele ) pot fi construite din aceste
blocuri de baz. JMI definete i interfeele Java standard pentru pentru aceste
componente de modelare, facilitnd astfel descoperirea i accesarea metadatelor ntr-o
manier independent de platform. Descoperirea, interogarea sau accesarea metadatelor
se realizeaz att la momentul proiectrii ct i la momentul execuiei. Semantica oricrui
sistem modelat poate fi complet descoperit i manipulat.

Caracteristici ale limbajului Java


Simplitate
Tot n vederea simplitii, tehnologia Java conine aa numitul Garbage Colector, care
face ca programatorul s nu mai aib grija dezalocrii zonelor de memorie anterior alocate.
Pentru cunosctorii limbajului C++ acest lucru nseamn c nu mai e nevoie de delete dup
new.
Orientat pe obiecte
Limbajul Java , spre deosebire de C/C++, este n ntregime orientat pe obiecte. Nu exist
o aplicaie n care s nu existe cel puin un obiect, o clas. n Java, orice, cu excepia ctorva
tipuri de date fundamentale, este un obiect. Tehnologia programrii orientate pe obiecte (OOP
Object Oriented Programming) este singura care satisface cerinele actuale ale dezvoltrii
software.
Robust
Se mrete gradul de siguran al codului. Sunt dou nivele de verificare pentru mrirea
gradului de siguran: unul la compilare (prezent n marea majoritate a limbajelor) i unul n
timpul rularii. Ca urmare un program este mai puin supus erorilor.
Securitatea
ntr-o lume n care calculatoarele nu mai pot exista ca eniti solitare, fr a fi conectate
n reea, problema securitii este una din cele mai stringente. Problema care se pune este aceea a
existenei unui nivel de securitate n cadrul limbajului.Unul din principalele avantaje ale
limbajului Java care l-au fcut att de popular este gradul de securitate. Programele Java sunt

fcute s ruleze n sisteme distribuite, i calculatoarele pe care ele lucreaz nu pot fi sigure de
proveniena programelor.
Dinamic
Java este un limbaj dinamic prin faptul c multe decizii privind evoluia programului se
iau n momentul rulrii, la runtime. Datorit faptului c multe din aplicaiile Java sunt preluate
de pe Internet sub forma de applet-uri chiar n momentul execuiei lor, deci din reea, aceste
programe pot fi actualizate s fac fa noilor cerine, utilizatorul dispunnd n orice moment de
cea mai nou variant.
Independent de platform
Unul din marile avantaje ale limbajului Java este independena de platform. Se impunea
aceast independen de platform, innd cont de ideea de lucru n medii distribuite. De fapt un
program Java lucreaz pe o singur main: maina virtual Java ( Java Virtual MachineJVM).
Ca urmare a utilizrii emulatorului un program Java poate rula pe orice platform pentru
care exist un emulator Java. Partea negativ este c folosirea emulatorului duce la marirea
timpului de execuie. Soluia este compilarea just-in-time (JIT) care transform ntregul
program Java n program main nainte de execuia lui.
Compilatoarele just-in-time lucreaz ca i interpretoarele doar c conversia nu se face la
nivel de instruciune ci la nivel de program, crescnd considerabil viteza de execuie a
programului Java.
Suport pentru multithreading
Multithreading-ul este cel care permite ca un program s execute mai multe sacini
aparent n acelai timp, utiliznd mai multe fire de execuie (thread-uri).
Java ofer suport multithreading la nivel de limbaj deci la cel mai jos nivel (clasa
Thread) oferindu-i utilizatorului posibilitatea de a crea un nou fir de execuie ca i cum ar creea
oricare alt obiect. Mai mult, Java permite comunicarea ntre firele de execuie precum i
sincronizara lor.
Interconexiunea cu browsere WWW
Acesta este unul din avantajele care a facut limbajul Java aa de popular. Multe din
firmele care dezvolt browsere WWW au implementat maina virtual Java n interiorul acestor
browsere.
Amintim cele mai utilizate browsere care suport Java: Netscape Navigator al firmei
Netscape i Internet Explorer al firmei Microsoft.
Avnd n vedere aceste caracteristici, Java s-a conturat ca un limbaj performant, care s-a impus n
lumea informaticii.
Pachetul JDK
La baza dezvoltrii unui program Java st mediul de dezvoltare pus la dispoziie de firma
Sun. Acesta este Java Developers Kit (JDK-ul) i trebuie considerat ca mediu de referin n
programarea Java. Mediul JDK conine pe de o parte o serie de biblioteci de clase Java
necesare scrierii unui program i pe de o parte un set de utilitare necesare compilrii,

testrii, execuiei i documentrii unei aplicaii Java. O clas, un fiier bytecode cu extensia
.class, reprezint unitatea fundamental a unui program executabil Java.
O bibliotec de clase cuprinde o serie de clase ce au un numitor comun. O astfel de
bibliotec este cunoscut n java sub numele de package.
JDK-ul conine cteva package-uri fundamentale, package-uri care conin clase fr
de care nu se pot dezvolta aplicaii Java. Package-urile Java incluse n JDK formeaz
principalul API- Application Programming Interface.
Orice alt mediu care poate executa aplicaii Java diferit de mediul JDK trebuie s
includ acest API. Pe lng aceste pachete fundamentale, utilizatorul poate folosi i altele
dezvoltate chiar de el. Trebuie ns s se asigure c aceste pachete adiionale sunt
disponibile i pe platforma pe care aplicaia se execut, nu numai unde aceasta a fost
creat.
Cuvntul cheie import este folosit pentru a face cunoscut utilizarea unei clase dintru-un
package sau a unui ntreg package.
Exemplu:
import java.sql.*;
import java.awt.Graphics;
import java.applet.*;
Un package este o colecie de clase i interfee Java ntre care exist o relaie de asociere. Prin
utilizarea conceptului de package, Java ofer un mecanism de mamagement al identifiactorilor
(numelor) care se pot atribui claselor (name spaces). Printr-un package Java se pot rezolva
eventualele conflicte ce pot aprea datorit existenei a dou clase cu acelai nume. Astfel dac
avem clasa Rectangle din package-ul java.awt , putem avea aceeai clas Rectangle din
pachetul myPackage. Dac n program dorim s utilizm clasa Rectangle din java.awt atunci se
specific aceasta prin import java.awt
Principalele package-uri din Java API
package java.applet
Pachetul conine clasele necesare dezvoltrii unui applet (program Java ce se execut n
cadrul unui browser WWW)
package java.awt., java.awt.event,
package javax.swing;
Pachete ce se folosesc n dezvoltarea interfeelor grafice de comunicare cu utilizatorul i
dezvoltarea aplicaiilor ce implic grafic
package java.beans
Conine clase necesare implementrii tehnologiei Java Beans, o tehnologie orientat pe
crearea unor componente ce pot fi reutilizate.
package java.io
Pachetul include clasele necesare lucrului cu stream-uri
package java.lang
Conine clasele fundamentale fr de care un program Java nu poate exista.
package java.math
Este utilizat pentru lucrul cu funcii matematice
package java.net
Pachetul conine clasele necesare programrii n reea

package java.rmi
Pachet utilizat pentru creearea unor aplicaii Java ce lucreaz n sisteme distribuite (RMI
Remote Method Invocation). Uureaz apelul unor metode din obiecte disponibile pe
diferite computere ce sunt conectate n reea.
package java.security
Pachet ce privete asigurarea unui mecanism de securitate al sistemului software dezvoltat.
package java.sql
Pachetul se folosete n vederea lucrului cu bazele de date.
package java.text
Pachetul este utilizat pentru lucrul cu texte.
package java.util
Ofer suport pentru lucrul cu liste, vectori, dicionare, informaii legate de dat i timp.
Pe lng Java API pachetul JDK pune la dispoziia programatorului o serie de unelte necesare
dezvoltrii, testrii, analizei i documentrii programelor Java.
Dintre acestea amintim:
javac- Java Language Compiler
Acesta este compilatorul java care realizeaz transformarea surselor text scrise n limbaj
de programare Java n codul executabil pe maina virtual Java ( JVM ), n bytecodes, in
clase java (fiiere cu extensia .class). Fiierul surs (text limbaj Java) cu extensia .java se
transmite ca i paramentru n programul javac.
javac HelloJava.java
java Java Interpreter
Acesta este interpetorul Java care execut programele Java (bytecodes, fiiere class) .
Prin lansarea n execuie a acestui utilitar se pornete de fapt JVM. Programul emuleaz
JVM convertind instruciunile JVM n instruciuni ale mainii reale. Este util n execuia
aplicaiilor Java stand-alone nu i a applet-urilor. Are ca paramentru numele fiierului
rezultat n urma compilrii.
java HelloJava
jre Java Runtime Interpreter
Este similar cu interpretorul java dar este o variant mai simplificat
jdb Java Language Debugger
Este unealta utilizat pentru depanarea programelor Java
javah Java Header
Este utilizat pentru a permite programelor scrise n limbajul Java s comunice cu
programele scrise n limbajul C. Cu javah se creeaz fiiere header C i fiiere stub C
necesare pentru a reliza aceast conexiune.
javadoc Java Document
Cu acest instrument se genereaz documenia programelor Java n format html.
Documentarea se face pe baza comentariilor din program. Programul javadoc se aplic
asupra fiierelor surs .java
appletviewer
Utilitarul este utilizat pentru testarea appleturilor. Programul lanseaz n execuie o
main virtual Java. Este un browser minimal de WWW care suport toate
caracteristicile Java ale mediului jdk din care provine.

Scurta comparatie C Java


In Java nu exista cuvntul cheie const iar constantele sunt declarate ca variabile cu atributele
static si final. Exemplu:
public static final double PI = 3.14159265358979323846; // in pachetul Math
Java nu contine declaratia typedef deoarece definirea unei clase introduce automat un nume
pentru un nou tip de date.
Java nu contine operatorul sizeof , pentru ca lungimea variabilelor este cunoscuta, iar la alocarea
de memorie (cu new) nu trebuie specificata dimensiunea alocata.
Compilatorul Java nu are preprocesor, rezulta deci ca nu exista directivele preprocesor
folosite de C si C++ #define, #include etc.
Structura programelor Java
O aplicatie Java contine cel putin o clasa, care contine cel putin o metoda cu numele "main" de
tip void si cu atributele static si public. Metoda "main" are ca unic argument un vector de obiecte
String. Ca si n C, executia unui program ncepe cu functia main, numai ca, main trebuie sa
fie inclusa, ca metoda statica, ntr-o clasa si trebuie sa aiba un argument vector de siruri.
Exemplu 1:
public class Main {
public static void main (String arg[]) {
System.out.println (" Curs Java Basic ");
}
}

In Java nu conteaza ordinea n care sunt scrise functiile (metodele) unei clase, deci o functie
poate fi apelata nainte de a fi definita si nici nu este necesara declararea functiilor utilizate (nu
se folosesc prototipuri de functii).
Orice functie apartine unei clase si nu se pot defini functii n afara claselor.
In limbajul Java nu exista instructiuni specializate pentru citirea/scrierea datelor. Aceste
operatii se realizeaza prin intermediul unor metode existente in pachetele API ale limbajului.
Intrarea si iesirea in Java se realizeaza cu ajutorul claselor de obiecte din pachetul predefinit
java.io. Orice program care foloseste rutinele de intrare/iesire trebuie sa cuprinda instructiunea:
import java.io.*
Conceptul fundamental in operatiile de intrare/iesire in limbajul Java este fluxul de intrare/iesire
(stream).
Daca stream-ul este de intrare, succesiunea de biti curge dinspre exterior (in acest caz, de la
tastatura) catre memoria calculatorului.
Daca stream-ul este de iesire, secventa de biti curge dinspre memoria calculatorului catre
exterior (in acest caz, catre ecran).
Java ofera trei fluxuri predefinite pentru operatii I/O standard:
- System.in pentru intrarea standard de la tastatura;
- System.out pentru iesirea standard la ecranul calculatorului;
Afisarea in consola
System.out.print()
System.out.println()
Diferenta intre cele doua este ca a doua concateneaza imediat dupa parametrul dat pentru afisare
caracterul unicode de linie noua \n.
Pentru afisarea datelor la ecranul calculatorului se folosesc metodele print si println. Spre
deosebire de C/C++ care dispun de un numar foarte mare de optiuni de formatare, afisarea in
Java se face exclusiv prin concatenare de String-uri fara nici o optiune de formatare.
Observatie: String-urile sunt obiecte Java care descriu sirurile de caractere si le vom studia
separat intr-o lectie viitoare. Sa retinem ca prin concatenarea a doua siruri se obtine un nou sir de
caractere care uneste cele doua siruri initiale. Operatorul de concatenare a doua siruri de
caractere folosit de Java este semnul + (plus).
Sintaxa folosita la apelul metodei print este:
System.out.print (<expresie>);
unde:
- <expresie> - este numele unei variabile de un tip de data sau este o expresie care foloseste
operatorul de concatenare pentru siruri de caractere; daca nu toti operanzii din expresie sunt
siruri de caractere, ci alte tipuri primitive de date atunci Java face o conversie temporara la tipul
String.
Efectul apelului metodei print este acela ca se realizeaza afisarea la ecran a variabilei data ca
parametru si nu se face salt la o linie noua.
Sintaxa folosita la apelul metodei println este:
System.out.println (<expresie>);
unde:

- <expresie> - este numele unei variabile de un tip de data sau este o expresie care foloseste
operatorul de concatenare pentru siruri de caractere.
Efectul apelului metodei println este acela ca se realizeaza afisarea la ecran a variabilei data ca
parametru si se face salt la o linie noua.
Metoda println se poate apela si fara parametrii, adica in forma:
System.out.println( ); caz in care se face numai un salt la o linie noua fara sa se afiseze nimic.
- System.err pentru fluxul de erori.
Exemplu de clase care reunesc metode statice, functii care pot fi executate fara a crea obiecte de
tipul clasei respective.
class Main1 {
public static void main (String arg[ ]) { // cu "main" incepe executia
writeln ("Curs Java Basic ");
}
public static void writeln (String txt) { // afiseaza un text pe ecran
System.out.println (txt);
// System.out.println ("Curs Java Basic ");
}
}

Observatii: O metoda ne-statica trebuie apelata pentru un anumit obiect, iar numele ei trebuie
precedat de numele obiectului (si un punct). Metoda "println" este apelata pentru obiectul adresat
de variabila "out", variabila publica din clasa System.
Un fisier sursa Java poate contine mai multe clase, dar numai una din ele poate avea
atributul public.
Numele fisierului sursa (de tip java) trebuie sa coincida cu numele clasei publice pe care
o contine.
O clasa publica este accesibila si unor clase din alte pachete de clase. Compilatorul Java creeaza
pentru fiecare clasa din fisierul sursa cte un fisier cu extensia class si cu numele clasei. Daca
este necesar, se compileaza si alte fisiere sursa cu clase folosite de fisierul transmis spre
compilare. Faza de executie a unui program Java consta din ncarcarea si interpretarea tuturor
claselor necesare executiei metodei main din clasa specificata n comanda java.
Numele unei metode statice trebuie precedat de numele clasei din care face parte (separate printrun punct), daca este apelata dintr-o metoda a unei alte clase.
Exemplu var 1:

public class Main2 {


public static void main (String arg[ ]) { // cu "main" incepe executia
Util.writeln ("Curs Java Basic ");
}
}
class Util {
public static void writeln (String txt) { // afiseaza un text pe ecran
System.out.println (txt);
}
}

Exemplu var 2:

Date primitive

Orice program lucreaza cu date, iar pentru a lucra cu date acestea trebuiesc stocate. Deoarece
memoria unui sistem in care putem stoca informatie este limitata pentru a plasa o informatie in
memorie este necesar mai intai sa rezervam o zona in memorie in functie de tipul informatiei
care va fi stocata. O informatie poate fi stocata sub forma de numar intreg, numar real, caracter,
valoare booleana (adevarat sau fals) sau instanta. In afara de ultimul tip enumerat mai devreme
toate celelalte informatii reprezinta tipuri de date primitive.
Principalele tipurile primitive pe care le putem folosi in Java sunt: short, int, long, float, double,
byte, boolean, char
Tipul void
Tipul void este un tip special, pentru care multimea valorilor este vida. Acest tip se utilizeaza
cand este necesar sa se specifice absenta oricarei valori. De exemplu: pentru tipul de data a
metodelor care nu ntorc nici un rezultat, cum a fost cazul metodei main ().
Tipul boolean: Variabilele de acest tip pot lua doar valorile true i false.
Tipul char: Variabilele de acest tip sunt reprezentate pe 16 bii i pot primi ca valoare orice
simbol din codul Unicode. O variabil de tip caracter poate fi folosit oriunde poate aprea o
valoare ntreag: este considerat numrul su de ordine n setul de caractere Unicode.
Tipuri ntregi: Ele sunt urmtoarele:
byte (octet) short (ntreg scurt) int (ntreg) long (ntreg lung) reprezentate n ordine pe 1, 2, 4, 8
octei.
In calcule tipurile byte i short sunt convertite la int.
Tipurile n virgul mobil float i double, reprezentate respectiv pe 4 i 8 octei.
Fiecrui tip primitiv din Java i corespunde o clas definit standard n Java: Boolean, Character,
Byte, Short, Integer, Long, Float i Double. n aceste clase apar constante i metode utile.
Orice zona de memorie se defineste folosind un tip de data si un nume (sau identificator);
Numele se poate alege dupa urmatoarele reguli:
1. nu poate incepe cu cifra
2. nu poate contine caractere speciale
3. nu poate fi cuvant rezervat (keyword)
Exemplu 1 declarare variabile
public class declarare1 {
public static void main (String arg[]) {
int a=2,b,c;
float d;
double e;
boolean v_bol;
short v_sc;
long v_long=4;
System.out.println(a);
}}

Exemplu 2 declarare si afisare variabile


public class Declarare2 {
public static void main (String arg[]) {
int a=2,b,c;
float d;
double e;
boolean v_bol;
short v_sc;
long v_long=4;
String c1="Curs Java Basic ";
Util_.writeln (c1+":"+a+";");
//System.out.println(a);
}
}
class Util_ {
public static void writeln (String txt) { // afiseaza un text pe ecran
System.out.println (txt);
}
}
Aceste zone de memorie reprezinta parti ale memoriei interne. Memoria interna se imparte in
doua zone: stack si heap. Datele primitive sunt stocate in zone rezervate din stack;
Primitivele int, long, byte, short: reprezinta zone de memorie rezervate pentru stocarea
valorilor numerice intregi. Cel mai des, dintre acestea este folosit tipul int;
Primitivele float si double: reprezinta zone de memorie folosite pentru stocarea valorilor
numerice reale. Diferenta dintre cele doua tipuri de primitive este precizia zecimalelor
valorilor stocate. Chiar daca float si double sunt folosite pentru acelasi tip de date nu putem
transporta informatia dintr-un double intr-un float in mod direct, deoarece este posibila
pierderea de precizie a valorii cu care se face aceasta operatiune. Pentru a pune totusi o
valoare stocata intr-o zona de memorie double intr-un float putem folosi conversia explicita.
Acest lucru se poate face in felul urmator:
int a=2,b,c;
float d=4,f; f=d+(float)a;
Primitiva char: poate fi folosita pentru a stoca caractere in format Unicode.
Anumite caractere pot fi reprezentate printr-o secven Escape de o form aparte.
Primitiva boolean: este folosita pentru a stoca una dintre valorile true sau false; Spre
deosebire de alte limbaje de programare nu mai exista posibilitatea de a folosi valorile 1 si 0
pentru adevarat sau fals. Pentru a reprezenta valorile adevarat sau fals (tip boolean) singura
modalitate este folosirea cuvintelor true si false.
true si false se scriu numai cu litere mici si reprezinta cuvinte rezervate in Java.
Identificatorii Java :
toti identificatorii ar trebui s nceap cu o liter ( de la A la Z sau A la Z ) , caracter valut (
$ ) sau de subliniere ( _ ) .
Un cuvnt cheie nu poate fi utilizat ca un element de identificare .
identificatori sunt case sensitive .

Exemple de identificatori corecti : age, $salary, _value, __1_value


Exemple de identificatori incorrect definit : 123abc , -salary
Java Modifiers:
Exist dou categorii de modificatori :
Access Modifiers: default, public , protected, private
Non-access Modifiers: final, abstract, strictfp
Java Variables:
We would see following type of variables in Java:
Local Variables
Class Variables (Static Variables)
Instance Variables (Non-static variables)
Java Arrays:
Un tablou reprezinta o colectie de variabile de acelasi tip. Exista pozibilitatea de a defini o
structura de un numar definit de variabile de un anumit tip. Aceste tipuri de structui de date se
numesc tablouri (in engleza arrays).
Java Enums:
ENUM au fost introduse de la Java 5.0 si permite ca o variabila sa aiba o valoare dintr-o lista
predefinita, astfel se reduc eventualele erori..! ENUM pot fi declarate ca atare sau n interiorul
unei clase.
Metode, variabile, constructorii pot fi definite n interiorul ENUM.
Exemplu:
class alege_enum {
enum alege{ SMALL, MEDIUM, LARGE }
alege dimensiune;
}
public class Test_enum {
public static void main(String args[]){
alege_enum variabila = new alege_enum();
variabila.dimensiune = alege_enum.alege.MEDIUM ;
System.out.println("Size: " + variabila.dimensiune);
}
}
Cuvinte cheie:
abstract
byte
class
do
extends
for
import
long
private

assert
case
const
double
final
goto
instanceof
native
protected

boolean
catch
continue
else
finally
if
int
new
public

break
char
default
enum
float
implements
interface
package
return

short
switch
throws
volatile

static
synchronized
transient
while

strictfp
this
try

super
throw
void

Comments in Java
Java supports single-line and multi-line comments very similar to c and c++. All characters
available inside any comment are ignored by Java compiler.
Operatori
Operatorii se clasifica in:
operatori matematici: + - * / (cat) % (rest)
operatori logici: && || !
operatori de comparare <, >, <=, >=, ==, !=
operatorul de instantiere: new
operatorul de atribuire: =
Exemplu cu operatori de atribuire
public class atribuire {
public static void main (String arg[]) {
int a=2;
int b=a+10;
b=b+b;
System.out.println("a: "+a+"si b: "+b); }}
ATENTIE:
Clasa Scanner apare n pachetul java.util si permite regasirea ntr-un text a tipurilor
primitive si a sirurilor, folosind expresii regulate.
public final class Scanner extends Object
implements Iterator<String>
Un scanner (obiect de tipul Scanner) mparte intrarea n entitati, folosind un sablon de

delimitatori (delimitatorii impliciti sunt spatiile albe) si regaseste entitatile prin invocarea de
metode next. Pentru a verifica daca urmeaza o entitate de un anumit tip se folosesc metodele
hasNext.
Exemplu. Citirea unui ntreg de la intrarea standard se poate realiza astfel:
Scanner sc = new Scanner(System.in);
int i = sc.nextInt();

Intrarea poate fi si un fisier text:

Scanner sc = new Scanner(new File("fisier"));

sau un sir de caractere.


Exemplu.
import java.util.*; import java.io.*;
class Scan

while(!s.equals("STOP"));
out.close(); std_out.close();
}
}
unde despre clasa PrintWriter vom vorbi n continuare.
Metodele de scanare relative la citire pot conduce la blocare prin asteptarea unei valori de
intrare.
Cele mai folosite metode sunt urmatoarele:
public boolean hasNext()
ntoarce true daca mai urmeaza o entitate;
public String next()

detecteaza si ntoarce urmatoarea entitate;


public boolean hasNextLine()
ntoarce true daca mai urmeaza o noua linie de intrare;
public String nextLine()

ntoarce urmatoarea linie de la intrare;


n metodele descrise n continuare, XXX poate fi:
Boolean, Byte, Short, Int, Long, Float, Double, BigInteger, BigDecimal:
metodele hasNextXXX(), cu semnificatie evidenta, pot lansa exceptia:
IllegalStateException daca scanner-ul este nchis.
metodele nextXXX(), cu semnificatie evidenta, pot lansa exceptiile:
InputMismatchException - daca entitatea nu este cea asteptata;
NoSuchElementException - daca s-a ajuns la sfrsitul intrarii;
IllegalStateException - daca scanner-ul este nchis.
Metoda:
public void close()

nchide scanner-ul.
Se observa ca nu exista o metoda nextXXX() pentru citirea de caractere. Putem nsa citi o
succesiune de caractere separate prin spatii albe, pna la '$', de exemplu n modul urmator:
Scanner sc = new Scanner(System.in);
char ch = sc.next().charAt(0);
while(ch != '$')

Exemplu complex
import java.util.Scanner;
public class calcul {
public static void main(String[] args) {
//declaratii de variabile locale
double l,L,aria,perimetru;
Scanner intrare;
intrare = new Scanner(System.in);
//afisarea pe ecran a textului lungimea este:
System.out.print("lungimea este ");
//citirea unui numar real de la tastatura
L = intrare.nextFloat();
System.out.print("latimea este: ");

l = intrare.nextFloat();
//formula de calcul a masei ideale
aria=l*L;
perimetru=2*(L+l);
System.out.println("aria este " + aria);
System.out.println("perimetru este " + perimetru);
}
}
Atribuirea de valori variabilelor char:
public class variabile_char {
public static void main (String arg[]) {
char c1='a';
char c2='\u0000';
char c3='\n';
char c4='\t';
System.out.println("c1="+c1+"c2= nimic"+c2+"c3="+c3+"c4="+c4+"c1="+c1);
}
}
Operatorii de comparare pot fi folositi pentru scrierea expresiilor de tip boolean (care au ca
rezulat true sau false)
Exemplu:
//import java.util.Scanner;
public class test_bol {
public static void main(String[] args) {
//declaratii de variabile locale
boolean ras1=1>0, ras2=1==5,ras3=3<=3;
System.out.println("ras1=1>0 " + ras1);
System.out.println("ras2=1==5 " + ras2);
System.out.println("ras3=3<=3 " + ras3);
}
}

ATENTIE! Nu confundati operatorul == (de testare a egalitatii) cu operatorul = (de


comparare). Cei doi nu pot fi inlocuiti unul cu celalalt.
Operatori de comparare:
== testare a egalitatii

!= testare a inegalitatii
< mai mic
> mai mare
<= mai mic sau egal
>= mai mare sau egal
Operatorii logici
|| sau
&& si
! not
Exemplu
public class comparatie {
public static void main(String[] args) {
//declaratii de variabile locale
boolean ras1 = ! (1>0),ras2=(1==5) || (2<5),ras3=(3<=3) && (2>=2);
System.out.println("ras1 " + ras1);
System.out.println("ras2= " + ras2);
System.out.println("ras3= " + ras3);
}
}

Operatorul condiional ?:
Acest operator se utilizeaz n expresii sub forma:

( cond ? e1 : e2 )
public class comparatie_conditional {
public static void main(String[] args) {
//declaratii de variabile locale
int a=6,b=7,max;
max=a>b?a:b;
System.out.println("numarul maxim este " + max);
}
}

Operatorul supraincarcat +:
Operatorul + este considerat un operator supraincarcat. Acesta poate fi folosit pentru a concatena
a doua siruri de caractere.
Exemplu:
public class concatenare {
public static void main(String[] args) {
System.out.println("mesaj 1 " + "ras1");
System.out.println("mesaj 2 "+ 2+2);
System.out.println("mesaj 3 " + (2+2));
System.out.println("mesaj 4 " + (2+2)+true);
System.out.println("mesaj 3 " + (2+2)+false);
}
}

Structuri de control decizionale if si switch


if(conditie){
// set de instructiuni care se executa in cazul in care conditia este adevarata
}
else{
//set de instructiuni care se executa daca conditia este falsa
}
Blocul de instructiuni else poate lipsi daca nu contine instructiuni.
import java.util.Scanner;
public class calcul_if {
public static void main(String[] args) {
//declaratii de variabile locale
double l,L,aria,perimetru;
Scanner intrare;
intrare = new Scanner(System.in);
//afisarea pe ecran a textului lungimea este:
System.out.print("lungimea este ");
//citirea unui numar real de la tastatura

L = intrare.nextFloat();
System.out.print("latimea este: ");
l = intrare.nextFloat();
//formula de calcul a masei ideale
aria=l*L;
perimetru=2*(L+l);
System.out.println("aria este " + aria);
System.out.println("perimetru este " + perimetru);
if(l==L)
System.out.println("ati definit un patrat" );
else
System.out.println("ati definit un dreptunghi" );
}
}
Daca blocul are o singura instructiune atunci acoladele care incadreaza blocul de instructiuni pot
lipsi. Blocul else poate sa lipseasca in intregime:
Exemplu:
import java.util.Scanner;
public class calcul_max {
public static void main(String[] args) {
//declaratii de variabile locale
float n1,n2,n3, maxim;
Scanner intrare;
intrare = new Scanner(System.in);
//nr 1;
System.out.print("numar 1 :");
n1 = intrare.nextFloat();
System.out.print("numar 2 :");
n2 = intrare.nextFloat();
System.out.print("numar 3 ");
n3 = intrare.nextFloat();
maxim=n1;
if(n2>maxim) maxim=n2;
if(n3>maxim) maxim=n3;
//afisare
System.out.println("maxim dintre dintre "+n1+","+n2+","+n3+" este:"+maxim );
}
}

Calcul pentru aria unui triunghi


import java.util.Scanner;
public class tringhi {
public static void main(String[] args) {
double x,y,z,aria,p;
Scanner intrare;
intrare = new Scanner(System.in);
//nr 1;
System.out.print("numar 1 :");
x = intrare.nextDouble();
System.out.print("numar 2 :");
y= intrare.nextDouble();
System.out.print("numar 3 ");
z = intrare.nextDouble();
if (x<=0 || y<=0 || z<=0)
System.out.println("Numerele introduse nu sunt laturi ale unui triunghi");
else

if (x+y<=z || x+z<=y || y+z<=x)


System.out.println("Numerele introduse nu sunt laturi ale unui triunghi");
else
{
p = (x+y+z)/2;
//aria=0;
aria = Math.sqrt(p*(p-x)*(p-y)*(p-z));
System.out.println("Aria triunghiului = " + aria);
}
}
}
Instructiunea switch alege valoarea unei variabile de memorie in functie de valorile
corespunzatoare la case.
Ramura default este optionala si reprezinta setul de instructiuni ce se executa daca valoarea
variabilei testate nu respecta niciunul dintre cazurile analizate.In general dupa fiecare caz trebuie
pusa instructiunea break;
Exemplu:
import java.util.Scanner;
public class var_switch {
public static void main(String[] args) {
//declaratii de variabile locale
int nr_zi;
Scanner intrare;
intrare = new Scanner(System.in);
//nr 1;
System.out.print("definit nunarul zilei valori intre 1-7 :");
nr_zi = intrare.nextInt(); switch(nr_zi)
{
case 1: System.out.println("luni"); break;
case 2: System.out.println("marti"); break;
case 3: System.out.println("miercuri"); break;
case 4: System.out.println("joi"); break;
case 5: System.out.println("vineri"); break;
case 6: System.out.println("sambata"); break;
case 7: System.out.println("duminica");
default :System.out.println("valori intre 1-7!!!eroare");
}} }
Varianta cu string
import java.util.Scanner;
public class var_switch_c {

public static void main(String[] args) {


//declaratii de variabile locale
String nr_zi;
Scanner intrare;
intrare = new Scanner(System.in);
//nr 1;
System.out.print("definit nunarul zilei valori intre 1-7 :");
nr_zi = intrare.nextLine();
switch(nr_zi)
{
case "1": System.out.println("luni"); break;
case "2": System.out.println("marti"); break;
case "3": System.out.println("miercuri"); break;
case "4": System.out.println("joi"); break;
case "5": System.out.println("vineri"); break;
case "6": System.out.println("sambata"); break;
case "7": System.out.println("duminica");
default :System.out.println("valori intre 1-7!!!eroare");
}
} }
Structuri de control repetitive while, do-while si for
while(conditie){
//instructiuni
}
Exemplu:
public class ins_repet {
public static void main (String arg[]) {
int nr=5,suma=0,i=0;
while(i<=nr)
{suma+=i;i++;
}
System.out.println("suma premelor "+nr+" numere este :"+suma);
}
}
Exemplu:
import javax.swing.JOptionPane;
public class Media {
public static void main(String[] args) {
int total;

int contorStudent;
int notaStudent;
double mediaClasa;
String sirNota;
//initializari
total = 0;
contorStudent = 1;
//totalul mediilor individuale
while (contorStudent <= 5) {
sirNota = JOptionPane.showInputDialog("Nota pentru student " + contorStudent);
notaStudent = Integer.parseInt(sirNota);
// sunt scrieri alternative ale instructiunilor
total = total + notaStudent; //total+=notaStudent;
contorStudent= contorStudent +1; //++contorStudent;
}
//calcul medie clasa
mediaClasa = total / 5.;
//afisare rezultat
JOptionPane.showMessageDialog(null, "Media grupei este: " + mediaClasa);
}
}
Structura do-while functioneaza similar cu while. Diferenta este ca do-while este postconditionata. Daca in cazul structurii while se testeaza mai intai conditia iar apoi se executa
instructiunile daca conditia este adevarata, in cazul structurii do-while intai se executa primul set
de instructiuni iar apoi se verifica conditia.
Exemplu:
public class ins_repet {
public static void main (String arg[]) {
int nr=3,suma=0,i=0;
do{
suma+=i;
i++;
}
while (i<=nr);
System.out.println("suma premelor "+nr+" numere este :"+suma);
}
}
Structura for este folosita in general pentru repetari de instructiuni de un numar fix de ori sau
pentru parcurgerea unor intervale de valori.
Exemplu
public class ins_repet {
public static void main (String arg[]) {
int nr=3,suma,i;

//for(;i<=nr;i++) {suma+=i;}
for(i=0,suma=0;i<=nr;i++) {suma+=i;}
System.out.println("suma premelor "+nr+" numere este :"+suma);
}
}
Exemplu cu for
import java.util.*;
public class factorial {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("n: ");
int n = in.nextInt();
long fact = 1;
for(int i = 1; i<=n ; ++i)
fact=fact*i; //sau fact*=i;
System.out.println(n+"! = "+fact);
}
}
ATENTIE:
Observati ca valoarea lui 1000! nu se mai poate reprezenta folosind tipul long. Daca precizia sau
domeniul de valori a tipurilor ntregi sau reale nu sunt suficiente n Java se pot folosi clasele
BigInteger sau BigDecimal din pachetul java.math. Aceste sunt create pentru manipularea unor
valori numerice arbitrar de mari. Aplicatia anterioara a fost rescrisa folosind n locul lui long pe
BigInteger. Aici, crearea unei valori de tipul BigInteger se face cu BigInteger.valueOf(valoare).
Operatorii matematici sunt nlocuiti cu metode, pentru * se va folosi multiply.
import java.math.BigInteger;
import java.util.*;
public class FactorialB {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("n: ");
int n = in.nextInt();
BigInteger fact = BigInteger.valueOf(1);
for(int i=1; i<=n ; ++i)
fact = fact.multiply(BigInteger.valueOf(i)); //fact = fact * i;
System.out.println(n + "! = " + fact);
}
}
Variabile sau Constante

De obicei zonele de memorie pe care le folosim sunt variabile. Exista necesitatea uneori de zone
de memorie carora sa nu li se schimbe valoarea pe parcursul executiei programului. Pentru acest
caz, marcam aceste zone de memorie folosind un cuvant cheie cu valoarea de modificator: final;
Daca o zona de memorie la declarare este final atunci aceasta este constanta si odata atribuita o
valoare acestei zone de memoria, valoarea atribuita nu mai poate fi modificata pe parcursul
executiei programului.
final indica faptul ca valoarea variabilei nu mai poate fi schimbata, cu alte cuvinte este folosit
pentru declararea constantelor.
final double PI = 3.14 ;
Exemplu
public class constante {
public static void main (String arg[]) {
final int a=2,test;
int b=a+10;
test=a;
//test=a+5; eroare
System.out.println("a: "+a+" b: "+b+"si test ="+test);
}
}

Operatori unari
Exemple de operatori unari:
++ de incrementare
-- de decrementare
+= de adunare la
-= de scadere din
*= inmultire cu
/= impartire cu
Pentru operatorii unari avem nevoie de o singura variabila cu care se opereaza. Operatorii de
incrementare/ decrementare pot si postfixati sau prefixati. In cazul in care sunt prefixati (adica
pusi inaintea variabilei cu care se opereaza) atunci au prioritate in fata altor operatii care se
executa, daca sunt postfixati (pusi dupa variabila cu care se opereaza) atunci operatia de
inrementare/decrementare se face dupa o alta operatie.

Exemplu
.
public class operatori_unari {
public static void main (String arg[]) {
int a;
int b;
a=1;
b=5;
a=2 * b++;
System.out.println("a -:"+a+" b :"+b);
}
}

Structuri de control imbricate


Notiunea de structuri de control imbricate reprezinta folosirea structurilor de control ca
instructiuni ale unei alte structuri de control. Orice structura de control este o instructiune si
poate fi, prin urmare, pusa intre acoladele unei alte structuri de control.
Exemplu:
public class str_imbr {
public static void main(String[] args) {
int nr=4;
while(nr>0)
{
if(nr>2) System.out.println("---"+nr);
for(int k=0;k<nr;k++)
System.out.println(k);
System.out.println("--------------");
nr--;
}
}
}

Erori
Intotdeauna exista posibilitatea de a intalni erori in scrierea programelor. In general datorita
neatentiei puteti intampina urmatoarele tipuri de erori:
de sintaxa
de logica
Erorile de sintaxa sunt erori ce apar ca urmare a scrierii unei sintaxe gresite. Nerespectarea
oricarei reguli de sintaxa duce la o eroare de compilare. Practic la intampinarea oricarei erori de
sintaxa programul nu va compila. Mediul de programare indica linia pe care apare eroarea si
rolul programatorului este de a o corecta.
Tablouri
Clasificam tablourile dupa numarul lor de dimensiuni:
unidimensionale - vectori

bidimensionale - matrice
pluridimensionale
Desi un tabloul este un obiect, nu exista o clasa de tipul tablou. Java creeaza automat o clasa
pentru fiecare tablou de tipuri primitive sau de clase. Pentru a aflanumarul de elemente dintrun tablou folosim notatia nume_tablou.length
Pentru a putea utiliza un tablou cu tipul de baza dintre cele primitive trebuie sa:
declaram o variabila de tipul tablou avnd nume_tablou, ce v-a stoca o referinta catre
tablou prin: tip [] nume_tablou; sau tip nume_tablou []; n acest moment nume_tablou se
initializeaza cu valoarea speciala null; aceasta valoare se modifica la adresarea tabloului
dupa utilizarea operatorului new;
cream tabloul folosind operatorul new specificnd lungimea acestuia (numarul maxim de
elemente pe care l poate stoca); lungimea trebuie sa fie o valoare ntreaga de tipul int
(constanta sau expresie care se calculeaza n momentul rularii aplicatiei)
initializam tabloul cu valori diferite de cele cu care acesta se init-ializaeza implicit de
catre Java.

Tablouri unidimensionale:
Fiecare element al acestei structuri este identificat pintr-un index de tip int. Indecsii incep de la
valoarea 0 si sunt crescatori, astfel ca ultimul index al unui tablou va avea intotdeauna valoarea
lungimii tabloului minus unu.
Parcurgerea unui vector se poate face folosind o structura repetitva for, deoarece indecsii se
gasesc intotdeauna intr-un interval continuu de numere.
Cum variabila i ia valori intre 0 si 99 aceasta ia pe rand toate valorile indecsilor. Astfel ca fiecare
variabila a tabloului in cazul de mai sus este instantiata cu exact valoare indexului care o
reprezinta.
Accesul la elementele tablourilor

Exemplu
import java.util.Scanner;
public class tablou{
public static void main(String[] args) {
final int NRELEM = 5; //lungimea tabloului

int [] a; //declararea tabloului


Scanner intrare;
String iesire = "Indice\tValoarea element\n";
System.out.println(iesire);
intrare = new Scanner(System.in);
a = new int[NRELEM]; //crearea tabloului;
//citire elemente tablou
for(int i = 0; i < a.length;++i) {
System.out.print("a[" + i +"] = ");
a[i]= intrare.nextInt();
}
// afisare simpla de elemente tablou
for(int i = 0; i < a.length;++i)
System.out.println(a[i]);
}}
Exemplu operatii cu siruri:

Tablouri bidimensionale:
pot fi considerate vectori de vectori
au doua dimensiuni cu lungime proprie
fiecare dimensiune este indexata incepand cu valoare 0
intervalul indecsilor este intre 0 si lungimea 1
Deoarece o matrice are doua dimensiuni parcurgerea se poate face folosind doua structuri
de control for imbricate.

public class matrice {


public static void main(String args[]){
int [][] m= new int[2][5];//definire matrice
//parcurgere si initializare
for(int i=0;i<m.length;i++)
for(int j=0;j<m[i].length;j++)
m[i][j]=i+j;
//afisare
for(int i=0;i<m.length;i++)
{
for(int j=0;j<m[i].length;j++) System.out.print("m["+i+"]["+j+"]="+i+j+",");
System.out.println("-----");
}
}
}

Enhanced for loop in Java:


As of Java 5, the enhanced for loop was introduced. This is mainly used for Arrays.
Syntax:
The syntax of enhanced for loop is: for(declaration : expression) { //Statements }
Declaration: The newly declared block variable, which is of a type compatible with the
elements of the array you are accessing. The variable will be available within the for block and
its value would be the same as the current array element.
Expression: This evaluates to the array you need to loop through. The expression can be an
array variable or method call that returns an array

public class Test


{ public static void main(String args[]) {
int[] numbers ={10,20,30,40,50};
for(int x : numbers ) { System.out.print(x); System.out.print(","); }
System.out.print("\n");
String[] names ={"Nume 1","Nume 2","Nume 3","Nume 4","Nume 5"};
for(String name : names ) { System.out.print( name +","); }
}}

Exemplu folosind break;

Exemplu folosind continue;

break si continue etichetate


! se utilizeaza n cazul ciclurilor imbricate
! permit saltul n afara ciclului curent
! eticheta este un nume dat instructiunii n care se va realiza saltul
Exemplu:
afara1:
for (j=0; j<=3; ++j) {
afara2:
for (k=0; k<=3; ++k) {
if (j+k <= 1) {
System.out.println(j + " " + k + " > break");
break afara2;
}
if (j+k >= 5) {
System.out.println(j + " " + k +" > continue");
continue afara1;

}
if (k == 0)
continue afara2;
System.out.println(j + " / " + k + " = " + (double)(j/k));
} //for(k= ...
}//for(j=...
Posibilitatea scrierii unor cicluri imbricate pune problema iesirii definitive dintr-o astfel
de situatie sau de continuare a ciclului n care ciclul curent este imbricat. break si
continue pot fi utilizate cu etichete. Acestea pot marca punctele de parasire sau de reluare
la nivelul ciclurilor. n cazul lui break saltul se va face la prima instructiune urmatoare
etichetei. Pentru continue saltul se face la urmatoarea itera-tie a ciclului marcat prin
eticheta. Desi break si continue sunt utile n cazul ciclurilor imbricate, folosirea lor este
de evitat prin regndirea logicii ciclurilor n care participa. Folosirea intensiva a acestora
va conduce la un cod neclar s-i greu de depanat.
http://www.cs.uic.edu/~sloan/CLASSES/java/
Very Simple Java Example Programs
HelloWorld.java
HelloDate.java
FunctionCall.java
Array usage in Java
A tutorial on using arrays in java
ArrayDemo.java
Exception examples in Java
HelloWorldException.java
KeyboardReaderError.java
DivBy0.java

Exceptiile sunt instante (obiecte) ale clasei java.lang.Exception si ale sublcaselor acesteia.
Subclasele clasei Exception pot contine informatii speciale despre un anumit tip de exceptie si un
comportament adecvat. Exceptia cea mai importanta este definita de clasa
java.lang.IOException cu subclase speciale pentru diferite probleme I/O cum ar fi
FileNotFoundException
respectiv
SocketException.

Un obiect Exception este creat de catre cod in momentul cand au aparut conditiile pentru o
eroare. Obiectul de tip exceptie este transmis impreuna cu controlul executiei catre codul de
tratare a exceptiei.
In continuare vom prezenta exceptiile di cadrul pachetului java.lang impreuna cu ierarhia de
clase din care fac parte. In general avem doua tipuri de exceptii si acestea sunt repezentate de
subclasele clasei Throwable Exception si Error.Cele de tip Error si RuntimeException sunt
generate de mediul de executie. Ecxeptiile de tip Error sunt generate de asemenea de catre
mediul de executie, dar acestea nu pot fi prinse de program. De exemplu masina virtuala Java nu
are memorie suficienta.
java.lang.Exception
1. Object
1.1. Throwable
1.1.1. Exception
1.1.1.1. ClassNotFoundException
1.1.1.2. CloneNotSupportedException
1.1.1.3. IllegalAccessException
1.1.1.4. InstantiationException
1.1.1.5. InterruptedException
1.1.1.6. NoSuchMethodException
1.1.1.7. RuntimeException
1.1.1.7.1. ArithmeticException
1.1.1.7.2. ArrayStoreException
1.1.1.7.3. ClassCastException
1.1.1.7.4. IllegalArgumentException
1.1.1.7.4.1. IllegalThreadStateException
1.1.1.7.4.2. NumberFormatException
1.1.1.7.5. IllegalMonitorStateException
1.1.1.7.6. IllegalStateException
1.1.1.7.7. IndexOutOfBoundsException
1.1.1.7.7.1. ArrayIndexOutOfBoundsException
1.1.1.7.7.2. StringIndexOutOfBoundsException
1.1.1.7.8. NegativeArraySizeException
1.1.1.7.9. NullPointerException
1.1.1.7.10. SecurityException
java.lang.Error
1. Object
1.1. Throwable
1.1.1 Error
1.1.1.1. LinkageError
1.1.1.1.1. ClassCircularityError
1.1.1.1.2. ClassFormatError
1.1.1.1.3. ExceptionInitializerError
1.1.1.1.4. IncompatibleClassChangeError
1.1.1.1.4.1. AbstractMethodError
1.1.1.1.4.2. IllegalAccessError
1.1.1.1.4.3. InstantiationError
1.1.1.1.4.4. NoSuchFieldError
1.1.1.1.4.5. NoSuchMethodError
1.1.1.1.5. NoClassDefFoundError
1.1.1.1.6. UnsatisfiedLinkError
1.1.1.1.7. VerifyError
1.1.1.2. ThreadDeath
1.1.1.3. VirtulaMachineError