Professional Documents
Culture Documents
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 EXCEPII FLUXURI (INTRRI-IEIRI) INTERFEE CLASE ABSTRACTE CLASE INCLUSE COLECII INTERFETE GRAFICE (AWT, SWING) APPLET-uri DESENARE
BIBLIOGRAFIE
l l l l l l
Curs practic de Java, Cristian Frsinaru Programare orientat pe obiecte in Java, Florian Moraru, Carmen Odubteanu 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 Instruciuni Ce este un pachet ? Pachetele standard (J2SDK) Importul unei clase sau interfee Importul la cerere Importul static Crearea unui pachet Organizarea fiierelor Vectori iruri de caractere Argumente de la linia de comand Arhive JAR
Simplitate Uurin n crearea de aplicaii complexe Robustee 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++
Aplicaii complexe, pe mai multe nivele pentru sisteme eterogene, cu baze de date distribuite, etc. Aplicaii i servicii Web: servleturi, pagini JSP, etc.
Compilat i interpretat
Limbajele de programare, n funcie de modul de execuie a aplicaiilor: Interpretate + : simplitate, portabilitate - : viteza de execuie redus Compilate + : execuia extrem de rapid - : lipsa portabilitii Java: compilat + interpretat Compilator: surs - cod de octei Interpretor: execut codul de octei Cod octei Cod main Cod main - procesor Cod octei - JVM JVM = Java Virtual Machine (mediul de execuie al aplicaiilor 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 Funcia principal a unei aplicaii Java propriu-zise - public static void main( String args[]) l Afiare - System.out.println
Primul program
2. Salvarea fiierelor surs C:\intro\FirstApp.java 3. Compilarea aplicaiei javac FirstApp.java va rezulta: FirstApp.class 4. Rularea aplicaiei java FirstApp
l
Se poate folosi un IDE (mediu integrat de dezvoltare) pentru a realiza toi paii anteriori (JCreator, Eclipse, NetBeans, etc.)
Structura lexical
Setul de caractere: Unicode l nlocuiete ASCII l un caracter se reprezint pe 2 octei l conine 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 secvene 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.
Convenie: 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 muli atomi lexicali, atunci primele litere ale celorlali atomi se scriu cu majuscule.
Constante
l
Intregi (10, 16 -0x, 8-0) normali - se reprezint pe 4 octei (32 bii) lungi - se reprezint pe 8 octei (64 bii) i se termin cu caracterul L (sau l). Flotani: 1.0, 2e2, 3f, 4D s aib cel puin o zecimal dup virgul s fie n notaie exponenial s aib sufixul F sau f pentru valorile normale - reprezentate pe 32 bii, respectiv D sau d pentru valorile duble - reprezentate pe 64 bii. Logici: true, false
Constante
l
Caracter: J, a, v, a, \n Caracter sau secvene escape (permit specificarea caracterelor care nu au reprezentare grafic i reprezentarea unor caractere speciale precum backslash, apostrof, etc.) Secvenele 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 secvene escape.
l
Operatori
atribuirea:
= matematici: +, -, *, /, %, ++, -lval op= rval: x += 2 n -= 3 x++, ++x, n--, --n logici: &&(and), ||(or), !(not) relaionali: <, <=, >, >=, ==, != pe bii: &(and), |(or), ^ (xor),~ (not) de translaie: <<, >>, >>> (shift la dreapta fr semn) if-else: expresie-logica ? val-true: val-false
Operatori
l
operatorul , (virgul) folosit pentru evaluarea secvenial a operaiilor: 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 documentaie, nchise ntre /** i */. Textul dintre cele dou secvene este automat mutat n documentaia aplicaiei de ctre generatorul automat de documentaie 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 interfeele l Valoarea unei variabile de acest tip este, spre deosebire de tipurile primitive, o referin (adres de memorie) ctre valoarea sau mulimea de valori reprezentat de variabila respectiv.
Nu exist: pointer, struct i union.
Variabile
l
Declararea variabilelor: Tip numeVariabila; Iniializarea 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 funcie 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 excepiilor
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()); } } }
Instruciuni
Instruciuni de decizie: if-else, switch-case Instruciuni de salt: for, while, do-while Instruciuni pentru tratarea excepiilor: try-catch-finally, throw Alte instruciuni: break, continue, return, label:
Instruciuni de decizie
l
if-else
switch-case
switch (variabila) { case valoare1: ... break; case valoare2: ... break; default: ... }
Instruciuni 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 instruciuni
l l
break: prsete forat corpul unei structuri repetitive. continue: termin forat iteraia curent a unui ciclu i trece la urmtoarea iteraie. return [valoare]: termin o metod i, eventual, returneaz o valoare. numeEticheta: definete o etichet. Nu exist goto Pot fi definite etichete folosite astfel:
l l l
Ce este un pachet ?
Pachet = Colecie de clase i interfee Scopul: l Organizarea lucrului l Gsirea i utilizarea mai uoar 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 (fr nume)
Ambiguiti
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[]; Instanierea numeVector = new Tip[nrElemente]; Iniializarea (opional) 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 poziiile unui vector cu n elemente vor fi cuprinse ntre 0 i n - 1. l Nu sunt permise construcii de genul Tip numeVector[nrElemente], alocarea memoriei fcndu-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 schimbri n poriuni din coninutul su pe parcursul execuiei programului) va fi declarat de tipul String, altfel va fi declarat de tip StringBuffer. StringBuffer pune la dispoziie metode pentru modificarea coninutului 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 aplicaii dedicate procesrii 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 Numrul 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); } }
Afiarea 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 - numr 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 reea securitate - semnare electronic parte integrata a platformei Java
Crearea unei arhive: jar cf arhiva.jar fiier(e)-intrare Vizualizare coninutului: jar tf nume-arhiva Extragerea coninutului: jar xf arhiva.jar
l l l
Exemple
Exemple: l Arhivarea a dou fiiere class: jar cf classes.jar A.class B.class l Arhivarea tuturor fiierelor 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