Documente Academic
Documente Profesional
Documente Cultură
Java POO Curs1
Java POO Curs1
PE
CUPRINS
l l l l l l l l l l l l
INTRODUCERE N LIMBAJUL JAVA PROGRAMARE ORIENTAT# PE OBIECTE CONCEPTE GENERALE PROGRAMARE ORIENTAT# PE OBIECTE N LIMBAJUL JAVA EXCEP(II FLUXURI (INTR#RI-IE&IRI) INTERFE(E CLASE ABSTRACTE CLASE INCLUSE COLEC(II INTERFETE GRAFICE (AWT, SWING) APPLET-uri DESENARE
BIBLIOGRAFIE
l l l l l l
Curs practic de Java, Cristian Fr)sinaru Programare orientat) pe obiecte in Java, Florian Moraru, Carmen Odub) teanu Java de la 0 la Expert, &tefan Tanasa, s.a. Java - o perspectiva pragmatic), Irina Athanasiu, s.a. Java Tutorial, www.java.sun.com/docs/books/tutorial Thinking in Java, Bruce Eckel, www.bruceckel.com
Introducere n Java
l l l l l l l l l l l l l l l l l
Tehnologia Java Primul program Structura lexical) Tipuri de date Variabile Instruc+iuni Ce este un pachet ? Pachetele standard (J2SDK) Importul unei clase sau interfe+e Importul la cerere Importul static Crearea unui pachet Organizarea fi ierelor Vectori &iruri de caractere Argumente de la linia de comand) Arhive JAR
Simplitate U urin+) n crearea de aplica+ii complexe Robuste+e nu exist) pointeri, administrarea automat) a memoriei, GC Complet orientat pe obiecte Securitate Neutralitate arhitectural) Portabililtate Compilat i interpretat Performan+) Modelat dup) C i C++
Aplica+ii complexe, pe mai multe nivele pentru sisteme eterogene, cu baze de date distribuite, etc. Aplica+ii i servicii Web: servleturi, pagini JSP, etc.
Compilat #i interpretat
Limbajele de programare, n func+ie de modul de execu+ie a aplica+iilor: Interpretate + : simplitate, portabilitate - : viteza de execu+ie redus) Compilate + : execu+ia extrem de rapid) - : lipsa portabilit)+ii Java: compilat + interpretat Compilator: surs) - cod de octe+i Interpretor: execut) codul de octe+i Cod octe+i , Cod ma in) Cod ma in) - procesor Cod octe+i - JVM JVM = Java Virtual Machine (mediul de execu+ie al aplica+iilor Java)
Primul program
1. Scriererea codului surs) class FirstApp { public static void main( String args[]) { System.out.println("Hello world!"); } } Definire clas) class numeclasa l Func+ia principal) a unei aplica+ii Java propriu-zise - public static void main( String args[]) l Afi are - System.out.println
Primul program
2. Salvarea fi ierelor surs) C:\intro\FirstApp.java 3. Compilarea aplica+iei javac FirstApp.java va rezulta: FirstApp.class 4. Rularea aplica+iei java FirstApp
l
Se poate folosi un IDE (mediu integrat de dezvoltare) pentru a realiza to+i pa ii anteriori (JCreator, Eclipse, NetBeans, etc.)
Structura lexical&
Setul de caractere: Unicode l nlocuie te ASCII l un caracter se reprezint) pe 2 octe+i l con+ine 65536 de semne l compatibil ASCII : primele 256 caractere sunt cele din ASCII l structurat n blocuri: Basic, Latin, Greek, Arabic, Gothic, Currency, Mathematical, Arrows, Musical, etc. l referire prin cod hexa: \ uxxxx \u03B1 -\u03C9: - l http://www.unicode.org
Cuvinte cheie
l
abstract, double, int, strictfp boolean, else, interface, super break, extends, long, switch byte, final, native, synchronized case, finally, new, this catch, float, package, throw char, for, private, throws class, goto*, protected, transient const*, if, public, try continue, implements, return, void default, import, short, volatile do, instanceof, static, while
Identificatori
l
Sunt secven+e nelimitate de litere i cifre Unicode plus simbolul _, ce ncep cu o liter) sau _. l Identificatorii nu au voie s) fie identici cu cuvintele rezervate. Exemple: a1, FirstApp, factorial, etc.
Conven+ie: l Nume de clasa: prima liter) mare ( Complex) l Nume de metod): prima liter) mic) ( aduna, adunaComplex) l Nume variabil): prima liter) mic) (var1) l Nume constant): prima liter) mare sau tot numele cu litere mari (Pi, PI) Obs: dac identificatorul este format din mai mul#i atomi lexicali, atunci primele litere ale celorlal#i atomi se scriu cu majuscule.
Constante
l
Intregi (10, 16 -0x, 8-0) normali - se reprezint) pe 4 octe+i (32 bi+i) lungi - se reprezint) pe 8 octe+i (64 bi+i) i se termin) cu caracterul L (sau l). Flotan+i: 1.0, 2e2, 3f, 4D s) aib) cel pu+in o zecimal) dup) virgul) s) fie n nota+ie exponen+ial) s) aib) sufixul F sau f pentru valorile normale - reprezentate pe 32 bi+i, respectiv D sau d pentru valorile duble - reprezentate pe 64 bi+i. Logici: true, false
Constante
l
Caracter: J, a, v, a, \n Caracter sau secven+e escape (permit specificarea caracterelor care nu au reprezentare grafic) i reprezentarea unor caractere speciale precum backslash, apostrof, etc.) Secven+ele escape predefinite n Java sunt: \b : Backspace (BS) \t : Tab orizontal (HT) \n : Linie nou) (LF) \f : Pagin) nou) (FF) \r : Inceput de rnd (CR) \" : Ghilimele \ : Apostrof \\ : Backslash
Constante
. &iruri de caractere: Text format din zero sau mai multe caractere ntre ghilimele. Caracterele care formeaz) irul pot fi caractere grafice sau secven+e escape.
l
Separatori: indic) sfr itul unei unit)+i lexicale i nceputul alteia. ()[];,.
Operatori
atribuirea:
= matematici: +, -, *, /, %, ++, -lval op= rval: x += 2 n -= 3 x++, ++x, n--, --n logici: &&(and), ||(or), !(not) rela+ionali: <, <=, >, >=, ==, != pe bi+i: &(and), |(or), ^ (xor),~ (not) de transla+ie: <<, >>, >>> (shift la dreapta f)r) semn) if-else: expresie-logica ? val-true: val-false
Operatori
l
operatorul , (virgul)) folosit pentru evaluarea secven+ial) a opera+iilor: int x=0, y=1, z=2; operatorul + pentru concatenarea irurilor String s1="Ana"; String s2="mere"; int x=10; System.out.println(s1 + " are " + x + " " + s2); operatori pentru conversii (cast) : (tip-de-data) int a = (int)a; char c = (char)96; int i = 200; long l = (long)i; //widening conversion long l2 = (long)200; int i2 = (int)l2; //narrowing conversion
Comentarii
Exist) trei feluri de comentarii:
l
Comentarii pe mai multe linii, nchise ntre /* i */. Comentarii pe mai multe linii care +in de documenta+ie, nchise ntre /** i */. Textul dintre cele dou) secven+e este automat mutat n documenta+ia aplica+iei de c)tre generatorul automat de documenta+ie javadoc. Comentarii pe o singur) linie, care incep cu //.
Tipuri de date
Tipurile primitive: l aritmetice ntregi: byte (1 octet), short(2), int (4), long (8) reale: float (4), double (8) l caracter: char (2) l logic: boolean (true i false) Tipul referin+): l Vectorii, clasele i interfe+ele l Valoarea unei variabile de acest tip este, spre deosebire de tipurile primitive, o referin+) (adres) de memorie) c)tre valoarea sau mul+imea de valori reprezentat) de variabila respectiv).
Nu exist): pointer, struct i union.
Variabile
l
Declararea variabilelor: Tip numeVariabila; Ini+ializarea variabilelor: Tip numeVariabila = valoare; Declararea constantelor: final Tip numeVariabila; final double PI = 3.14; int valoare = 100; long numarElemente = 12345678L; String bauturaMeaPreferata = "apa";
Categorii variabile
a. Variabile membre ale unei clase, declarate n interiorul unei clase, vizibile pentru toate metodele clasei respective ct i pentru alte clase n func+ie de nivelul lor de acces b. Parametrii metodelor, vizibili doar n metoda respectiv) c. Variabile locale, declarate ntr-o metod), vizibile doar n metoda respectiv) d. Variabile locale, declarate ntr-un bloc, vizibile doar n blocul respectiv. e. Parametrii de la tratarea excep+iilor
Categorii variabile
class Exemplu { int a; public void metoda(int b) { a = b; int c = 10; for(int d=0; d < 10; d++) { c --; } try { a = b/c; } catch(ArithmeticException e) { System.err.println(e.getMessage()); } } }
Instruc(iuni
Instruc+iuni de decizie: if-else, switch-case Instruc+iuni de salt: for, while, do-while Instruc+iuni pentru tratarea excep+iilor: try-catch-finally, throw Alte instruc+iuni: break, continue, return, label:
Instruc(iuni de decizie
l
if-else
switch-case
switch (variabila) { case valoare1: ... break; case valoare2: ... break; default: ... }
Instruc(iuni de salt
l
for
for(initializare; expresie-logica; pas-iteratie) { //Corpul buclei } Exemplu: for(int i=0, j=100 ; i < 100 && j > 0; i++, j--) { ...
Alte instruc(iuni
l l
break: p)r)se te for+at corpul unei structuri repetitive. continue: termin) for+at itera+ia curent) a unui ciclu i trece la urm)toarea itera+ie. return [valoare]: termin) o metod) i, eventual, returneaz) o valoare. numeEticheta: define te o etichet). Nu exist) goto Pot fi definite etichete folosite astfel:
l l l
Ce este un pachet ?
Pachet = Colec+ie de clase i interfe+e Scopul: l Organizarea lucrului l G)sirea i utilizarea mai u oar) a claselor l Evitarea conflictelor de nume l Controlul accesului
Importul la cerere
3. importul ntregului pachet import numePachet.*; //Pentru exemplul nostru: import java.awt.*; ... Button b = new Button("OK"); Point p = new Point(0, 0); import java.awt.C*; = eroare Importate automat: pachetul java.lang pachetul curent pachetul implicit (f)r) nume)
Ambiguit&(i
import java.awt.*; // Contine clasa List import java.util.*; // Contine interfata List ... List x; //Declaratie ambigua java.awt.List a = new java.awt.List(); //corect java.util.List b = new ArrayList(); //corect
Importul static
Referirea constantelor statice ale unei clase: import static numePachet.NumeClasa.*;
l
Vectori
Declararea Tip[] numeVector; sau Tip numeVector[]; Instan+ierea numeVector = new Tip[nrElemente]; Ini+ializarea (op+ional) String culori[] ={"Rosu", "Galben"}; v = new int[10]; //aloca spatiu pentru 10 intregi: 40 octeti c = new char[10]; //aloca spatiu pentru 10 caractere: 20 octeti
Vectori
l
Primul indice al unui vector este 0, deci pozi+iile unui vector cu n elemente vor fi cuprinse ntre 0 i n - 1. l Nu sunt permise construc+ii de genul Tip numeVector[nrElemente], alocarea memoriei f)cndu-se doar prin intermediul operatorului new. int v[10]; //ilegal int v[] = new int[10]; //corect
Tablouri multidimensionale
Tablou multidimensional = vector de vectori. Tip mat[][] = new Tip[nrLinii][nrColoane];
l
mat[i] este linia i a matricii i reprezint) un vector cu nrColoane elemente iar mat[i][j] este elementul de pe linia i i coloana j. Dimensiunea unui vector Variabila length: int []a = new int[5]; // a.length are valoarea 5 int m[][] = new int[5][10]; // m[0].length are valoarea 10
Copierea vectorilor
int a[] = {1, 2, 3, 4}; int b[] = new int[4]; // Varianta 1 for(int i=0; i<a.length; i++) b[i] = a[i]; // Varianta 2 System.arrayCopy(a, 0, b, 0, a.length); // Nu are efectul dorit b = a;
)iruri de caractere
l l
char[] String String s = "abc"; String s = new String("abc"); char data[] = {a, b, c}; String s = new String(data); StringBuffer Un ir de caractere constant (nu se doresc schimb)ri n por+iuni din con+inutul s)u pe parcursul execu+iei programului) va fi declarat de tipul String, altfel va fi declarat de tip StringBuffer. StringBuffer pune la dispozi+ie metode pentru modificarea con+inutului irului, cum ar fi: append, insert, delete, reverse.
)iruri de caractere
l l
Uzual, cea mai folosit) modalitate de a lucra cu iruri este prin intermediul clasei String. Clasa StringBuffer va fi utilizat) predominant n aplica+ii dedicate proces)rii textelor cum ar fi editoarele de texte.
)iruri de caractere
l
Concatenarea: + String s1 = "ab" + "cd"; String s2 = s1 + 123 + "xyz" extrem de flexibil, permite concatenarea irurilor cu obiecte de orice tip care au o reprezentare de tip ir de caractere.
Exemple: System.out.print("Vectorul v are" + v.length + "elem."); String x = "a" + 1 + "b; De fapt: String x = new StringBuffer().append("a").append(1). append("b").toString()
l
Obs: irul s=1+2+"a"+1+2 va avea valoarea "3a12", primul + fiind operatorul matematic de adunare iar al doilea +, cel de concatenare a irurilor.
Primirea argumentelor: public static void main (String args[]){ /* args[0] va fi Java args[1] va fi "Hello Duke s.a.m.d. */ } l Num)rul argumentelor: public static void main (String args[]) { int numarArgumente = args.length ; }
l
Exemplu
public class Salut { public static void main (String args[]) { if (args.length == 0) { System.out.println( "Numar insuficient de argumente!"); System.exit(-1); //termina aplicatia } String nume = args[0]; //exista sigur String prenume; if (args.length >= 1) prenume = args[1]; else prenume = ""; //valoare implicita System.out.println("Salut " + nume + " "+ prenume); } }
Afi#area argumentelor
public class Afisare { public static void main (String[] args) { for (int i = 0; i < args.length; i++) System.out.println(args[i]); } }
java Afisare Hello Java Hello Java java Afisare Hello Java Hello Java
Argumente numerice
l l
Argumentele de la linia de comand) sunt siruri de caractere Transformarea ir - num)r se face cu metode de tipul: Integer.parseInt Double.parseDouble Float.parseFloat, etc.
public class Power { public static void main(String args[]) { double numar = Double.parseDouble(args[0]); int putere = Integer.parseInt(args[1]); System.out.println("Rezultat=" + Math.pow(numar, putere)); } }
Adrese utile
www.java.com Toat) lumea www.java.net Comunitate java.sun.com Dezvoltatori jguru.com Cursuri jars.com Resurse javaworld.com, javareport.com Articole javaalmanac.com Exemple de cod google:java
Arhive JAR
Java Archive = arhive ZIP + META-INF Crearea unei arhive: Utilitarul jar Clase suport din java.util.jar Beneficii: compresare portabilitate minimizarea timpului de ncarcare din re+ea securitate - semnare electronic) parte integrata a platformei Java
Crearea unei arhive: jar cf arhiva.jar fi ier(e)-intrare Vizualizare con+inutului: jar tf nume-arhiva Extragerea con+inutului: jar xf arhiva.jar
l l l
Exemple
Exemple: l Arhivarea a dou) fi iere class: jar cf classes.jar A.class B.class l Arhivarea tuturor fi ierelor din directorul curent: jar cvf allfiles.jar * l Crearea unui fisier manifest //manifest.txt Main-Class: Matematica l Crearea arhivei jar cvfm mate.jar manifest.txt geometrie analiza algebra Matematica.class l Executia java -jar mate.jar