34
Curs 2 Clase Java Esentiale Java Deployment Java Applets

Curs 2 - Java (esential)

Embed Size (px)

DESCRIPTION

Subiecte dezbătute în curs:Clase Java EsentialeJava DeploymentJava Applets

Citation preview

Page 1: Curs 2 - Java (esential)

Curs 2

Clase Java Esentiale

Java Deployment

Java Applets

Page 2: Curs 2 - Java (esential)

Clase Java esenţiale

Acestea sunt clasele discutate din platforma Java care sunt esentiale celor mai multi

programatori.

• Exceptiile explica mecanismul exceptiilor si cum este el folosit pentru a manipula erorile si

alte conditii exceptionale. Aceasta lectie descrie ce este o exceptie, cum se “arunca ”(throw)

si “prind”(catch) exceptiile, ce sa se faca cu o exceptie o data ce a fost prinsa, si cum sa se

foloseasca ierarhiile claselor de erori.

• Basic I/O se referă la clasele platformei Java de bază utilizate pentru intrare şi ieşire. Se • Basic I/O se referă la clasele platformei Java de bază utilizate pentru intrare şi ieşire. Se

concentreaza in principal pe I/O Streams, un concept puternic care simplifica foarte mult

operatiile de I/O(input/output). Lecta de asemenea se orienteaza spre Serializare, care

permite unui program sa scrie obiecte intregi spre fluxuri si sa le citeasca iar. Apoi lectia

abordeaza operatii cu sistemele de fisiere, inclusiv fisierele cu acces aleator. In final, atinge

scurt caracteristicile avansate ale noului I/O API.

• Concurenta explica cum sa se scrie aplicatii care indeplinesc mai multe sarcini simultan.

Platforma Java este proiectata de jos in sus pentru a sprijini programarea concurenta, cu

suportul de baza pentru programarea concurenta in limbajul de programare java si

bibliotecile de clase java. Inca din versiunea 5.0, platforma java a inclus de API-uri pentru

concurenta la nivel inal. Aceasta lectie introduce suportul pentru concurenta de baza si

rezuma unele dintre API-urile de niveli inalt din pachetele java.util.concurrent .

Page 3: Curs 2 - Java (esential)

Clase Java esentiale

• Platforma de mediu este definita de sistemul de operare de baza, masina

virtuala Java, bibliotecile de clase, si diverse date de configurare furnizate

cand aplicatia este lansata. Aceasta lectie descrie unele API-uri pe care o

aplicatie le foloseste pentru a analiza si configura platforma ei de mediu.

• Expresii uzuale sunt un mod de a descrie un set de siruri de caractere pe

baza caracteristicilor comune împărtăşite de către fiecare şir din set. Ele baza caracteristicilor comune împărtăşite de către fiecare şir din set. Ele

pot fi folosite pentru a cauta, a edita, sau manipula text si date. Expresiile

uzuale variaza in complexitate,dar odata intelese elementele de baza

despre cum sunt construite, se vor putea descifra (sau crea) orice expresii

uzuale. Aceasta lectie ne invata sintaxa expresiilor unzuale permisa de

java.util.regex API, si prezinta mai multe exemple de lucru pentru a ilustra

cum interactioneaza obiecte diferite.

Page 4: Curs 2 - Java (esential)

Exceptiile

• Termenul exceptie este prescurtarea pentru fraza “eveniment exceptional."

• Definitie: O exceptie este un eveniment, care apare in

timpul executiei unui program si care perturba fluxul normal de

Instructiuni din program.

• Atunci cand apare o eroare intr-o metoda, metoda creaza

un obiect si il transmite sistemului in timpul rularii.

Obiectul, numit obiect exceptie, contine informatii despre Obiectul, numit obiect exceptie, contine informatii despre

eroare, incluzand tipul sau si starea programului cand eroarea

a aparut. Creand un obiect exceptie si manipulandu-l in timpul

executiei se numeste “aruncarea unei exceptii” (throwing

an exception).

• Dupa ce o metoda “arunca”(trimite) o exceptie, sistemul incearca sa gaseasca ceva ca sa se ocupe de ea. Setul de posibile “ceva-uri" pentru a manipula exceptia este o lista ordonata de metode care au fost apelate pentru a ajunge acolo unde a aparut eroarea. Lista de metode este cunoscuta ca “the call stack-stiva de apeluri”(vezi figura alaturata).

Call Stack

Page 5: Curs 2 - Java (esential)

Exceptiile (cont.)

• Sistemul cauta in stiva de apeluri pentru o metoda care contine un bloc de cod care se poate ocupa de eroare.

Acest bloc de cod se numeste exception handler.

Cautarea incepe cu metoda in care eroarea a

aparut si continua in stiva de apel in ordinea

inversa fata de cea in care metodele au fost

apelate. Atunci cand un handler adecvat este gasit, apelate. Atunci cand un handler adecvat este gasit,

sistemul transmite exceptia handler-ului

O exceptie este considerata adecvata daca tipul

obiectului exceptie “aruncat”(transmis) se potriveste tipului care poate fi tratat de handler.

• Handler-ul de exceptie ales se spune ca “prinde”(catch) exceptia. Daca sistemul termina de cautat toate metodele din stiva de apeluri fara a gasi un handler corespunzator, asa cum se arata in figura alaturata, sistemul (si, in consecinta, programul) inceteaza.

Page 6: Curs 2 - Java (esential)

Exceptions (cont.)import java.io.*;

import java.util.Vector;

public class ListOfNumbers {

private Vector vector;

private static final int SIZE = 10;

public ListOfNumbers () {

vector = new Vector(SIZE);

for (int i = 0; i < SIZE; i++){

vector.addElement(new Integer(i));

}

Prima linie colorata rosu este un apel de constructor.

Constructorul initializeaza un flux de ieseire intr-un

fisier. Daca fisierul nu poate fi deschis, constructorul

“arunca”(throws) o IOException.

Al doilea cod rosu este un apel la metoda din clasa

Vector elementAt, care trimite un

ArrayIndexOutOfBoundsException daca valoarea

argumentului sau este prea mica (mai mica decat 0)

sau prea mare (mai mare decat numarul de elemente }

}

public void writeList() {

PrintWriter out = new PrintWriter(

new FileWriter("OutFile.txt"));

for (int i = 0; i < SIZE; i++) {

out.println("Value at: " + i + " = " +

vector.elementAt(i));

}

out.close();

}

}

sau prea mare (mai mare decat numarul de elemente

continute de Vector).

Daca incercati sa compilati codul, compilatorul afisaza

un mesaj de eroare despre exceptia transmisa de

constructorul FileWriter. Oricumnu afisaza un mesaj

de eroare despre exceptia trimisa de elementAt.

Motivul este ca exceptia trimisa de constructor,

IOException, este o exceptie verificata, iar cea

transmisa de elementAt este o metoda,

ArrayIndexOutOfBoundsException, care reprezinta o

exceptie neverificata.

Page 7: Curs 2 - Java (esential)

Exceptions (cont.)try {

System.out.println("Entered try statement");

out = new PrintWriter(new FileWriter("OutFile.txt"));

for (int i = 0; i < SIZE; i++) {

out.println("Value at: " + i + " = " + vector.elementAt(i));

}

}

catch (FileNotFoundException e) {

System.err.println("FileNotFoundException: " +

e.getMessage());

Daca o exceptie apare in blocul try , acea

exceptie este manipulata de un handler de

exceptii cu care este asociat. Pentru a asocia

un handler de exceptii cu un bloc try, trebuie

adaugat un bloc catch dupa el;

Ambele handlere afisaza un mesaj de eroare.

Al doilea handler nu face nimic altceva. Prin

prinderea oricarei IOException care nu a fost

prinsa de primul handler, permite e.getMessage());

throw new SampleException(e);

}

catch (IOException e) {

System.err.println("Caught IOException: " + e.getMessage());

}

finally {

if (out != null) {

System.out.println("Closing PrintWriter");

out.close();

} else {

System.out.println("PrintWriter not open");

}

}

prinsa de primul handler, permite

programului sa isi continue executia.

Blocul finally se executa intotdeauna cand

blocul try exista. Aceasta asigura ca blocul

final este executat chiar daca apare o exceptie

neasteptata. Dar blocul finally este folositor

pentru mai mult decat tratarea exceptiilor —

el permite programatorului ca un cod bun sa

nu intre pe o ramura de return, continue, sau

break. Punerea unui cod curat in blocul finally

este intotdeauna o actiune buna, chiar si

atunci cand nu sunt anticipate exceptii.

Page 8: Curs 2 - Java (esential)

Exceptii (cont.)

Specificarea exceptiei transmise de o metoda– Exsita posibilitatea sa nu fie prinsa exceptia si se permite unei

metode sa caute in continuare in stiva de apeluri pentru a o putea trata.

– Daca metoda nu prinde exceptiile verificate care pot aparea cu ea, metoda trebuie sa specifice ca poate stransmite aceste exceptii. exceptii.

public void writeList() throws IOException{

PrintWriter out = new PrintWriter(new FileWriter("OutFile.txt"));

for (int i = 0; i < SIZE; i++) {

out.println("Value at: " + i + " = " + vector.elementAt(i));

} out.close();

}

Page 9: Curs 2 - Java (esential)

Exceptii (cont.)

• Avantajele Exceptiilor

– Avantajul 1: Separa codul pentru trataea erorilor de codul

“Obijnuit"readFile {

deschide fisierul;

determina marimea sa;

La prima privire, aceasta functie pare sa fie destul de simpla,

dar ignora urmatoarele potentiale erori.

* Ce de intampla daca fisierul nu poate fi deschis?

– Avantajul 2: Propagarea erorilor in sus in stiva de apeluri

– Avantajul 3: Gruparea si diferentierea tipurilor de erori

determina marimea sa;

aloca memorie;

citeste fisierul in memorie;

inchide fisierul;

}

* Ce de intampla daca fisierul nu poate fi deschis?

* Ce se intampla daca dimensiunea fisierului nu poate fi

determinata?

* Ce se intampla daca nu poate fi alocata destula memorie?

* Ce se intampla daca citirea este nereusita?

* Ce se intampla daca fisierul nu poate fi inchis?

Page 10: Curs 2 - Java (esential)

I/O de baza in Java• Fluxuri de I/O

Fluxuri de octeti trateaza I/O siruri de date binare.

Fluxuri de caractere trateaza I/O de date tip caracter, tratand automat tranzlatia spre si de la un set de caractere.

Fluxuri tampon optimizeaza intrarea si iesirea prin reducerea numarului de apeluri la API-ul nativ.

Scanarea si formatarea permite unui program sa citeasca text formatat.

I/O De la linia de comanda descrie fluxurile standard siobiectele Consola.

Fluxuri de date trateaza binar I/O unui tip de date primitiv

Stergerea unui fisier sau direcor.

Copierea unui fisier sau director.

Mutarea unui fisier sau director.

Gestionarea Metadata explica cum se citesc si seteaza atributele unui fisier.

Citirea, Scrierea si Crearea fisierelor arata fluxul si metodele canalului pentru citirea si scrierea fisierelor.

Fisiere in acces aleator arata cum sa se scrie sau citeasca fisiere intr-o maniera non-secventionala.

Crearea si citirea directoarelor acopera API-ul specific pentru directoare, cum ar fi sa afiseze continutul unui director. Fluxuri de date trateaza binar I/O unui tip de date primitiv

si valori “String”.

Fluxuri de obiecte trateaza binar I/O obiectelor.

• Fisiere I/O

Ce este o cale(path)? Analizeaza conceptul de cale pe un sistem de fisiere.

Clasa Path introduce clasele de baza din pachetul java.nio.file.

Operatii pe cai(Path) priveste metodele din clasa Path se ocupa de operatiile sintactice.

Operatiile pe fisiere introduce concepte comune multor metode pentru I/O.

Verificarea unui fisier sau director arata cum se verifica existenta unui fisier si nivelul lui de accesibilitate.

director.

Link-uri, Symboluri sau Altfel acopera problemele specifice pentru simboluri si legaturi puternice.

Parcurgerea arborilor de fisiere demonstreaza cum se pot vizita recursiv fiecare fisier si director din arborele de fisiere.

Gasirea fisierelor arata cum se cauta dupa fisiere folosindun model de potrivire.

Urmarirea unui director pentru schimbari arata cum se foloseste un serviciu de supraveghere pentru a detecta fisiere care au fost adaugate, sterse sau actualizate in unul sau mai multe directoare.

Alte metode folositoare Acopera un API important care nu se potriveste in alta parte in lectie.

Mostenirea fisierelor I/O Code arata cum sa impulsionezecai functionale daca aveti cod mai vechi care foloseste java.io.File class. O tabela de mapare java.io.File API spre java.nio.file API is provided.

Page 11: Curs 2 - Java (esential)

Fluxuri I/O

input stream

output stream

Page 12: Curs 2 - Java (esential)

Fluxuri de octeti

• Programele folosesc fluxurile de date pentru intrarea si iesirea octetilor. Toate clasele fluxurilor de octeti provin din InputStream si OutputStream.

• Exista multe clase pentru fluxurile de octeti. Pentru a demonstra cum functioneaza fluxurile de octeti ne vom concentra pe fisierele I/O de tip fluxuri de octeti, FileInputStream si FileOutputStream. Alte tipuri de fluxuri de octeti sunt folosite mult in aceeasi maniera; ele difera in principal prin felul cum sunt construite.

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

public class CopyBytes {

public static void main(String[] args) throws IOException { public static void main(String[] args) throws IOException {

FileInputStream in = null;

FileOutputStream out = null;

try {

in = new FileInputStream("xanadu.txt");

out = new FileOutputStream("outagain.txt");

int c;

while ((c = in.read()) != -1) {

out.write(c);

}

} finally {

if (in != null) { in.close(); }

if (out != null) { out.close(); }

} } }

Intotdeauna se inchid fluxurile

Page 13: Curs 2 - Java (esential)

Fluxuri de caractere

• Toate clasele pentru fluxuri de caractere provin de la Reader si Writer. La fel ca si cu fluxurile de octeti, exista clase specializare pe fluxurile de caractere in fisierul I/O: FileReader si FileWriter. Excemplul CopyCharacters ilustreaza aceste clase.

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

public class CopyCharacters {

public static void main(String[] args) throws IOException {

FileReader inputStream = null;

FileWriter outputStream = null; FileWriter outputStream = null;

try {

inputStream = new FileReader("xanadu.txt");

outputStream = new FileWriter("characteroutput.txt");

int c;

while ((c = inputStream.read()) != -1) {

outputStream.write(c);

}

} finally {

if (inputStream != null) { inputStream.close(); }

if (outputStream != null) { outputStream.close();

} } } }

Page 14: Curs 2 - Java (esential)

Fluxuri tampon

• Cele mai multe exemple pe care le-am vazut pana acum folosesc I/O netamponate (unbuffered I/O). Aceasta inseamna ca orice cerere de citire sau scriere este tratata direct baza sistemului de operare(OS). Aceasta poate face un program cu mult mai putin eficient, deoarece fiecare astfel de cerere necesita adesea acces la disc, activitate de retea, sau alte operatii care sunt relativ consumatoare de resurse.

• Pentru a reduce acest tip de depasire, platforma Java implementeaza • Pentru a reduce acest tip de depasire, platforma Java implementeaza fluxuri tampon pentru I/O. Fluxurile tampon de intrare citesc date de la o zona de memorie cunoscuta ca buffer(tampon); API-ul de intrare este apelat doar atunci cand buffer-ul este gol. Similar, fluxurile de iesire cu tampon scriu datele intr-un buffer, si API-ul pentru iesire este apelat cand buffer-ul de iesire este plin.

inputStream = new BufferedReader(new FileReader("xanadu.txt"));

outputStream = new BufferedWriter(new FileWriter("characteroutput.txt"));

Page 15: Curs 2 - Java (esential)

I/O din linia de comanda

• Fluxuri standard– Platforma java suporta 3 fluxuri standard:

• Standard Input, accesate prin intermediul System.in;

• Standard Output, accesate prin intermediul System.out;

• si Standard Error, accesate prin intermediul System.err.

• Consola• Consola• Este o alternativa mai avansata pentru Fluxurile Standard

• Obiectul consola este preluat prin invocarea System.console()

• daca System.console retuneaza NULL, atunci operatiile pe consola nu sunt permise, fie pentru ca sisttemul de operare(OS) nu ofera suport pentru ele sau pentru ca programul a fost lansat intr-un mediu neinteractiv.

• Exemplu de utilizare:– c.readLine("Enter your login: ");//returns a String object

– c.readPassword("Enter your old password: ");//returns a character array

Page 16: Curs 2 - Java (esential)

Fisiere I/O

Operatiile Path- Clasele Path includ o varietate de metode care pot fi folosite pentru a obtine informatii despre cale(path), elemente de acces ale caii(path), convertirea caii(path) in alte forme, sau pentru a extrage portiuni ale unei cai(path).

– Crearea unei cai(path)

Path p1 = Paths.get("/tmp/foo"); //Solaris syntax

Path p2 = Paths.get(args[0]);

Path path = Paths.get("C:\\home\\joe\\foo"); // Microsoft Windows syntax

– Obtinerea informatiilor despre o cale(path)– Obtinerea informatiilor despre o cale(path)

System.out.format("toString: %s%n", path.toString());

System.out.format("getName: %s%n", path.getName());

System.out.format("getName(0): %s%n", path.getName(0));

System.out.format("getNameCount: %d%n", path.getNameCount());

System.out.format("subpath(0,2): %d%n", path.subpath(0,2));

System.out.format("getParent: %s%n", path.getParent());

System.out.format("getRoot: %s%n", path.getRoot());

System.out.format("isHidden: %s%n", path.isHidden());

Page 17: Curs 2 - Java (esential)

Fisiere I/O

• Operatii pe fisiere– Prinderea(catch) Exceptiilor

Toate metodele care acceseaza un sistem de fisiere pot trimite(throw) o IOException. In completarea IOException, multe exceptii specifice extindFileSystemException. Aceasta clasa are cateva metode folositoare care returneaza fisierul implicat (getFile), sirul de mesaje detaliat (getMessage), motivul pentru care operarea sistemului de fisiere nu a functionat (getReason), si alte fisiere implicate, daca oricare (getOtherFile). (getReason), si alte fisiere implicate, daca oricare (getOtherFile).

– Operatii atomice

Multe metode Path, cum ar fi moveTo, pot efectua anumite operatii atomice in unele sisteme de fisiere.

O operatie atomica pe fisiere este o operatie care nu poate fi intrerupta sau "partial" efectuata. Fie operatia este realizata sau nu reuseste. Aceasta este importanta cand avem mai multe procese care ruleaza in aceeasi zona a sistemului de fisiere, si trebuie sa se poata garanta ca fiecare proces acceseaza un fisier complet.

Page 18: Curs 2 - Java (esential)

Fisiere I/O

Verificarea unu Fisier sau Director– Verificarea accesibilitatii unui fisier

Aveti o cale(Path) reprezentand un fisier sau director,dar acel fisier exista in sistemul de fisiere? Este citibil? Inscriptibil? Executabil?

Pentru a verifica daca un fisier exista si daca programul il poate accesa cand este nevoie, puteti folosi metoda checkAccess(AccessMode...). Argumentul varargs poate fi orice combinatie dintre aceste optiuni ale AccessMode:

– READ – Verifica daca fisierul exista si daca programul are permisiunea sa citeasca din fisier. Pe sistemele UNIX, aceasta opriune testeaza bitul Read al “file owner”.sistemele UNIX, aceasta opriune testeaza bitul Read al “file owner”.

– WRITE –Verifica daca fisierul exista si daca programul are permisiunea sa scrie in fisier. Pe sistemele UNIX, aceasta opriune testeaza bitul WRITE al “file owner”.

– EXECUTE Verifica daca fisierul exista si daca programul are permisiunea sa execute fisierul.Pentru directoarele din sistemele de fisiere de pe UNIX, bitul de executie trebuie setat in asa fel incat sa se poata accessa fisierele si subdirectoarele Pe sistemele UNIX, aceasta opriune testeaza bitul Execute al “file owner”.

– Verificarea daca 2 cai localizeaza acelasi fisierPath p1 = ...;

Path p2 = ...;

try {

if (p1.isSameFile(p2)) {

//Logic when the paths locate the same file

}

} catch (IOException x) { //Logic for error condition... return; }

Page 19: Curs 2 - Java (esential)

Fisiere I/O

Stergerea unui fisier sau director

Se pot sterge fisiere, directoare sau legaturi(link). Prin legaturile simbolice, legatura este stearsadar nu si tinta acesteia. La directoare, directoarele trebuie sa fie goale, altfel stergerea nureuseste. Clasa Path ne ofera 2 metode de stergere.

Metoda delete stergere fisierul sau trimite(throw) o exceptie daca stergerea nu reuseste. Spre exemplu, daca fisierul nu exista este trimisa o exceptie NoSuchFileException. Se poate prinde(catch) exceptia pentru a afla de ce stergerea nu a reusit dupa cum urmeaza:

try { try {

path.delete();

} catch (NoSuchFileException x) {

System.err.format("%s: no such file or directory%n", path);

} catch (DirectoryNotEmptyException x) {

System.err.format("%s not empty%n", path);

} catch (IOException x) {

//File permission problems are caught here. System.err.println(x);

}

Metoda deleteIfExists de asemenea stergere un fisierdar daca fisierul nu exista, nu este aruncata(thrown) nici o exceptie. Esecul discret este folositor cand aveti mai multe fire(threads) si nu doriti sa trimiteti(throw) o exceptie doar pentru ca unul nu a reusit.

Page 20: Curs 2 - Java (esential)

Fisiere I/O

Copierea unui fisier sau director

Puteti copia un fisier sau director folosind metoda copyTo. Copierea nu reuseste daca fisierul tinta exista, exceptand cazul cand optiunea REPLACE_EXISTING este specificata.

Directoarele pot fi copiate. Oricum,fisierele din director nu sunt copiate, deci noul director este gol chiar si cand directorul original contine fisiere.

Mai jos se poate vedea cum se foloseste metoda copyTo:

import static java.nio.file.StandardCopyOption.*;

...

try {

path.copyTo(newPath, REPLACE_EXISTING, COPY_ATTRIBUTES);

} catch (IOException x) {

//Logic for error condition... System.err.println(x);

return;

}

Page 21: Curs 2 - Java (esential)

Fisiere I/O

Mutarea unui fisier sau director

Se poate muta un fisier sau director folosind metoda moveTo. Mutarea nu reuseste daca fisierul tinta exista, , exceptand cazul cand optiunea REPLACE_EXISTING File or Directory este specificata.*

Urmatorul exemplu arata cum sa se foloseasca metoda moveTo :

import static java.nio.file.StandardCopyOption.*;

...

try {

path.moveTo(newPath, REPLACE_EXISTING);

} catch (IOException x) {

// Logic for error condition... System.err.println(x);

return;

}

Creating FilesCreating Files

Path file = ...;

try {

file.createFile(); //Create the empty file with default permissions, etc.

} catch (FileAlreadyExists x) {

System.err.format("file named %s already exists%n", file);

} catch (IOException x) {

//Some other sort of failure, such as permissions.

System.err.format("createFile error: %s%n", x);

}

* Original era REPLACE_EXISTING option is specified. e or Directory

Page 22: Curs 2 - Java (esential)

Fisiere I/O

• Crearea unui director

• Puteti crea un director nou folosind metoda createDirectory(FileAttribute<?>). Daca nu se specifica nici un argumentnoul director va avea atributele default. Spre exemplu:

Path dir = ...;

try {

path.createDirectory();

} catch (IOException x) {

System.err.println(x);

} }

• Pentru a crea un director pe mai multe nivele de adancime cand unul din directoarele parinte este posibil sa nu existe, puteti utiliza metoda “de confort”, createDirectories(Path, FileAttributes<?>), in clasa Files. Asa cum cu metoda createDiretory(FileAttribute<?>), Se poate specifica inintial un set optional de atribute. Fragmentul de cod urmator foloseste atributele prestabilite(default):

try {

Files.createDirectories(Paths.get("foo/bar/test"));

} catch (IOException x) {

System.err.println(x);

}

Page 23: Curs 2 - Java (esential)

Concurenta: Procese si Fire

• In programarea concurenta, exista doua unitati de baza de executie: procese and fire.

• Procese

Un proces are un mediu de executie auto-continut. Un proces in genreral are un set complet si privat de resurse de executie; in particular, fiecare proces are proces in genreral are un set complet si privat de resurse de executie; in particular, fiecare proces are spatiul sau de memorie.

• Fire (Thread)

Firele sunt uneori numite procese (usoare)lightweight. Procesele si firele ofera un mediu de executie, dar crearea unui fir necesita mai putine resurse decat crearea unui proces.

Page 24: Curs 2 - Java (esential)

Obiectele Thread

• Ofera un obiect Runnable. Interfata Runnable

defineste o singura metoda, run, menita sa contina

codul executat in thread.

• Subclasa Thread. Clasa Thread implementeaza

Runnable, desi metoda run nu face nimic.

Fiecare thread(fir) este asociat cu o instanta a clasei Thread. Exista doua strategii

de baza pentru a folosi obiectele Thread in scopul crearii unei aplicatii

concurente.

public class HelloRunnable implements Runnable {

public void run() {

System.out.println("Hello from a thread!");

}

public static void main(String args[]) {

(new Thread(new

HelloRunnable())).start();

}

}

public class HelloThread extends Thread {

public void run() {

System.out.println("Hello from a thread!");

}

public static void main(String args[]) {

(new HelloThread()).start();

}

}

Page 25: Curs 2 - Java (esential)

Mediul platforma

• O aplicatie ruleaza intr-un mediu platforma, definit de sistemul de oprare,Java virtual machine, bibliotecile de clase, si diverse date de configurare atunci cand cererea este lansata.

• Configuration Utilities descriu API-urile folosite pentru a accesa datele de configurare necesare atunci cand a accesa datele de configurare necesare atunci cand aplicatia este rulata,sau de utilizatorul aplicatiei.

• System Utilities descrie diverse API-uri definite in System si clasele Runtime.

• PATH and CLASSPATH descrie variabilele de mediu folosite pentru a configura instrumentele de dezvoltareJDK si alte aplicatii.

Page 26: Curs 2 - Java (esential)

Proprietati

• Proprietatiile sunt valori de configurare gestionate ca perechi key/value. In fiecare pereche, atat key cat si value sunt de tip String. Key identifica, si este utilizata pentru regasire,valoarea(value), mai mult ca nume de variabila este folosita pentru a prelua valoarea variabilei.

• Spre exemplu, o aplicatie capabila sa descarce fisiere poate folosi proprietatea numita "download.lastDirectory“ pentru a pastra urma ultimului director in care a fost facut download. Pentru a gestiona proprietatile,creati o instanta a java.util.Properties. proprietatile,creati o instanta a java.util.Properties.

• Aceasta clasa ofera metode pentru urmatoarele: – Incarcarea unei perechi key/value intr-un obiect Properties dintr-un flux,

– Regasirea unei “value” din “key” aferenta,

– Afisarea cheilor(key) si valorile(value) lor,

– Enumerarea peste key, si *

– Salvarea prorietatilor intr-un sir.

Page 27: Curs 2 - Java (esential)

Proprietati

• Configurarea obiectului Properties

Urmatorul cod Java efectueaza primii 2 pasi descrisi in sectiunea anterioara: incarcarea proprietatilor implicite si incarcarea proprietatilor amintite:

. . . // crearea si incarcarea proprietatilor implicite(default)

Properties defaultProps = new Properties();

FileInputStream in = new FileInputStream("defaultProperties"); FileInputStream in = new FileInputStream("defaultProperties"); defaultProps.load(in);

in.close();

// crearea proprietatilor unei aplicatii cu default

Properties applicationProps = new Properties(defaultProps);

// acum incarcam proprietatile de la ultima invocare

in = new FileInputStream("appProperties");

applicationProps.load(in);

in.close();

Page 28: Curs 2 - Java (esential)

Proprietati

• Obtinerea informatiilor despre proprietate

• In momentul in care aplicatia a creat obiectul Properties, aplicatia poate interoga obiectul pentru informatii despre diverse keys si valori (values) pe care le contine. O aplicatie primeste informatii de la un obiect Properties dupa ce a pornit deci se initializeaza pe baza alegerilor facute de utilizator.

• Clasa Properties are mai multe metode pentru a primi informatii despre proprietati: – contains(Object value)– contains(Object value)

– containsKey(Object key) • Retuneaza true(adevarat) daca valoarea sau cheia sunt obiecte Properties. Properties

mosteneste aceste metode de la Hashtable. Astfel ele accepta argumentele obiectului dar numai valorile String ar trebui folosite.

– getProperty(String key)getProperty(String key, String default)

• Returneaza valoarea pentru proprietatea specificata. A doua versiune prevede o valoare implicita. Daca key nu este gasita, este returnata valoarea default(implicita).

– setProperty(String key, String value) • Pune perechea key/value in obiectul Properties.

Page 29: Curs 2 - Java (esential)

Proprietatile sistemului

• Platforma Java foloseste un obiect Properties pentru a mentine

configuratia proprie

Properties p = new Properties(System.getProperties());

Page 30: Curs 2 - Java (esential)

PATH si CLASSPATH

Puteti rula aplicatii Java bine fara a seta variabila PATH .

C:\Program Files\Java\jdk1.6.0\bin\javac MyClass.java

Variabila CLASSPATH este un fel de a spune aplicatiei, incluzand JDK tools, unde sa caute pentru clasele de utilizatori.

Page 31: Curs 2 - Java (esential)

Java Applets

• Un applet este un anumite fel de program Java

pe care un browser dotat cu tehnologie Java il

poate descarca de pe internet si rula.

• Un applet este de obicei incorporat intr-o • Un applet este de obicei incorporat intr-o

pagina web si ruleaza in interiorul unui

browser.

• Un applet trebuie sa fie o subclasa a clasei

java.applet.Applet.

Page 32: Curs 2 - Java (esential)

Java Applets

import javax.swing.JApplet;

import javax.swing.SwingUtilities;

import javax.swing.JLabel;

public class HelloWorld extends JApplet {

//Apelat cand acest applet is este incarcat in browser.

public void init() {

//Executa o sarcina pe firul event-dispatching; creand acestui applet GUI.

try {

SwingUtilities.invokeAndWait(new Runnable() {SwingUtilities.invokeAndWait(new Runnable() {

public void run() {

JLabel lbl = new JLabel("Hello World");

add(lbl);

}

});

} catch (Exception e) {

System.err.println("createGUI didn't complete successfully");

}

}

}

Page 33: Curs 2 - Java (esential)

Java Applets

• init Method

Metoda init este folositoare pentru o singura initializare care nu va dura foarte mult. Metoda init contine de obicei codul care in mod normal ar fi pus in contructor. Motivul pentru care applet-urile nu au de obicei contructori este ca ele nu au un mediu full garantat pana cand nu este apelata metoda init. Tineti metoda init scurta, astfel incat applet-ul sa se poata incarca rapid.

• start Method

Fiecare applet care efectueaza sarcini dupa initializare(exceptand raspunsul direct la actiunile utilizatorului) trebuie sa suprascrie metoda start. Metoda start incepe executia applet-ului. Este indicat sa ne intoarcem rapid din metoda start. Daca aveti nevoie sa efectuati operatiuni de calcul intensiv ar fi bine sa porniti un nou fir(thread) pentru acest scop. intensiv ar fi bine sa porniti un nou fir(thread) pentru acest scop.

• stop Method

Cele mai multe applet-uri care suprascriu metoda start ar trebui de asemenea sa suprascrie si metoda stop. Metoda stop ar trebui sa opreasca executia applet-ului, pentru a nu lua din resursele sistemului cand utilizatorul nu vizioneaza pagina applet-ului. Spre exemplu, un applet care afisaza o animatie ar trebui sa se opreasca din incercarea de a desena animatia cand utilizatorul nu o vizioneaza.

• destroy Method

Multe applet-uri nu trebuie sa suprascrie metoda destroy deoarece metoda lor stop (care este apelata inainte de destroy) va face toate sarcinile necesare pentru a opri executia applet-ului. Oricum, metoda destroy este disponibila pentru applet-uri care trebuie sa elibereze resurse suplimentare.

Page 34: Curs 2 - Java (esential)

Java Applets