Beruflich Dokumente
Kultur Dokumente
Arrays
CUPRINS
DataInputStream DataOutputStream
CUPRINS
StreamTokenizer
RandomAccesFile
File
FilenameFilter
Comparable
Comparator
CUPRINS
.class
CUPRINS
CUPRINS
CUPRINS
CUPRINS
CUPRINS
OAK
platforme de lucru
1.1. CE ESTE JAVA ?
interpretor
compi-
lator cod
CAPITOLUL 1. INTRODUCERE IN JAVA
masina
cod
de octeti
class FirstApp {
public static void main( String args[]) {
System.out.println("Hello world!");
}
}
1.2. PRIMUL PROGRAM
main
java
java
.class
javac FirstApp.java
FirstApp.class
FirstApp.class
java FirstApp
CAPITOLUL 1. INTRODUCERE IN JAVA
\ uxxxx
xxxx
\ u0030 - \ u0039
\ u0660 - \ u0669
\ u03B1 - \ u03C9
\ u2200 - \ u22FF , ,
\ u4e00 - \ u9fff
1.3. ST RUCTURA LEXICAL A A LIMBAJULUI JAVA
enum
CAPITOLUL 1. INTRODUCERE IN JAVA
. , e , f, D
true false
escape
\ b
\ t
\ n
\ f
\ r
\ "
\
\ \
1.3. ST RUCTURA LEXICAL A A LIMBAJULUI JAVA
( ) [ ] ; , .
+, -, *, /, %, ++, --
lval op= rval x += 2 n
-= 3
//
/* */ //
//
/* */
1.4. TIPURI DE DATE SI VARIABILE
char
struct union
CAPITOLUL 1. INTRODUCERE IN JAVA
Tip numeVariabila;
class Exemplu {
//Fiecare variabila corespunde situatiei data de numele ei
//din enumerarea de mai sus
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());
}
}
}
for
CAPITOLUL 1. INTRODUCERE IN JAVA
int x=1;
{
int x=2; //incorect
}
if-else, switch-case
try-catch-finally, throw
if (expresie-logica) {
...
}
if (expresie-logica) {
...
} else {
...
}
switch (variabila) {
case valoare1:
...
break;
case valoare2:
1.5. CONTROLUL EXECUTIEI
...
break;
...
default:
...
}
switch
while (expresie-logica) {
...
}
do {
...
}
while (expresie-logica);
CAPITOLUL 1. INTRODUCERE IN JAVA
try-catch-finally
throw
break
continue
return [valoare]
numeEticheta:
goto
break numeEticheata continue numeEticheta
i=0;
eticheta:
while (i < 10) {
System.out.println("i="+i);
j=0;
while (j < 10) {
j++;
if (j==5) continue eticheta;
if (j==7) break eticheta;
System.out.println("j="+j);
}
i++;
}
1.6. VECTORI
int[] intregi;
String adrese[];
new
nrElemente
nr E lemente
di mensi une Ti p
di mensi une T i p
v = new int[10];
//aloca spatiu pentru 10 intregi: 40 octeti
c = new char[10];
//aloca spatiu pentru 10 caractere: 20 octeti
n
n
Tip numeVector[nrElemente]
new
int v[10]; //ilegal
int v[] = new int[10]; //corect
a b
System.arraycopy
b a
a b
// Varianta 1
for(int i=0; i<a.length; i++)
b[i] = a[i];
// Varianta 2
System.arraycopy(a, 0, b, 0, a.length);
Arrays
java.util.Arrays
Quick-
Sort O n log n
CAPITOLUL 1. INTRODUCERE IN JAVA
char
String
StringBuffer
StringBuffer
append, insert, delete, reverse
String
StringBuffer
String s = "abc";
String s = new String("abc");
char data[] = {a, b, c};
String s = new String(data);
String
1.8. FOLOSIREA ARGUMENT ELOR DE LA LINIA DE COMANDA
StringBuffer append
s=1+2+"a"+1+2
"3a12"
CAPITOLUL 1. INTRODUCERE IN JAVA
Sortare
"persoane.txt"
main
main
public static void main (String args[])
ar gs main
ar gs
args length
1.8. FOLOSIREA ARGUMENT ELOR DE LA LINIA DE COMANDA
ArrayIndexOutOfBoundsException
main
main
}
}
java Afisare Hello Java
Hello
Java
java Afisare "Hello Java"
Hello Java
String
parseTipNumeric
Integer, Float, Double
Power
NumeClasa numeObiect;
new
CAPITOLUL 2. OBIECTE SI CLASE
Rectangle
Rectangle() Rectangle
Rectangle
public Rectangle()
public Rectangle(int latime, int inaltime)
public Rectangle(int x, int y, int latime, int inaltime)
public Rectangle(Point origine)
public Rectangle(Point origine, int latime, int inaltime)
public Rectangle(Point origine, Dimension dimensiune)
new
Rectangle patrat;
patrat.x = 10;
//Eroare - lipseste instantierea
metode de accesare
setter - getter setVariabila getVariabila
natural
explicit null
2.2. CREAREA CLASELOR
gc System
finalize
[public][abstract][final]class NumeClasa
[extends NumeSuperclasa]
[implements Interfata1 [, Interfata2 ... ]]
{
// Corpul clasei
}
CAPITOLUL 2. OBIECTE SI CLASE
public
securitate
NumeSuperclasa
Object Object
2.2. CREAREA CLASELOR
variabile membre
metode membre
// C++
class A {
void metoda1();
int metoda2() {
// Implementare
}
}
A::metoda1() {
// Implementare
}
CAPITOLUL 2. OBIECTE SI CLASE
// Java
class A {
void metoda1(){
// Implementare
}
void metoda2(){
// Implementare
}
}
class A {
int A;
void A() {};
// Corect pentru compilator
// Nerecomandat ca stil de programare
}
class NumeClasa {
[modificatori] NumeClasa([argumente]) {
// Constructor
2.2. CREAREA CLASELOR
}
}
class Dreptunghi {
double x, y, w, h;
Dreptunghi(double x1, double y1, double w1, double h1) {
// Cel mai general constructor
x=x1; y=y1; w=w1; h=h1;
System.out.println("Instantiere dreptunghi");
}
Dreptunghi(double w1, double h1) {
// Constructor cu doua argumente
x=0; y=0; w=w1; h=h1;
System.out.println("Instantiere dreptunghi");
}
Dreptunghi() {
// Constructor fara argumente
x=0; y=0; w=0; h=0;
System.out.println("Instantiere dreptunghi");
}
}
this( argumente )
CAPITOLUL 2. OBIECTE SI CLASE
class Dreptunghi {
double x, y, w, h;
Dreptunghi(double x1, double y1, double w1, double h1) {
// Implementam doar constructorul cel mai general
x=x1; y=y1; w=w1; h=h1;
System.out.println("Instantiere dreptunghi");
}
Dreptunghi(double w1, double h1) {
this(0, 0, w1, h1);
// Apelam constructorul cu 4 argumente
}
Dreptunghi() {
this(0, 0);
// Apelam constructorul cu 2 argumente
}
}
super( argumente )
Patrat Dreptunghi
class Patrat extends Dreptunghi {
Patrat(double x, double y, double d) {
super(x, y, d, d);
// Apelam constructorul superclasei
}
}
2.2. CREAREA CLASELOR
class Dreptunghi {
double x, y, w, h;
// Nici un constructor
}
class Cerc {
double x, y, r;
// Constructor cu 3 argumente
Cerc(double x, double y, double r) { ... };
}
Cerc c;
c = new Cerc();
// Eroare la compilare !
super([argumente])
CAPITOLUL 2. OBIECTE SI CLASE
class A {
int x=1;
A(int x) { this.x = x;}
}
class B extends A {
// Corect
B() {super(2);}
B(int x) {super.x = x;}
}
class C extends A {
// Eroare la compilare !
C() {super.x = 2;}
C(int x) {super.x = x;}
}
2.2. CREAREA CLASELOR
class NumeClasa {
// Declararea variabilelor
// Declararea metodelor
}
class Exemplu {
double x;
protected static int n;
public String s = "abcd";
private Point p = new Point(10, 10);
final static long MAX = 100000L;
}
CAPITOLUL 2. OBIECTE SI CLASE
int variabilaInstanta ;
static int variabilaClasa;
final
class Test {
final int MAX;
Test() {
MAX = 100; // Corect
MAX = 200; // Eroare la compilare !
}
}
this super
class A {
int x;
A() {
this(0);
}
A(int x) {
this.x = x;
}
void metoda() {
x ++;
}
}
class B extends A {
B() {
this(0);
}
B(int x) {
super(x);
System.out.println(x);
}
void metoda() {
super.metoda();
CAPITOLUL 2. OBIECTE SI CLASE
System.out.println(x);
}
}
void metodaInstanta();
static void metodaClasa();
2.3. IMPLEMENTAREA METODELOR
class Student {
...
final float calcMedie(float note[], float ponderi[]) {
...
}
...
}
class StudentInformatica extends Student {
float calcMedie(float note[], float ponderi[]) {
return 10.00;
}
}// Eroare la compilare !
CAPITOLUL 2. OBIECTE SI CLASE
void
return
double radical(double x) {
if (x >= 0)
return Math.sqrt(x);
else {
System.out.println("Argument negativ !");
// Eroare la compilare
// Lipseste return pe aceasta ramura
}
}
int metoda() {
return 1.2; // Eroare
}
int metoda() {
2.3. IMPLEMENTAREA METODELOR
double metoda() {
return (float)1; // Corect
}
Poligon
Patrat
Poligon metoda1( ) {
Poligon p = new Poligon();
Patrat t = new Patrat();
if (...)
return p; // Corect
else
return t; // Corect
}
Patrat metoda2( ) {
Poligon p = new Poligon();
Patrat t = new Patrat();
if (...)
return p; // Eroare
else
return t; // Corect
}
this
class Cerc {
int x, y, raza;
public Cerc(int x, int y, int raza) {
this.x = x;
this.y = y;
this.raza = raza;
}
}
2.3. IMPLEMENTAREA METODELOR
Cerc
// Varianta incorecta:
class Cerc {
private int x, y, raza;
public void aflaParametri(int valx, int valy, int valr) {
// Metoda nu are efectul dorit!
valx = x;
valy = y;
valr = raza;
}
}
// Varianta corecta
class Param {
public int x, y, raza;
}
class Cerc {
private int x, y, raza;
public void aflaParametri(Param param) {
param.x = x;
param.y = y;
param.raza = raza;
}
}
param
CAPITOLUL 2. OBIECTE SI CLASE
getter setter
class Cerc {
private int x, y, raza;
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
...
}
polimor-
fism
suprancarcarea (overloading)
supradefinirea (overriding)
class A {
void metoda() {
System.out.println("A: metoda fara parametru");
}
// Supraincarcare
void metoda(int arg) {
System.out.println("A: metoda cu un parametru");
}
}
class B extends A {
// Supradefinire
void metoda() {
System.out.println("B: metoda fara parametru");
}
}
B b = new B();
b.metoda();
// Afiseaza "B: metoda fara parametru"
CAPITOLUL 2. OBIECTE SI CLASE
class B extends A {
// Supradefinire prin extensie
void metoda() {
super.metoda();
System.out.println("B: metoda fara parametru");
}
}
. . .
B b = new B();
b.metoda();
/* Afiseaza ambele mesaje:
"A: metoda fara parametru"
"B: metoda fara parametru" */
private
protected
public
2.5. MEMBRI DE INSTANT A SI MEMBRI DE CLASA
de instanta static
de clasa static
static x
class Exemplu {
int x ; //variabila de instanta
}
Exemplu
NumeClasa.numeVariabilaStatica
class Exemplu {
int x ; // Variabila de instanta
static long n; // Variabila de clasa
}
. . .
Exemplu o1 = new Exemplu();
Exemplu o2 = new Exemplu();
o1.n = 100;
System.out.println(o2.n); // Afiseaza 100
o2.n = 200;
System.out.println(o1.n); // Afiseaza 200
System.out.println(Exemplu.n); // Afiseaza 200
// o1.n, o2.n si Exemplu.n sunt referinte la aceeasi valoare
class Exemplu {
static final double PI = 3.14;
static long nrInstante = 0;
static Point p = new Point(0,0);
}
2.5. MEMBRI DE INSTANT A SI MEMBRI DE CLASA
static
static
class Exemplu {
int x ; // Variabila de instanta
static long n; // Variabila de clasa
void metodaDeInstanta() {
n ++; // Corect
x --; // Corect
}
static void metodaStatica() {
n ++; // Corect
x --; // Eroare la compilare !
}
}
NumeClasa.numeMetodaStatica
class Exemplu {
final double PI = 3.14;
// Variabila finala de instanta
}
Exemplu
static final
class Exemplu {
static final double PI = 3.14;
// Variabila finala de clasa
}
class Exemplu {
static long nrInstante = 0;
Exemplu() {
// Constructorul este apelat la fiecare instantiere
nrInstante ++;
}
}
2.5. MEMBRI DE INSTANT A SI MEMBRI DE CLASA
sqrt Math
// Incorect !
Math obj = new Math();
double rad = obj.sqrt(121);
Math.sqrt(121)
initializarea clasei
static {
// Bloc static de initializare;
...
}
static int x = 0, y, z;
Test() {
/* La executia constructorului
variabilele de clasa sunt deja initializate si
toate blocurile statice de initializare au
fost obligatoriu executate in prealabil.
*/
...
}
}
clasa imbricata
clasa de acoperire
class ClasaDeAcoperire{
class ClasaImbricata1 {
// Clasa membru
}
void metoda() {
class ClasaImbricata2 {
// Clasa locala metodei
}
}
2.6. CLASE IMBRICATE
class ClasaDeAcoperire{
private int x=1;
class ClasaImbricata1 {
int a=x;
}
void metoda() {
final int y=2;
int z=3;
class ClasaImbricata2 {
int b=x;
int c=y;
ClasaDeAcoperire.ClasaImbricata
public, protected,
private
abstract
final
CAPITOLUL 2. OBIECTE SI CLASE
clasa interna
class ClasaDeAcoperire{
...
class ClasaInterna {
...
}
static class ClasaImbricataStatica {
...
}
}
.class
class ClasaDeAcoperire{
class ClasaInterna1 {}
class ClasaInterna2 {}
}
2.7. CLASE SI MET ODE ABSTRACTE
ClasaDeAcoperire.class
ClasaDeAcoperire$ClasaInterna1.class
ClasaDeAcoperire$ClasaInterna2.class
clase anonime
ClasaAcoperire.$1 ClasaAcoperire.$n n
java.lang Number
Number
Byte Double Float Integer
Long Short
Number
abstract
[public] abstract class ClasaAbstracta
[extends Superclasa]
[implements Interfata1, Interfata2, ...] {
// Declaratii uzuale
// Declaratii de metode abstracte
}
public
final
abstract final
metode
abstracte
abstract
GraphicObject
GraphicObject
// Metode comune
public void setX(int x) {
this.x = x;
}
public void setY(int y) {
this.y = y;
}
public void setColor(Color color) {
this.color = color;
}
...
// Metode abstracte
abstract void draw();
...
}
CAPITOLUL 2. OBIECTE SI CLASE
Number
Reader Writer
InputStream OutputStream
Component
Object
class Exemplu {}
class Exemplu extends Object {}
Object
Object
CAPITOLUL 2. OBIECTE SI CLASE
Object
clone
equals/hashCode finalize toString
equals
Object
hashCode
equals
hashCode
Object
TestComplex
class Complex {
private double a; //partea reala
private double b; //partea imaginara
public Complex() {
this(1, 0);
}
primitive referinta
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean
tipPrimitivValue
Integer obi = new Integer(1);
int i = obi.intValue();
autoboxing auto-unboxing
2.10. TIPUL DE DATE ENUMERARE
public class Exemplu {
public static void main(String args[]) {
int v[] = new int[10];
v[10] = 0; //Exceptie !
System.out.println("Aici nu se mai ajunge...");
}
}
CAPITOLUL 3. EXCEPTI I
analizor de exceptie
prinderea exceptiei
try {
// Instructiuni care pot genera exceptii
}
catch (TipExceptie1 variabila) {
// Tratarea exceptiilor de tipul 1
3.2. PRINDEREA SI TRATAREA EXCEPTIILOR
}
catch (TipExceptie2 variabila) {
// Tratarea exceptiilor de tipul 2
}
. . .
finally {
// Cod care se executa indiferent
// daca apar sau nu exceptii
}
// Inchidem fisierul
System.out.println("\\nInchidem fisierul " + fis);
f.close();
}
citeste
citeste
CAPITOLUL 3. EXCEPTI I
import java.io.*;
} catch (FileNotFoundException e) {
//Tratam un tip de exceptie
System.err.println("Fisierul nu a fost gasit !");
System.err.println("Exceptie: " + e.getMessage());
System.exit(1);
} catch (IOException e) {
//Tratam alt tip de exceptie
System.out.println("Eroare la citirea din fisier!");
e.printStackTrace();
} finally {
if (f != null) {
// Inchidem fisierul
System.out.println("\nInchidem fisierul.");
try {
f.close();
} catch (IOException e) {
System.err.println("Fisierul nu poate fi inchis!");
e.printStackTrace();
}
}
}
}
try {
...
// Totul a decurs bine.
f.close();
}
...
catch (IOException e) {
...
// A aparut o exceptie la citirea din fisier
f.close(); // cod redundant
}
close
close
CAPITOLUL 3. EXCEPTI I
throws
[modificatori] TipReturnat metoda([argumente])
throws TipExceptie1, TipExceptie2, ...
{
...
}
citeste main
import java.io.*;
int c;
while ( (c=f.read()) != -1)
System.out.print((char)c);
f.close();
}
3.3. ARUNCAREA EXCEPTI ILOR
} catch (FileNotFoundException e) {
System.err.println("Fisierul nu a fost gasit !");
System.err.println("Exceptie: " + e);
} catch (IOException e) {
System.out.println("Eroare la citirea din fisier!");
e.printStackTrace();
}
} else
System.out.println("Lipseste numele fisierului!");
}
}
IOException
finally catch
main
main
public static void main(String args[])
throws FileNotFoundException, IOException {
citeste(args[0]);
}
throw
throw exceptie
throw new IOException("Exceptie I/O");
...
if (index >= vector.length)
throw new ArrayIndexOutOfBoundsException();
...
3.4. AVANTAJELE TRAT ARI I EXCEPTI ILOR
catch(Exception e) {
System.out.println("A aparut o exceptie);
throw e;
}
citesteFisier {
deschide fisierul;
determina dimensiunea fisierului;
aloca memorie;
citeste fisierul in memorie;
inchide fisierul;
}
CAPITOLUL 3. EXCEPTI I
int citesteFisier() {
int codEroare = 0;
deschide fisierul;
if (fisierul s-a deschis) {
determina dimensiunea fisierului;
if (s-a determinat dimensiunea) {
aloca memorie;
if (s-a alocat memorie) {
citeste fisierul in memorie;
if (nu se poate citi din fisier) {
codEroare = -1;
}
} else {
codEroare = -2;
}
} else {
codEroare = -3;
}
inchide fisierul;
if (fisierul nu s-a inchis && codEroare == 0) {
codEroare = -4;
} else {
codEroare = codEroare & -4;
}
} else {
codEroare = -5;
}
return codEroare;
} // Cod "spaghetti"
3.4. AVANTAJELE TRAT ARI I EXCEPTI ILOR
int citesteFisier() {
try {
deschide fisierul;
determina dimensiunea fisierului;
aloca memorie;
citeste fisierul in memorie;
inchide fisierul;
}
catch (fisierul nu s-a deschis)
{trateaza eroarea;}
catch (nu s-a determinat dimensiunea)
{trateaza eroarea;}
catch (nu s-a alocat memorie)
{trateaza eroarea}
catch (nu se poate citi din fisier)
{trateaza eroarea;}
catch (nu se poate inchide fisierul)
{trateaza eroarea;}
}
citesteFisier
int metoda1() {
metoda2();
...
}
int metoda2() {
metoda3;
...
}
int metoda3 {
citesteFisier();
...
CAPITOLUL 3. EXCEPTI I
metoda1
citesteFisier metoda1
int metoda1() {
int codEroare = metoda2();
if (codEroare != 0)
//proceseazaEroare;
...
}
int metoda2() {
int codEroare = metoda3();
if (codEroare != 0)
return codEroare;
...
}
int metoda3() {
int codEroare = citesteFisier();
if (codEroare != 0)
return codEroare;
...
}
int metoda1() {
try {
metoda2();
}
catch (TipExceptie e) {
//proceseazaEroare;
}
...
}
3.4. AVANTAJELE TRAT ARI I EXCEPTI ILOR
IOException
FileNotFoundException EOFException
IOException
Exception
Throwable
try {
FileReader f = new FileReader("input.dat");
/* Acest apel poate genera exceptie
de tipul FileNotFoundException
Tratarea ei poate fi facuta in unul
din modurile de mai jos:
*/
}
catch (FileNotFoundException e) {
// Exceptie specifica provocata de absenta
// fisierului input.dat
} // sau
CAPITOLUL 3. EXCEPTI I
catch (IOException e) {
// Exceptie generica provocata de o operatie IO
} // sau
catch (Exception e) {
// Cea mai generica exceptie soft
} //sau
catch (Throwable e) {
// Superclasa exceptiilor
}
Throwable
Error, Exception RuntimeException
Error
3.6. EXCEPTI I LA EXECUTIE
Exception
RuntimeException exceptii la
executie
Throwable
getMessage
printStackTrace
toString Object
exceptii la executie
RuntimeException
ArithmeticException
null
NullPointerException
ArrayIndexOutOfBoundsException
CAPITOLUL 3. EXCEPTI I
v[11] = 0;
/* Nu apare eroare la compilare
dar apare exceptie la executie si
programul va fi terminat.
*/
System.out.println("Aici nu se mai ajunge...");
float double
Exception
3.7. CREAREA PROPRI ILOR EXCEPTI I
ExceptieStiva
class Stiva {
extends Exception
ExceptieStiva Exception
CAPITOLUL 3. EXCEPTI I
ExceptieSimpla(String s)
canal de comunicatie (flux)
flux
proces producator
proces
consumator
flux de intrare
flux de iesire
java.io
import java.io.*;
directia
tipul de date
4.1. INTRODUCERE
actiunea
Reader InputStream
Reader InputStream
int read() int read()
int read(char buf[]) int read(byte buf[])
... ...
Writer OutputStream
Reader InputStream
void write(int c) void write(int c)
void write(char buf[]) void write(byte buf[])
void write(String str) -
... ...
gc
4.2. FOLOSIREA FLUXURILOR
read
write
FileReader FileWriter
FileInputStream FileOutputStream
fluxuri fisier
CharArrayReader, CharArrayWriter
ByteArrayInputStream ByteArrayOutputStream
StringReader, StringWriter
PipedReader, PipedWriter
PipedInputStream, PipedOutputStream
CAPITOLUL 4. INT RARI SI IESIRI
BufferedReader
FileReader
FileReader
BufferedReader, BufferedWriter
BufferedInputStream, BufferedOutputStream
FilterReader, FilterWriter
FilterInputStream, FilterOutputStream
InputStreamReader, OutputStreamWriter
InputStreamReader
InputStream
OutputStreamWriter
OutputStream
4.2. FOLOSIREA FLUXURILOR
SequenceInputStream
ObjectInputStream, ObjectOutputStream
DataInputStream, DataOutputStream
LineNumberReader
LineNumberInputStream
PushbackReader
PushbackInputStream
PrintWriter
PrintStream
CAPITOLUL 4. INT RARI SI IESIRI
Exemple:
//crearea unui flux de intrare printr-un buffer
BufferedReader in = new BufferedReader(
new FileReader("fisier.txt"));
//echivalent cu
FileReader fr = new FileReader("fisier.txt");
BufferedReader in = new BufferedReader(fr);
File
FileDesciptor
FileReader
FileWriter
FileNotFoundException
try-catch
FileNotFoundException IOException
import java.io.*;
public class Copiere {
public static void main(String[] args) {
try {
FileReader in = new FileReader("in.txt");
FileWriter out = new FileWriter("out.txt");
int c;
while ((c = in.read()) != -1)
out.write(c);
in.close();
out.close();
} catch(IOException e) {
System.err.println("Eroare la operatiile cu fisiere!");
e.printStackTrace();
}
}
}
FileNotFoundException IOException
FileNotFoundException
4.2. FOLOSIREA FLUXURILOR
BufferedReader
BufferedInputStream
BufferedWriter BufferedOutputStream
BufferedReader(Reader in)
BufferedReader(Reader in, int dim_buffer)
BufferedWriter(Writer out)
CAPITOLUL 4. INT RARI SI IESIRI
read write
flush
\n
SequenceInputStream(Enumeration e)
SequenceInputStream(InputStream s1, InputStream s2)
InputStream
s s s
s.close();
//f1 si f2 sunt inchise automat
} catch (IOException e) {
e.printStackTrace();
}
}
}
DataInputStream, DataOutputStream
BufferedInputStream, BufferedOutputStream
LineNumberInputStream
PushbackInputStream
PrintStream
4.2. FOLOSIREA FLUXURILOR
BufferedInputStream BufferedOutputStream
fluxuri de procesare
BufferedInputStream
readLine
DataInputStream DataOutputStream
DataInput
DataOutput
CAPITOLUL 4. INT RARI SI IESIRI
readBoolean writeBoolean
readByte writeByte
readChar writeChar
readDouble writeDouble
readFloat writeFloat
readInt writeInt
readLong writeLong
readShort writeShort
readUTF writeUTF
XXX XXX
DataInput DataOutput
IOException
readUTF
String
writeXXX readXXX
serializare
DataInputStream DataOutputStream
ObjectInputStream
ObjectOutputStream
File
System.in
4.4. FLUXURI STANDARD DE INTRARE SI IESIRE
Scanner s = Scanner.create(System.in);
String nume = s.next();
int varsta = s.nextInt();
double salariu = s.nextDouble();
s.close();
PrintStream PrintWriter
print, println
System
InputStream
PrintStream
PrintStream
CAPITOLUL 4. INT RARI SI IESIRI
System.out.print (argument);
System.out.println(argument);
System.out.printf (format, argumente...);
System.out.format (format, argumente...);
catch(Exception e) {
System.err.println("Exceptie:" + e);
}
PrintStream
System.out InputStream
readLine
java.util.Scanner
System
import java.io.*;
class Redirectare {
public static void main(String[] args) {
try {
BufferedInputStream in = new BufferedInputStream(
new FileInputStream("intrare.txt"));
PrintStream out = new PrintStream(
new FileOutputStream("rezultate.txt"));
PrintStream err = new PrintStream(
new FileOutputStream("erori.txt"));
System.setIn(in);
System.setOut(out);
System.setErr(err);
String s;
while((s = br.readLine()) != null) {
/* Liniile vor fi citite din fisierul intrare.txt
si vor fi scrise in fisierul rezultate.txt
*/
System.out.println(s);
}
} catch(IOException e) {
/* Daca apar exceptii ,
ele vor fi scrise in fisierul erori.txt
*/
System.err.println("Eroare intrare/iesire!");
e.printStackTrace ();
}
}
}
StreamTokenizer
StreamTokenizer
atom lexical
CAPITOLUL 4. INT RARI SI IESIRI
public StreamTokenizer(Reader r)
public StreamTokenizer(InputStream is)
import java.io.*;
public class CitireAtomi {
public static void main(String args[]) throws IOException{
nextToken
TT EOF
nextToken
StringTokenizer
split
String
RandomAccesFile
RandomAccesFile
Object
java.io
CAPITOLUL 4. INT RARI SI IESIRI
DataInput DataOutput
readXXX writeXXX
DataInputStream DataOutputStream
RandomAccessFile(StringnumeFisier, StringmodAcces)
throws IOException
RandomAccessFile(StringnumeFisier, StringmodAcces)
throws IOException
modAcces
read write
skipBytes
seek
getFilePointer
4.6. CLASA FILE
File
File
File
File
File
File
import java.io.*;
CAPITOLUL 4. INT RARI SI IESIRI
import java.util.*;
public class ListareDirector {
System.out.println(
"Cale absoluta: " + f.getAbsolutePath() +
"\n Poate citi: " + f.canRead() +
"\n Poate scrie: " + f.canWrite() +
"\n Parinte: " + f.getParent() +
"\n Cale: " + f.getPath() +
"\n Lungime: " + f.length() +
"\n Data ultimei modificari: " +
new Date(f.lastModified()));
System.out.println("--------------");
}
try {
File director = new File(nume);
File[] continut = director.listFiles();
} catch(Exception e) {
e.printStackTrace();
}
}
}
protocol de comunicare
interfata
CAPITOLUL 5. INTERFETE
superinterfete
public
static final
interface Exemplu {
int MAX = 100;
// Echivalent cu:
public static final int MAX = 100;
int MAX;
// Incorect, lipseste initializarea
private int x = 1;
// Incorect, modificator nepermis
}
5.2. FOLOSIREA INTERFETELOR
public
interface Exemplu {
void metoda();
// Echivalent cu:
public void metoda();
public
static final
public
abstract
X X
X
Stack
push
pop
peek
empty
toString
5.2. FOLOSIREA INTERFETELOR
Stack
StackException
public
toString
Object
5.2. FOLOSIREA INTERFETELOR
class Node {
//Clasa interna ce reprezinta un nod al listei
Object item; // informatia din nod
Node link; //legatura la urmatorul nod
Node(Object item , Node link) {
this.item = item;
this.link = link;
}
}
push
StackException
} catch (StackException e) {
System.err.println("Eroare la lucrul cu stiva!");
e.printStackTrace();
}
}
}
Stack
5.3. INTERFETE SI CLASE ABSTRACTE
afiseaza
Stack
java.util Stack
Applet
List
CAPITOLUL 5. INTERFETE
AbstractList
interface Inotator {
void inoata();
}
interface Zburator {
void zboara();
}
interface Luptator {
void lupta();
}
class Erou implements Inotator, Zburator, Luptator {
public void inoata() {}
public void zboara() {}
public void lupta() {}
}
interface Monstru {
void ameninta();
}
interface MonstruPericulos extends Monstru {
void distruge();
5.4. MOSTENIRE MULTIPL A PRIN INTERFETE
}
interface Mortal {
void omoara();
}
interface Vampir extends MonstruPericulos, Mortal {
void beaSange();
}
class Dracula implements Vampir {
public void ameninta() {}
public void distruge() {}
public void omoara()() {}
public void beaSange() {}
}
interface I1 {
int x=1;
void metoda();
}
interface I2 {
int x=2;
void metoda(); //corect
//int metoda(); //incorect
}
}
}
public
static final
5.5. UTILITATEA INTERFETELOR
NumeInterfata.constanta
if (luna < Luni.DEC)
luna ++
else
luna = Luni.IAN;
call-back
Functie
interface Functie {
public void executa(Nod u);
}
class Graf {
//...
void explorare(Functie f) {
//...
CAPITOLUL 5. INTERFETE
FilenameFilter
list File
list
5.6. INTERFATA FILENAMEFILTER
FilenameFilter
FilenameFilter accept
// Constructorul
FiltruFisiere(String filtru) {
this.filtru = filtru;
}
String
CAPITOLUL 5. INTERFETE
list
File
accept
}
public boolean accept (File dir, String nume) {
return ( nume.endsWith("." + extensie) );
}
}
}
}
metoda(new Interfata() {
// Implementarea metodelor interfetei
});
sort java.util.Arrays
Persoana
class Persoana {
int cod;
String nume;
class Sortare {
public static void main(String args[]) {
Persoana p[] = new Persoana [4];
p[0] = new Persoana(3, "Ionescu");
p[1] = new Persoana(1, "Vasilescu");
p[2] = new Persoana(2, "Georgescu");
p[3] = new Persoana(4, "Popescu");
java.util.Arrays.sort(p);
sort Persoana
Comparable
Comparable
ordinea naturala
compareTo
this mic
egal
CAPITOLUL 5. INTERFETE
mare
equals Object
C consitenta equals
(e1.compareTo((Object)e2) == 0)
e1.equals((Object)e2 e e C
null e.compareTo(null)
NullPointerException e.equals(null)
false
Persoana p = (Persoana) o;
5.7. COMPARAREA OBIECT ELOR
instanceof
compareTo
ClassCastException
Persoana equals
false
Comparator
sort java.util.Arrays
Comparator
java.util.Comparator
compareTo Comparator
int compare(Object o1, Object o2);
import java.util.*;
class Sortare {
public static void main(String args[]) {
Persoana p[] = new Persoana [4];
p[0] = new Persoana(3, "Ionescu");
p[1] = new Persoana(1, "Vasilescu");
p[2] = new Persoana(2, "Georgescu");
p[3] = new Persoana(4, "Popescu");
}
});
System.out.println("Persoanele ordonate dupa nume:");
for(int i=0; i<p.length; i++)
System.out.println(p[i]);
}
}
interface X {
void metoda_1();
void metoda_2();
...
void metoda_n();
}
...
// Avem nevoie de un obiect de tip X
// ca argument al unei functii
functie(new X() {
public void metoda_1() {
// Singura metoda care ne intereseaza
...
}
// Trebuie sa apara si celelalte metode
// chiar daca nu au implementare efectiva
public void metoda_2() {}
public void metoda_3() {}
...
public void metoda_n() {}
5.8. ADAPTORI
});
adaptor
functie(new XAdapter() {
public void metoda_1() {
// Singura metoda care ne intereseaza
...
}
});
CAPITOLUL 5. INTERFETE
pachet
pachet
6.1. PACHET E
import numePachet.numeClasa;
Button TextField
import java.awt.Button;
import java.awt.TextField;
import java.awt.Rectangle;
import java.awt.Line;
import java.awt.Point;
import java.awt.Polygon;
import
import la cerere
import numePachet.*;
import java.awt.C*;
6.1. PACHET E
ambiguitate
import java.awt.*;
// Contine clasa List
import java.util.*;
// Contine interfata List
...
List x; //Declaratie ambigua
java.lang
import java.lang.*;
// Poate sau nu sa apara
// Mai bine nu...
import
import static numePachet.NumeClasa.*;
NumeClasa.CONSTANTA
CAPITOLUL 6. ORGANIZAREA CLASELOR
java.lang java.io
java.awt
Graf.java
Arbore.java
//Fisierul Graf.java
package grafuri;
class Graf {...}
class GrafPerfect extends Graf {...}
//Fisierul Arbore.java
package grafuri;
class Arbore {...}
6.1. PACHET E
ro.companie.numePachet
ro.xsoft.ion
CAPITOLUL 6. ORGANIZAREA CLASELOR
.java
.java
/matematica
/surse
/geometrie
/plan
Poligon.java
Cerc.java
/spatiu
Poliedru.java
Sfera.java
/algebra
Grup.java
/analiza
Functie.java
Matematica.java
// Poligon.java
package geometrie.plan;
public class Poligon { . . . }
// Cerc.java
package geometrie.plan;
public class Cerc { . . . }
// Poliedru.java
package geometrie.spatiu;
public class Poliedru { . . . }
CAPITOLUL 6. ORGANIZAREA CLASELOR
// Sfera.java
package geometrie.spatiu;
public class Sfera { . . . }
// Grup.java
package algebra;
public class Grup { . . . }
// Functie.java
package analiza;
public class Functie { . . . }
Matematica.java
.class
.class
.class
/matematica
/clase
/geometrie
/plan
Poligon.class
Cerc.class
/spatiu
6.2. ORGANIZAREA FISIERELOR
Poliedru.class
Sfera.class
/algebra
Grup.class
/analiza
Functie.class
Matematica.class
matematica clase
surse/geometrie/plan
/matematica/clase/geometrie/plan/Poligon.class
CAPITOLUL 6. ORGANIZAREA CLASELOR
cale de cautare
(classpath)
cale de cautare
Matematica.java
import geometrie.plan.*;
import algebra.Grup;
import analiza.Functie;
CLASSPATH
6.3. ARHIVE JAR
UNIX:
SET CLASSPATH = cale1:cale2:...
DOS shell (Windows 95/NT/...):
SET CLASSPATH = cale1;cale2;...
matematica
/matematica
/surse
/clase
compile.bat
(javac -sourcepath surse surse/Matematica.java -d clase)
run.bat
(java -classpath clase Matematica)
META-INF
CAPITOLUL 6. ORGANIZAREA CLASELOR
jar bin
jar tf nume-arhiva
jar xf arhiva.jar
Matematica.java clase
mate.jar
java -jar mate.jar
Manifest.mf
META-INF
manifest.txt
Main-Class: Matematica
jar uvfm mate.jar manifest.txt
Object
polimorfici
functionalitate reutilizabila
CAPITOLUL 7. COLECTI I
elementele
Set List
multime
o
o o .equal s o Collection
Set
o ,o o .compar eTo o
compar ator.compar e o , o
Set
// Subliste
SortedSet subSet(Object fromElement, Object toElement);
SortedSet headSet(Object toElement);
CAPITOLUL 7. COLECTI I
// Capete
Object first();
Object last();
Comparator comparator();
}
liste (secvente)
Collection
// Acces pozitional
Object get(int index);
Object set(int index, Object element);
void add(int index, Object element);
Object remove(int index);
abstract boolean addAll(int index, Collection c);
// Cautare
int indexOf(Object o);
int lastIndexOf(Object o);
// Iterare
ListIterator listIterator();
ListIterator listIterator(int index);
// Extragere sublista
List subList(int from, int to);
}
7.2. INTERFETE CE DESCRIU COLECTI I
ArrayList
LinkedList Vector
Map Collection
Map
Map
Map
// Extragerea de subtabele
SortedMap subMap(Object fromKey, Object toKey);
SortedMap headMap(Object toKey);
SortedMap tailMap(Object fromKey);
// Capete
Object first();
Object last();
toString
List
ArrayList LinkedList
LinkedList
ArrayList
LinkedList
import java.util.*;
System.out.println("LinkedList");
List lst2 = new LinkedList();
testAdd(lst2);
testGet(lst2);
testRemove(lst2);
}
}
0.12 0.14
0.01 87.45
12.05 0.01
ArrayList
LinkedList
CAPITOLUL 7. COLECTI I
ArrayList
LinkedList
ArrayList
LinkedList
Collections.algoritm(colectie, [argumente])
Collections
sort
TipColectie
TipColectie
< >
// Inainte de 1.5
ArrayList list = new ArrayList();
list.add(new Integer(123));
int val = ((Integer)list.get(0)).intValue();
Object Integer
CAPITOLUL 7. COLECTI I
ClassCastException
Enumeration Iterator
hasMoreElements, nextElement
e.hasMoreElements();) {
System.out.println(e.nextElement());
}
ListIterator
remove,
add, set
Object
next prev Object
CAPITOLUL 7. COLECTI I
import java.util.*;
class TestIterator {
public static void main(String args[]) {
ArrayList a = new ArrayList();
// Adaugam numerele de la 1 la 10
for(int i=1; i<=10; i++)
a.add(new Integer(i));
// Parcurgem vectorul
for(ListIterator it=a.listIterator(); it.hasNext(); ) {
Integer x = (Integer) it.next();
simplu de utilizat
persistenta obiectelor
CAPITOLUL 8. SERIALIZAREA OBIECTELOR
persistenta usoara
Java Beans
DataOutputStream
DataInputStream
8.1. FOLOSIREA SERIALIZARI I
ObjectOutputStream ObjectInputStream
serializare
DataOutputStream
String s = in.readUTF();
fis.close();
ObjectInputStream ObjectOutputStream
ObjectInput ObjectOutput DataInput DataOutput
Date
test.ser String
out.writeInt(12345);
out.writeDouble(12.345);
out.writeBoolean(true);
out.writeUTF("Sir de caractere");
writeObject IOException
NotSerializableException
InvalidClassException
Serializable
ObjectInputStream
FileInputStream
readObject Object
DataInput
ObjectInputStream DataInput
readTipPrimitiv
int i = in.readInt();
double d = in.readDouble();
boolean b = in.readBoolean();
String s = in.readUTF();
8.2. OBIECT E SERIALIZABILE
Serializable
Serializable
package java.io;
public interface Serializable {
// Nimic !
}
Serializable
public class ClasaSerializabila implements Serializable {
// Corpul clasei
}
Serializable
CAPITOLUL 8. SERIALIZAREA OBIECTELOR
Serializable NotSerializableException
NotSerializableException
import java.io.*;
NotSerializableException
import java.io.*;
class A {
int x=1;
}
import java.io.*;
class C {
int x=0;
// Obligatoriu constructor fara argumente
}
}
public String toString() {
return x + ", " + y;
}
}
import java.io.*;
out.writeObject(obj);
out.flush();
fos.close();
System.out.println("A fost salvat obiectul: " + obj);
// Restauram
FileInputStream fis = new FileInputStream("fisier.ser");
ObjectInputStream in = new ObjectInputStream(fis);
try {
obj = in.readObject();
} catch(ClassNotFoundException e) {
e.printStackTrace();
}
fis.close();
System.out.println("A fost restaurat obiectul: " + obj);
}
test(new Test3());
}
}
writeObject readObject
writeObject readObject
CAPITOLUL 8. SERIALIZAREA OBIECTELOR
writeObject readObject
Externalizable
8.3. PERSONALIZAREA SERIALIZARII OBIECT ELOR
angjat
import java.io.*;
import java.io.*;
import java.util.*;
//Lista angajatilor
ArrayList ang = new ArrayList();
while (true) {
System.out.print("\nNume:");
String nume = stdin.readLine();
System.out.print("Salariu:");
int salariu = Integer.parseInt(stdin.readLine());
System.out.print("Parola:");
String parola = stdin.readLine();
Angajat
adresa
InvalidClassException
transient
InvalidClassException
serialVersionUID
CAPITOLUL 8. SERIALIZAREA OBIECTELOR
Angajat
serialVersionUID
Angajat
serialVer Angajat
Angajat:
static final long serialVersionUID = 5653493248680665297L;
Angajat
import java.io.*;
adresa
8.3. PERSONALIZAREA SERIALIZARII OBIECT ELOR
parola
Angajat
import java.io.*;
Externalizable
package java.io;
public interface Externalizable extends Serializable {
public void writeExternal(ObjectOutput out)
throws IOException;
public void readExternal(ObjectInput in)
throws IOException, ClassNotFoundException;
}
Externalizable
8.3. PERSONALIZAREA SERIALIZARII OBIECT ELOR
Externalizable
import java.io.*;
import java.io.*;
}
CAPITOLUL 8. SERIALIZAREA OBIECTELOR
Object
clone
return ret;
} catch (Exception e) {
8.4. CLONAREA OBIECTELOR
System.out.println(e);
return null;
}
}
CAPITOLUL 8. SERIALIZAREA OBIECTELOR
vizuala
Java
Beans
CAPITOLUL 9. INTERFAT A GRAFICA CU UTILIZATORUL
java.awt Component
suprafata de afisare
9.2. MODELUL AWT
container
Container Component
eveniment
listener
import java.awt.*;
public class ExempluAWT1 {
public static void main(String args[]) {
// Adaugarea butoanelor
f.add(b1);
CAPITOLUL 9. INTERFAT A GRAFICA CU UTILIZATORUL
f.add(b2);
f.pack();
// Afisarea fereastrei
f.show();
}
}
FlowLayout
gestionar de pozitionare
(layout manager)
java.awt
9.2. MODELUL AWT
Component
Component
Proprietate Proprietate
getLocation, getX, getY, getLocationOnScreen
setLocation, setX, setY
getSize, getHeight, getWidth
setSize, setHeight, setWidth
getBounds
setBounds
getForeground, getBackground
setForeground, setBackground
CAPITOLUL 9. INTERFAT A GRAFICA CU UTILIZATORUL
getFont
setFont
setVisible
isVisible
setEnabled
isEnabled
Container
import java.awt.*;
public class TestLayout {
public static void main(String args[]) {
Frame f = new Frame("Grid Layout");
f.setLayout(new GridLayout(3, 2)); //*
GridLayout FlowLayout
Container
Applet, Frame, Panel
BorderLayout FlowLayout
LayoutManager
java.awt
CAPITOLUL 9. INTERFAT A GRAFICA CU UTILIZATORUL
Container
LayoutManager
FlowLayout
FlowLayout gestionar = new FlowLayout();
container.setLayout(gestionar);
container.setLayout(new FlowLayout());
Container
Component
pozitionare absoluta
setLayout
// pozitionare absoluta a componentelor in container
container.setLayout(null);
add
9.3. GESTIONAREA POZITIONARI I
container.setLayout(null);
Button b = new Button("Buton");
b.setSize(10, 10);
b.setLocation (0, 0);
container.add(b);
Panel
FlowLayout
import java.awt.*;
public class TestFlowLayout {
public static void main(String args[]) {
Frame f = new Frame("Flow Layout");
f.setLayout(new FlowLayout());
BorderLayout
BorderLayout
add
BorderLayout
import java.awt.*;
public class TestBorderLayout {
public static void main(String args[]) {
Frame f = new Frame("Border Layout");
// Apelul de mai jos poate sa lipseasca
f.setLayout(new BorderLayout());
f.show();
}
}
GridLayout
CAPITOLUL 9. INTERFAT A GRAFICA CU UTILIZATORUL
setRows setCols
GridLayout
import java.awt.*;
public class TestGridLayout {
public static void main(String args[]) {
Frame f = new Frame("Grid Layout");
f.setLayout(new GridLayout(3, 2));
f.add(new Button("1"));
f.add(new Button("2"));
f.add(new Button("3"));
f.add(new Button("4"));
f.add(new Button("5"));
f.add(new Button("6"));
f.pack();
f.show();
}
}
CardLayout
9.3. GESTIONAREA POZITIONARI I
JTabbedPane
CardLayout
import java.awt.*;
import java.awt.event.*;
add(butoane , BorderLayout.NORTH);
add(tab , BorderLayout.CENTER);
pack();
show();
CAPITOLUL 9. INTERFAT A GRAFICA CU UTILIZATORUL
card1.addActionListener(this);
card2.addActionListener(this);
}
GridLayout
GridLayout
GridBagConstraints
container.setLayout(gridBag);
GridBagConstraints c = new GridBagConstraints();
//Specificam restrictiile referitoare la afisarea componentei
. . .
gridBag.setConstraints(componenta, c);
container.add(componenta);
GridBagLayout
GridBagConstraints
gridBag.setConstraints(componenta1, c);
gridBag.setConstraints(componenta2, c);
. . .
GridBagConstraints
gridx, gridy
gridwidth, gridheight
fill
HORIZONTAL VERTICAL,
BOTH, NONE
insets
anchor
weigthx, weighty
CAPITOLUL 9. INTERFAT A GRAFICA CU UTILIZATORUL
GridBagLayout
import java.awt.*;
gridBag.setConstraints(comp , gbc);
f.add(comp);
}
f.setLayout(gridBag);
f.pack();
f.show();
}
}
CAPITOLUL 9. INTERFAT A GRAFICA CU UTILIZATORUL
panel
Container
setLayout
Panel FlowLayout
import java.awt.*;
public class TestPanel {
public static void main(String args[]) {
Frame f = new Frame("Test Panel");
f.add(intro , BorderLayout.NORTH);
f.add(lista , BorderLayout.CENTER);
f.add(control , BorderLayout.SOUTH);
f.pack();
f.show();
}
}
eveniment
surse de evenimente
CAPITOLUL 9. INTERFAT A GRAFICA CU UTILIZATORUL
ActionEvent
TextEvent
ActionEvent ActionListener
TextEvent TextListener
Component TipEveniment
TipEveniment
addXXXListener XXX
import java.awt.*;
import java.awt.event.*;
CAPITOLUL 9. INTERFAT A GRAFICA CU UTILIZATORUL
Ascultator
Fereastra
9.4. TRATAREA EVENIMENT ELOR
import java.awt.*;
import java.awt.event.*;
ok.addActionListener(this);
exit.addActionListener(this);
// Ambele butoane sunt ascultate in clasa Fereastra
// deci ascultatorul este instanta curenta: this
}
if (e.getSource () == exit)
System.exit(0); // Terminam aplicatia
if (e.getSource () == ok) {
n ++;
this.setTitle("Ati apasat OK de " + n + " ori");
}
}
}
ComponentEvent
ContainerEvent
FocusEvent
KeyEvent
MouseEvent
WindowEvent
ActionEvent
AdjustmentEvent
ItemEvent
TextEvent
9.4. TRATAREA EVENIMENT ELOR
Component
Component ComponentListener
FocusListener
KeyListener
MouseListener
MouseMotionListener
Container ContainerListener
Window WindowListener
Button
List ActionListener
MenuItem
TextField
Choice
Checkbox ItemListener
List
CheckboxMenuItem
Scrollbar AdjustmentListener
TextField TextListener
TextArea
MouseEvent
MouseListener MouseMotionListener
CAPITOLUL 9. INTERFAT A GRAFICA CU UTILIZATORUL
ActionListener actionPerformed(ActionEvent e)
AdjustmentListener adjustmentValueChanged(AdjustmentEvent e)
componentHidden(ComponentEvent e)
ComponentListener componentMoved(ComponentEvent e)
componentResized(ComponentEvent e)
componentShown(ComponentEvent e)
ContainerListener componentAdded(ContainerEvent e)
componentRemoved(ContainerEvent e)
FocusListener focusGained(FocusEvent e)
focusLost(FocusEvent e)
ItemListener itemStateChanged(ItemEvent e)
keyPressed(KeyEvent e)
KeyListener keyReleased(KeyEvent e)
keyTyped(KeyEvent e)
mouseClicked(MouseEvent e)
mouseEntered(MouseEvent e)
MouseListener mouseExited(MouseEvent e)
mousePressed(MouseEvent e)
mouseReleased(MouseEvent e)
MouseMotionListener mouseDragged(MouseEvent e)
mouseMoved(MouseEvent e)
TextListener textValueChanged(TextEvent e)
windowActivated(WindowEvent e)
windowClosed(WindowEvent e)
windowClosing(WindowEvent e)
WindowListener windowDeactivated(WindowEvent e)
windowDeiconified(WindowEvent e)
windowIconified(WindowEvent e)
windowOpened(WindowEvent e)
9.4. TRATAREA EVENIMENT ELOR
ActionEvent getActionCommand
CAPITOLUL 9. INTERFAT A GRAFICA CU UTILIZATORUL
windoClosing dispose
System.exit
WindowListener
WindowListener
import java.awt.*;
import java.awt.event.*;
windowClosing
9.4. TRATAREA EVENIMENT ELOR
adaptor
WindowListener WindowAdapter
WindowAdapter
import java.awt.*;
import java.awt.event.*;
Fereastra WindowAdapter
Frame Ascultator
XXXListener XXXAdapter
ActionListener
AdjustemnrListener
ComponentListener ComponentAdapter
ContainerListener ContainerAdapter
FocusListener FocusAdapter
ItemListener
KeyListener KeyAdapter
MouseListener MouseAdapter
MouseMotionListener MouseMotionAdapter
TextListener
WindowListener WindowAdapter
9.4. TRATAREA EVENIMENT ELOR
import java.awt.*;
import java.awt.event.*;
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
// Terminam aplicatia
System.exit(0);
}
});
this.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
// Desenam un cerc la fiecare click de mouse
label.setText("Click... ");
Graphics g = Fereastra.this.getGraphics();
g.setColor(Color.blue);
int raza = (int)(Math.random() * 50);
g.fillOval(e.getX(), e.getY(), raza , raza);
}
});
this.addMouseMotionListener(new MouseMotionAdapter() {
public void mouseMoved(MouseEvent e) {
// Desenam un punct la coordonatele mouse -ului
Graphics g = Fereastra.this.getGraphics();
g.drawOval(e.getX(), e.getY(), 1, 1);
}
});
CAPITOLUL 9. INTERFAT A GRAFICA CU UTILIZATORUL
this.addKeyListener(new KeyAdapter() {
public void keyTyped(KeyEvent e) {
// Afisam caracterul tastat
label.setText("Ati tastat: " + e.getKeyChar() + "");
}
});
}
}
Container
fereastra principala
Window
Window
show
hide
show
9.5. FOLOSIREA FERESTRELOR
isShowing
dispose
pack
getFocusOwner
Window
fereastra principala
show Window
import java.awt.*;
public class TestFrame {
public static void main(String args[]) {
Frame f = new Frame("Titlul ferestrei");
f.show();
}
}
Frame
Frame
import java.awt.*;
class Fereastra extends Frame{
// Constructorul
public Fereastra(String titlu) {
super(titlu);
...
}
CAPITOLUL 9. INTERFAT A GRAFICA CU UTILIZATORUL
}
public class TestFrame {
public static void main(String args[]) {
Fereastra f = new Fereastra("Titlul ferestrei");
f.show();
}
}
Frame BorderLayout
pack
WindowListener
WindowAdapter
Fereastra
import java.awt.*;
import java.awt.event.*;
// Constructorul
public Fereastra(String titlu) {
super(titlu);
// Stabilim dimensiunile
pack(); // implicit
//sau explicit
// setSize (200, 200);
}
// O facem vizibila
f.show();
}
}
Window
getFrames
setIconImage
setMenuBar
setTitle
CAPITOLUL 9. INTERFAT A GRAFICA CU UTILIZATORUL
setResizable
ferestre
de dialog casete de dialog
Window
Frame
fereastra parinte
Dialog
Dialog(Frame parinte)
Dialog(Frame parinte, String titlu)
Dialog(Frame parinte, String titlu, boolean modala)
Dialog(Frame parinte, boolean modala)
Dialog(Dialog parinte)
Dialog(Dialog parinte, String titlu)
Dialog(Dialog parinte, String titlu, boolean modala)
9.5. FOLOSIREA FERESTRELOR
true false
Dialog
import java.awt.*;
import java.awt.event.*;
// Fereastra principala
class FerPrinc extends Frame implements ActionListener{
CAPITOLUL 9. INTERFAT A GRAFICA CU UTILIZATORUL
setLayout(new FlowLayout());
setSize (300, 80);
Button b = new Button("Schimba titlul");
add(b);
b.addActionListener(this);
}
// Fereastra de dialog
class FerDialog extends Dialog implements ActionListener {
public String raspuns = null;
private TextField text;
private Button ok, cancel;
add(panel , BorderLayout.SOUTH);
pack();
text.addActionListener(this);
ok.addActionListener(this);
cancel.addActionListener(this);
show();
}
// Clasa principala
public class TestDialog {
public static void main(String args[]) {
FerPrinc f = new FerPrinc("Fereastra principala");
f.show();
}
}
java.awt
FileDialog Dialog
FileDialog(Frame parinte)
CAPITOLUL 9. INTERFAT A GRAFICA CU UTILIZATORUL
FileDialog.LOAD
FileDialog.SAVE
FileDialog
show
setVisible(true)
Dialog FileDialog
getFile, getDirectory
setFilenameFilter
FileDialog
TestFileDialog.java
import java.awt.*;
import java.awt.event.*;
import java.io.*;
b.addActionListener(this);
}
// Specificam filtrul
fd.setFilenameFilter(new FilenameFilter() {
public boolean accept(File dir, String numeFis) {
return (numeFis.endsWith(".java"));
}
});
// Afisam fereastra de dialog (modala)
fd.show();
FileDialog
JFileChooser
CAPITOLUL 9. INTERFAT A GRAFICA CU UTILIZATORUL
Component
MenuBar
Menu
9.6. FOLOSIREA MENIURILOR
Frame
MenuContainer
Frame
Component MenuComponent
getName, setName, getFont, setFont
Frame
setMenuBar Frame
MenuItem
MenuShortcut
tear-o
MenuItem
MenuItem, Menu sau CheckboxMenuItem
CheckboxMenuItem
Checkbox ItemSelectable
9.6. FOLOSIREA MENIURILOR
import java.awt.*;
import java.awt.event.*;
editare.addSeparator();
editare.add(new CheckboxMenuItem("Bold"));
editare.add(new CheckboxMenuItem("Italic"));
mb.add(fisier);
mb.add(editare);
f.setMenuBar(mb);
f.setSize(200, 100);
f.show();
}
}
CAPITOLUL 9. INTERFAT A GRAFICA CU UTILIZATORUL
MenuItem
CheckboxMenuItem
actionPerformed
itemStatChanged
addActionListener
addItemListener
MenuItem
CheckboxMenuItem
List, Choice, CheckBox ItemSelectable
ItemEvent.SELECTED
ItemEvent.DESELECTED
import java.awt.*;
import java.awt.event.*;
test.add(check);
test.addSeparator ();
test.add(new MenuItem("Exit"));
mb.add(test);
setMenuBar(mb);
test.addActionListener(this);
check.addItemListener(this);
btnExit.addActionListener(this);
}
Menu
CAPITOLUL 9. INTERFAT A GRAFICA CU UTILIZATORUL
MouseEvent
isPopupTrigger
MouseEvent
fereastra.add(popup1);
...
fereastra.remove(popup1);
fereastra.add(popup2);
9.6. FOLOSIREA MENIURILOR
import java.awt.*;
import java.awt.event.*;
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
this.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
if (e.isPopupTrigger())
popup.show(origin , e.getX(), e.getY());
}
public void mouseReleased(MouseEvent e) {
if (e.isPopupTrigger())
popup.show(origin , e.getX(), e.getY());
}
});
setSize(300, 300);
}
}
acceleratori
MenuItem
MenuItem
MenuItem(String eticheta, MenuShortcut accelerator)
// Ctrl+O
new MenuItem("Open", new MenuShortcut(KeyEvent.VK_O));
// Ctrl+P
new MenuItem("Print", new MenuShortcut(p));
// Ctrl+Shift+P
new MenuItem("Preview", new MenuShortcut(p), true);
9.7. FOLOSIREA COMPONENTELOR AWT
Label
Label
import java.awt.*;
public class TestLabel {
public static void main(String args[]) {
Frame f = new Frame("Label");
f.add(nord , BorderLayout.NORTH);
f.add(sud , BorderLayout.SOUTH);
f.add(est , BorderLayout.EAST);
f.add(vest , BorderLayout.WEST);
CAPITOLUL 9. INTERFAT A GRAFICA CU UTILIZATORUL
f.add(centru , BorderLayout.CENTER);
f.pack();
f.show();
}
}
Button
Button
import java.awt.*;
import java.awt.event.*;
setLayout(null);
setSize (200, 120);
b1.setBackground(Color.orange);
add(b1);
b1.addActionListener(this);
b2.addActionListener(this);
}
Checkbox
CAPITOLUL 9. INTERFAT A GRAFICA CU UTILIZATORUL
Checkbox
import java.awt.*;
import java.awt.event.*;
add(label1);
add(label2);
add(cbx1);
add(cbx2);
add(cbx3);
9.7. FOLOSIREA COMPONENTELOR AWT
setSize(200, 200);
cbx1.addItemListener(this);
cbx2.addItemListener(this);
cbx3.addItemListener(this);
}
CheckboxGroup
bu-
toane radio Component
Checkbox
CAPITOLUL 9. INTERFAT A GRAFICA CU UTILIZATORUL
CheckboxGroup
import java.awt.*;
import java.awt.event.*;
add(label1);
add(label2);
add(cbx1);
9.7. FOLOSIREA COMPONENTELOR AWT
add(cbx2);
add(cbx3);
setSize(200, 200);
cbx1.addItemListener(this);
cbx2.addItemListener(this);
cbx3.addItemListener(this);
}
Choice
Choice
CAPITOLUL 9. INTERFAT A GRAFICA CU UTILIZATORUL
Choice
import java.awt.*;
import java.awt.event.*;
add(label);
add(culori);
culori.addItemListener(this);
}
}
}
}
List
List
import java.awt.*;
import java.awt.event.*;
add(label);
add(culori);
culori.addItemListener(this);
}
Scrollbar
ScrollBar
import java.awt.*;
import java.awt.event.*;
setSize(200, 80);
scroll.addAdjustmentListener(this);
}
ScrollPane
List
ScrollPane
import java.awt.*;
import java.awt.event.*;
}
});
sp = new ScrollPane(ScrollPane.SCROLLBARS_ALWAYS);
sp.add(list);
add(sp, BorderLayout.CENTER);
setSize(200, 200);
}
TextField
CAPITOLUL 9. INTERFAT A GRAFICA CU UTILIZATORUL
TextField
import java.awt.*;
import java.awt.event.*;
nume.addTextListener(this);
parola.addTextListener(this);
}
9.7. FOLOSIREA COMPONENTELOR AWT
TextArea
TextArea
import java.awt.*;
CAPITOLUL 9. INTERFAT A GRAFICA CU UTILIZATORUL
import java.awt.event.*;
import java.io.*;
setBackground(Color.lightGray);
text = new TextArea("", 30, 10, TextArea.
SCROLLBARS_VERTICAL_ONLY);
nume = new TextField("", 12);
salvare = new Button("Salveaza text");
salvare.setEnabled(false);
add(fisier , BorderLayout.NORTH);
add(text , BorderLayout.CENTER);
add(salvare , BorderLayout.SOUTH);
text.addTextListener(this);
salvare.addActionListener(this);
}
Component
paint
update
paint update
contextul grafic
paint
repaint
paint
paint paint
Component
paint
paint
Frame
10.1. CONCEPTUL DE DESENARE
paint
import java.awt.*;
class Fereastra extends Frame {
public Fereastra(String titlu) {
super(titlu);
setSize(200, 100);
}
paint
paint
CAPITOLUL 10. DESENAREA
Canvas
paint
plansa
getPreferredSize
getMinimumSize getMaximumSize
Canvas
paint
getPreferredSize getMinimumSize,
getMaximumSize
add
return ...;
}
public Dimension getMinimumSize() {
return ...
}
public Dimension getMaximumSize() {
return ...
}
// Implementarea metodelor interfetelor de tip Listener
...
}
Canvas
import java.awt.*;
import java.awt.event.*;
public Plansa() {
this.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
index = 1 - index;
repaint();
}
});
}
return dim;
}
}
context grafic
paint update
Graphics
10.2. CONTEXT UL GRAFIC DE DESENARE
Graphics
Color getColor()
void setColor(Color c)
Font getFont()
void setFont(Font f)
translate(int x, int y)
Shape getClip()
void setClip(Shape s)
void setXorMode(Color c)
void setPaintMode(Color c)
drawString
drawLine
drawPolyline
drawRect
fillRect
clearRect
draw3DRect
fill3DRect
drawRoundRect
fillRoundRect
drawPolygon
fillPolygon
drawOval
fillOval
drawArc
fillArc
Label Graphics
drawString
Component Graphics
nclinat (italic)
10.3. FOLOSIREA FONTURILOR
Font
// In metoda paint(Graphics g)
g.setFont(new Font("Courier", Font.BOLD, 10));
g.drawString("Alt text", 10, 20);
import java.awt.*;
public Fonturi() {
fonturi = GraphicsEnvironment.
getLocalGraphicsEnvironment().getAllFonts();
canvasSize.height = (1 + fonturi.length) * 20;
}
drawString
Font
FontMetrics
metrica
CAPITOLUL 10. DESENAREA
FontMetrics
getHeight
stringWidth
charWidth
10.3. FOLOSIREA FONTURILOR
import java.awt.*;
. .
Color
10.4. FOLOSIREA CULORILOR
Color
SystemColor
Color
Color(float red, flot green, float blue)
Color(flot red, float green, float blue, float alpha)
Color(int red, int green, int blue)
Color(int red, int green, int blue, int alpha)
Color(int rgb)
r ed gr een blue alpha
int
. . float .
.
CAPITOLUL 10. DESENAREA
Color
brighter
darker
getRed
getGreen
getBlue
getAlpha
getRGB
import java.awt.*;
import java.awt.event.*;
g.setColor(color);
g.fillRect(0, 0, canvasSize.width , canvasSize.height);
}
aValue.setValue (255);
aValue.setBackground(Color.lightGray);
rgbValues.add(rValue);
rgbValues.add(gValue);
rgbValues.add(bValue);
rgbValues.add(aValue);
rgbValues.setSize(200, 100);
add(rgbValues , BorderLayout.CENTER);
pack();
rValue.addAdjustmentListener(this);
gValue.addAdjustmentListener(this);
bValue.addAdjustmentListener(this);
aValue.addAdjustmentListener(this);
}
gif
jpeg
Component
Image
Image
Applet Toolkit
Toolkit getDefaultToolkit
getImage
Image
Graphics
paint
boolean drawImage(Image img, int x, int y, ImageObserver observer)
boolean drawImage(Image img, int x, int y, Color bgcolor,
ImageObserver observer)
boolean drawImage(Image img, int x, int y, int width, int height,
ImageObserver observer)
boolean drawImage(Image img, int x, int y, int width, int height,
Color bgcolor, ImageObserver observer)
i mg
x, y
obser ver
bgColor
drawImage
Image img = Toolkit.getDefaultToolkit().getImage("taz.gif");
g.drawImage(img, 0, 0, this);
g.drawImage(img, 0, 200, 100, 100, this);
g.drawImage(img, 200, 0, 200, 400, Color.yellow, this);
10.5. FOLOSIREA IMAGINILOR
drawImage true
false
drawImage
drawImage
Component
ImageObserver
repaint
f lags
CAPITOLUL 10. DESENAREA
ABORT
ALLBITS
ERROR
FRAMEBITS
HEIGHT
PROPERTIES
SOMEBITS
WIDTH
f lags
gmem.dispose();
}
}
com.sun.image.codec.jpeg
CAPITOLUL 10. DESENAREA
import com.sun.image.codec.jpeg.*;
import java.awt.image.BufferedImage;
import java.awt.*;
import java.io.*;
class JPEGWriter {
try {
FileOutputStream out = new FileOutputStream(filename);
JPEGImageEncoder encoder =
JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParam jep =
encoder.getDefaultJPEGEncodeParam(img);
jep.setQuality(quality, false);
out.close();
} catch( Exception e ) {
e.printStackTrace();
}
}
}
java.awt.image
10.6. TIPARIREA
MemoryImageSource
MemoryImageSource(int w, int h, int[] pixeli, int off, int scan)
w, h
pi xeli
of f , scan
int w = 100;
int h = 100;
int[] pix = new int[w * h];
int index = 0;
for (int y = 0; y < h; y++) {
for (int x = 0; x < w; x++) {
int red = (int) (Math.random() * 255);
int green = (int) (Math.random() * 255);
int blue = (int) (Math.random() * 255);
pix[index++] = new Color(red, green, blue).getRGB();
}
paint
paint print
print
return Printable.PAGE_EXISTS;
}
PrinterJob.getPrinterJob
setPrintable
Printable
printDialog
10.6. TIPARIREA
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.print.*;
paint(g);
g.drawString("Numai la imprimanta", 200, 300);
return Printable.PAGE_EXISTS;
}
}
System.exit (0);
}
});
add(plansa , BorderLayout.CENTER);
print.addActionListener(this);
pack();
}
import java.io.*;
import java.awt.*;
class TestPrintText {
public static void main(String args[]) throws Exception {
// pentru Windows
PrintWriter imp = new PrintWriter(new FileWriter("lpt1"))
;
// pentru UNIX
//PrintWriter imp = new PrintWriter(new FileWriter("/dev/
lp"));
imp.println("Test imprimanta");
imp.println("ABCDE");
imp.close();
}
}
CAPITOLUL 10. DESENAREA
javax.accessibility javax.swing.plaf
javax.swing.text.html javax.swing
javax.swing.plaf.basic javax.swing.text.parser
javax.swing.border javax.swing.plaf.metal
javax.swing.text.rtf javax.swing.colorchooser
javax.swing.plaf.multi javax.swing.tree
javax.swing.event javax.swing.table
javax.swing.undo javax.swing.filechooser
javax.swing.text
11.1. INTRODUCERE
JLabel, JButton, JCheckBox, JRadioButton, JToggleButton, JScrollBar,
JSlider, JProgressBar, JSeparator
JTable, JTree, JComboBox, JSpinner, JList, JFileChooser, JColorChooser,
JOptionPane
JTextField, JFormattedTextField, JPasswordField, JTextArea,
JEditorPane, JTextPane
JMenuBar, JMenu, JPopupMenu, JMenuItem, JCheckboxMenuItem,
JRadioButtonMenuItem
JPanel, JScrollPane, JSplitPane, JTabbedPane, JDesktopPane,
JToolBar
JFrame, JDialog, JWindow, JInternalFrame, JApplet
java.awt.Button javax.swing.JButton
java.awt.Label javax.swing.JLabel
CAPITOLUL 11. SWING
java.awt
Color, Font, Dimension
java.awt.event
javax.swing.event
BoxLayout SpringLayout
setFont
setColor
import java.awt.*;
import java.awt.event.*;
add(b);
pack();
show();
}
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
public static void main(String args[]) {
new ExempluAWT("Hello");
}
}
JFrame
Container
11.2. FOLOSIREA FERESTRELOR
Container
Frame JFrame
WindowConstants
JFrame
jf.setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE);
jf.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JMenuBar
JFrame
JInternalFrame
JFrame
DesktopPane
import javax.swing.*;
import java.awt.*;
fin2.moveToFront();
}
}
public FereastraInterna() {
super("Document #" + (++n),
11.3. CLASA JCOMPONENT
true , //resizable
true , //closable
true , //maximizable
true);//iconifiable
setLocation(x*n, y*n);
setSize(new Dimension(200, 100));
}
}
public class TestInternalFrame {
public static void main(String args[]) {
new FereastraPrincipala("Test ferestre interne").show();
}
}
JComponent
JFrame JDialog JApplet
JComponent Container Component
JComponent
setToolTip
CAPITOLUL 11. SWING
setBorder
setOpaque
false
KeyEvent KeyListener
JComponent
11.3. CLASA JCOMPONENT
// Folosirea chenarelor
Border lowered , raised;
TitledBorder title;
lowered = BorderFactory.createLoweredBevelBorder();
raised = BorderFactory.createRaisedBevelBorder();
title = BorderFactory.createTitledBorder("Borders");
// Controlul opacitatii
JButton btn1 = new JButton("Opaque");
btn1.setOpaque(true); // implicit
panel.add(btn1);
// ToolTips
label1.setToolTipText("Eticheta coborata");
label2.setToolTipText("Eticheta ridicata");
CAPITOLUL 11. SWING
btn1.setToolTipText("Buton opac");
// Textul poate fi HTML
btn2.setToolTipText("<html ><b>Apasati <font color=red >F2
</font > " +
"cand butonul are <u>focusul </u>");
pack();
}
}
MVC (model-
view-controller)
Modelul
11.5. FOLOSIREA MODELELOR
Prezentarea
Controlul
model separabil
JList ListModel
DefaultListModel AbstractListModel
import javax.swing.*;
import javax.swing.border.*;
import java.awt.*;
import java.awt.event.*;
pack();
}
getValue JSlider
getModel().getValue()
JTable JTree
listener
ce anume
BoundedRangeModel ButtonModel
SingleSelectionModel
M odel L ist ener T ip Eveni m ent
BoundedRangeModel ChangeList ener ChangeEvent
But t onModel ChangeList ener ChangeEvent
SingleSelect ionModelModel ChangeList ener ChangeEvent
ChangeListener
public void stateChanged(ChangeEvent e)
addChangeListener removeChangeListener
new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
// Schimbarea este continuta in eveniment
if (!e.getValueIsAdjusting()) {
System.out.println("Selectie curenta: " +
e.getFirstIndex());
}
}
});
JLabel
JButton, JCheckBox, JRadioButton,
JToggleButton
ButtonGroup
JSlider, JProgressBar, JScrollBar
JSeparator
javax.swing.text
11.6. FOLOSIREA COMPONENTELOR
NumberFormatter
DateFormatter MaskFormatter
getText setText
JScrollPane
CAPITOLUL 11. SWING
JEditorPane
JTextComponent
TextComponent
undo redo
JTextComponent
document
getDocument
Document
editor kit
JTextField
11.6. FOLOSIREA COMPONENTELOR
caretUpdate
insertUpdate
removeUpdate
changedUpdate
propertyChange
JList
JScrollPane
CAPITOLUL 11. SWING
getElementAt
getSize
...
class ModelLista extends AbstractListModel {
Object elemente[] = {"Unu", "Doi", new Integer(3), new Double(4)};
public int getSize() {
return elemente.length;
}
public Object getElementAt(int index) {
return elemente[index];
}
}
JList
// Adaugam un ascultator
ListSelectionModel model = list.getSelectionModel();
model.addListSelectionListener(this);
...
}
...
}
}
renderer
ListCellRenderer
Component
JComboBox JList
11.6. FOLOSIREA COMPONENTELOR
JComboBox JList
JComboBox
setEditable
JComboBox ItemEvent
ActionEvent
JSpinner
JSpiner
SpinnerListModel SpinnerNumberModel
SpinnerDateModel
CAPITOLUL 11. SWING
JSpinner.ListEditor JSpinner.NumberEditor
JSpinner.DateEditor JSpinner.DefaultEditor
JSpinner ChangeEvent
JTable javax.swing
Vector
String[] coloane = {"Nume", "Varsta", "Student"};
Object[][] elemente = {
{"Ionescu", new Integer(20), Boolean.TRUE},
{"Popescu", new Integer(80), Boolean.FALSE}};
JTable tabel = new JTable(elemente, coloane);
11.6. FOLOSIREA COMPONENTELOR
JTable
TableModel
return elemente.length;
}
public Object getValueAt(int row, int col) {
return elemente[row][col];
}
public String getColumnName(int col) {
return coloane[col];
}
public boolean isCellEditable(int row, int col) {
// Doar numele este editabil
return (col == 0);
}
}
// Adaugam un ascultator
ListSelectionModel model = tabel.getSelectionModel();
model.addListSelectionListener(this);
...
}
renderer
CAPITOLUL 11. SWING
renderer
TableRenderer
CellEditor
TreeCellEditor
JTree
JTree javax.swing
JTree
new DefaultMutableTreeNode("Siruri");
root.add(numere);
root.add(siruri);
toString
listener
// Adaugam un ascultator
tree.addTreeSelectionListener(this);
...
}
11.6. FOLOSIREA COMPONENTELOR
ren-
derer
TreeCellRenderer
setRootVisible
setShowsRootHandles
putClientProperty
tree.putClientProperty("JTree.lineStyle", "Angled");
// sau "Horizontal", "None"
DefaultTreeCellRenderer renderer =
new DefaultTreeCellRenderer();
renderer.setLeafIcon(leaf);
renderer.setOpenIcon(open);
renderer.setClosedIcon(closed);
tree.setCellRenderer(renderer);
JPanel
JScrollPane
JTabbedPane
JSplitPane
JLayeredPane
JDesktopPane
JRootPane
Panel
FlowLayout
11.6. FOLOSIREA COMPONENTELOR
JPanel setLayout
add
JPanel p = new JPanel(new BorderLayout());
/* Preferabil, deoarece nu mai este construit si
un obiect de tip FlowLayout (implicit)
*/
p.add(new JLabel("Hello"));
p.add(new JButton("OK"));
...
JPanel
CAPITOLUL 11. SWING
CardLayout
frame.getContentPane().add(sp2);
JDialog
CAPITOLUL 11. SWING
JOptionPane.showMessageDialog(frame,
"Eroare de sistem !", "Eroare",
JOptionPane.ERROR_MESSAGE);
JOptionPane.showConfirmDialog(frame,
"Doriti inchiderea aplicatiei ? ", "Intrebare",
JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE);
11.7. DESENAREA
paint
double-bu ering
repaint
CAPITOLUL 11. SWING
Canvas paint
JLabel JButton
setOpaque
setOpaque(false)
setOpaque(true)
getSize, getWidth,
getHeight
11.7. DESENAREA
paintComponent
Graphics
paintComponent
Graphics
// 1.Explicit
Graphics2D g2d = (Graphics2D)g;
g2d.translate(x, y); // modificam contexul
...
g2d.translate(-x, -y); // revenim la starea initiala
CAPITOLUL 11. SWING
javax.swing.plaf.metal.MetalLookAndFeel
com.sun.java.swing.plaf.windows.WindowsLookAndFeel
com.sun.java.swing.plaf.mac.MacLookAndFeel
com.sun.java.swing.plaf.motif.MotifLookAndFeel
com.sun.java.swing.plaf.gtk.GTKLookAndFeel
GNU I mage
Manipulation Program Toolkit
11.8. LOOK AND FEEL
swing.gtkthemefile
UIManager
getLookAndFeel
LookAndFeel
setLookAndFeel
LookAndFeel
getSystemLookAndFeelClassName
getCrossPlatformLookAndFeelClassName
// Exemple:
UIManager.setLookAndFeel(
"com.sun.java.swing.plaf.motif.MotifLookAndFeel");
UIManager.setLookAndFeel(
UIManager.getSystemLookAndFeelClassName());
CAPITOLUL 11. SWING
java -Dswing.defaultlaf=
com.sun.java.swing.plaf.gtk.GTKLookAndFeel App
java -Dswing.defaultlaf=
com.sun.java.swing.plaf.windows.WindowsLookAndFeel App
swing.properties lib
# Swing properties
swing.defaultlaf=
com.sun.java.swing.plaf.windows.WindowsLookAndFeel
UIManager.setLookAndFeel
swing.defaultlaf
swing.defaultlaf swing.properties
UIManager.setLookAndFeel(numeClasaLF);
SwingUtilities.updateComponentTreeUI(f);
f.pack();
proces
fir de executie
CAPIT OLUL 12. FIRE DE EXECUTIE
procese
usoare
context de executie
12.2. CREAREA UNUI FIR DE EXECUTIE
Thread
Runnable
run
Runnable
Runnable
run
Thread
Thread run
setName
run
Thread
// Lansam in executie
fir.start();
Thread
class AfisareNumere extends Thread {
private int a, b, pas;
fir1.start();
fir2.start();
// Pornim firele de executie
// Ele vor fi distruse automat la terminarea lor
}
}
fir1
0 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100
100 110 120 130 140 150 160 170 180 190 200
0 100 5 110 10 120 15 130 20 140 25 150 160 170 180 190 200
30 35 40 45 50 55 60 65 70 75 80 85 90 95 100
Thread
Runnable Thread
Runnable
Runnable
Thread
Runnable java.lang
CAPIT OLUL 12. FIRE DE EXECUTIE
Runnable run
clasa activa
public class ClasaActiva implements Runnable {
Thread
Runnable
Thread
new Thread
start
public FirExecutie()
if (fir == null) {
fir = new Thread(this);
12.2. CREAREA UNUI FIR DE EXECUTIE
fir.start();
}
}
this Thread
run
FirExecutie
run
start run
Runnable
Canvas
Runnable
import java.awt.*;
import java.awt.event.*;
x = (int)(Math.random() * dim.width);
y = (int)(Math.random() * dim.height);
r = (int)(Math.random() * 100);
try {
Thread.sleep (50);
} catch(InterruptedException e) {}
repaint();
}
}
}
Thread
start start
IllegalThreadStateException
start
fir.start();
//fir se gaseste in starea "Runnable"
start
run
sleep
wait
CAPIT OLUL 12. FIRE DE EXECUTIE
sleep Thread
InterruptedException
try-cacth
try {
// Facem pauza de o secunda
Thread.sleep(1000);
} catch (InterruptedException e) {
...
}
Thread
sleep
notify notifyAll
12.3. CICLUL DE VIAT A AL UNUI FIR DE EXECUTIE
run
stop Thread
run
run
// Primul exemplu
public void run() {
for(int i = a; i <= b; i += pas)
System.out.print(i + " " );
}
run
CAPIT OLUL 12. FIRE DE EXECUTIE
import java.io.*;
null
gc
System.exit
12.3. CICLUL DE VIAT A AL UNUI FIR DE EXECUTIE
true
false
fir.start();
// isAlive retuneaza true (starea este Runnable)
fir.executie = false;
// isAlive retuneaza false (starea este Dead)
demoni
}
}
System.out.println("Apasati Enter...");
System.in.read();
planificare (scheduling)
Thread
12.3. CICLUL DE VIAT A AL UNUI FIR DE EXECUTIE
Modelul cooperativ
Modelul preemptiv
run
yield
CAPIT OLUL 12. FIRE DE EXECUTIE
egoist
s1.start();
s2.start();
}
}
s
s
yield
Thread
sleep yield
yeld
...
Firul 1 a ajuns la 31900
Firul 1 a ajuns la 32000
Firul 2 a ajuns la 100
Firul 1 a ajuns la 32100
Firul 2 a ajuns la 200
Firul 2 a ajuns la 300
...
CAPIT OLUL 12. FIRE DE EXECUTIE
pro-
ducatorului/ consumatorului
Producatorul
Consumatorul
Buffer
12.3. CICLUL DE VIAT A AL UNUI FIR DE EXECUTIE
Buffer
Buffer
class Buffer {
private int number = -1;
Producator Consumator
Buffer
Producator Consumator
class Producator extends Thread {
private Buffer buffer;
public Producator(Buffer b) {
buffer = b;
}
public Consumator(Buffer b) {
buffer = b;
CAPIT OLUL 12. FIRE DE EXECUTIE
Consumatorul a primit: -1
Consumatorul a primit: -1
Producatorul a pus: 0
Consumatorul a primit: 0
Consumatorul a primit: 0
Consumatorul a primit: 0
Consumatorul a primit: 0
Consumatorul a primit: 0
Consumatorul a primit: 0
Consumatorul a primit: 0
Consumatorul a primit: 0
Producatorul a pus: 1
Producatorul a pus: 2
Producatorul a pus: 3
Producatorul a pus: 4
Producatorul a pus: 5
12.3. CICLUL DE VIAT A AL UNUI FIR DE EXECUTIE
Producatorul a pus: 6
Producatorul a pus: 7
Producatorul a pus: 8
Producatorul a pus: 9
Buffer
Producator Consumator
Buffer
Buffer
Buffer
Thread
wait, notify, notifyAll
Buffer
CAPIT OLUL 12. FIRE DE EXECUTIE
Buffer
class Buffer {
private int number = -1;
private boolean available = false;
Producatorul a pus: 0
Consumatorul a primit: 0
Producatorul a pus: 1
Consumatorul a primit: 1
...
Producatorul a pus: 9
Consumatorul a primit: 9
12.3. CICLUL DE VIAT A AL UNUI FIR DE EXECUTIE
sectiune critica
synchronized
Buffer
put
buffer
CAPIT OLUL 12. FIRE DE EXECUTIE
get
public synchronized void put(int number) {
// buffer blocat de producator
...
// buffer deblocat de producator
}
public synchronized int get() {
// buffer blocat de consumator
...
// buffer deblocat de consumator
}
class MonitoareFine {
//Cele doua resurse ale obiectului
Resursa x, y;
...
synchronized(xLacat) {
synchronized(yLacat) {
// Accesam x si y
}
}
...
synchronized(this) {
// Accesam x si y
}
}
}
synchronized
Buffer
number
false
Buffer
Thread
void wait( )
void wait( long timeout )
void wait( long timeout, long nanos )
wait
wait InterruptedException
notifyAll
notify
Buffer
class Buffer {
private int number = -1;
12.3. CICLUL DE VIAT A AL UNUI FIR DE EXECUTIE
volatile
class TestVolatile {
boolean test;
public void metoda() {
test = false;
// *
if (test) {
// Aici se poate ajunge...
}
}
}
12.4. GRUPAREA FIRELOR DE EXECUTIE
test
false if
test true
if
volatile
ThreadGroup
CAPIT OLUL 12. FIRE DE EXECUTIE
main
Thread
public Thread(ThreadGroup group, Runnable target)
public Thread(ThreadGroup group, String name)
public Thread(ThreadGroup group, Runnable target, String name)
getThreadGroup
Thread
main
12.4. GRUPAREA FIRELOR DE EXECUTIE
ThreadGroup
// Le afisam
for (int i=0; i < n; i++)
System.out.println("Thread #" + i + "=" +
lista[i].getName());
}
}
CAPIT OLUL 12. FIRE DE EXECUTIE
public PipedReader(PipedWriterpw)
public PipedWriter(PipedReaderpr)
PipedWriter PipedReader
DataOutputStream
DataInputStream
import java.io.*;
p1.start();
c1.start();
}
}
Timer
Timer
TimerTask
12.6. CLASELE TIMER SI TIMERTASK
Actiune TimerTask
run
Timer
Actiune
Actiune
schedule Timer
task delay
ti me
per i od
run
cancel
System.exit
CAPIT OLUL 12. FIRE DE EXECUTIE
Timer TimerTask
import java.util.*;
import java.awt.*;
datagrame
Internet Protocol
193.231.30.131 numerica
simbolica thor.infoiasi.ro
port
java.net
13.2. LUCRUL CU URL-URI
URL DatagramPacket
URLConnection DatagramSocket
Socket MulticastSocket
ServerSocket
http://java.sun.com
http://students.infoiasi.ro/index.html
http://www.infoiasi.ro/~acf/imgs/taz.gif
http://www.infoiasi.ro/~acf/java/curs/9/prog_retea.html#url
www.infoiasi.ro
acf/java/curs/9/prog retea.html
user html
HOME
index.html
anchor #url
CAPIT OLUL 13. PROGRAMARE IN RETEA
MalformedURLException
try {
URL adresa = new URL("http://xyz.abc");
} catch (MalformedURLException e) {
System.err.println("URL invalid !\n" + e);
}
URL InputStream
index.html http://www.infoiasi.ro
import java.net.*;
import java.io.*;
BufferedReader br = null;
try {
URL url = new URL(adresa);
InputStream in = url.openStream();
br = new BufferedReader(new InputStreamReader(in));
String linie;
while ((linie = br.readLine()) != null) {
// Afisam linia citita
System.out.println(linie);
}
} catch(MalformedURLException e) {
System.err.println("URL invalid !\n" + e);
} finally {
br.close();
}
}
}
FORM
POST
socket (soclu)
CAPIT OLUL 13. PROGRAMARE IN RETEA
Socket ServerSocket
DatagramSocket
servere clienti
Socket
ServerSocket
ServerSocket(int port)
ServerSocket
Socket
DataInputStream DataOutputStream
ObjectInputStream ObjectOutputStream
CAPIT OLUL 13. PROGRAMARE IN RETEA
accept
nume
import java.net.*;
import java.io.*;
} catch (IOException e) {
System.err.println("Eroare IO \n" + e);
} finally {
// Inchidem socketul deschis pentru clientul curent
try {
socket.close();
} catch (IOException e) {
System.err.println("Socketul nu poate fi inchis \n" +
e);
}
}
}
}
try {
serverSocket = new ServerSocket(PORT);
while (true) {
System.out.println("Asteptam un client...");
Socket socket = serverSocket.accept();
import java.net.*;
import java.io.*;
try {
socket = new Socket(adresaServer , PORT);
13.5. COMUNICAREA PRIN DATAGRAME
} catch (UnknownHostException e) {
System.err.println("Serverul nu poate fi gasit \n" + e)
;
System.exit(1);
} finally {
if (out != null)
out.close();
if (in != null)
in.close();
if (socket!= null)
socket.close();
}
}
}
datagrama
CAPIT OLUL 13. PROGRAMARE IN RETEA
DatagramPacket
InetAddress
SocketAddress
13.5. COMUNICAREA PRIN DATAGRAME
DatagramSocket
DatagramPacket
import java.net.*;
import java.io.*;
System.out.println("Asteptam un pachet...");
socket.receive(cerere);
// Construim raspunsul
CAPIT OLUL 13. PROGRAMARE IN RETEA
import java.net.*;
import java.io.*;
try {
// Construim un socket pentru comunicare
socket = new DatagramSocket();
DatagramSocket
224.0.0.1 - 239.255.255.255
224.0.0.0
CAPIT OLUL 13. PROGRAMARE IN RETEA
import java.net.*;
import java.io.*;
try {
// Ne alaturam grupului aflat la adresa si portul
specificate
socket = new MulticastSocket(port);
socket.joinGroup(group);
System.out.println("Asteptam un pachet...");
socket.receive(packet);
13.6. TRIMITEREA DE MESAJE CATRE MAI MULTI CLIENT I
System.out.println(new String(packet.getData()).trim())
;
} finally {
if (socket != null) {
socket.leaveGroup(group);
socket.close();
}
}
}
}
import java.net.*;
import java.io.*;
} finally {
socket.close();
}
}
}
CAPIT OLUL 13. PROGRAMARE IN RETEA
applet
miniaplicatie
principala Applet
java
main
Applet
CAPITOLUL 14. APPLETURI
Container Applet
Frame Panel
import java.awt.* ;
import java.applet.* ;
.java
FirstApplet.java
javac
javac FirstApplet.java
FirstApplet.class
simplu.html
CAPITOLUL 14. APPLETURI
<html>
<head>
<title>Primul applet Java</title>
</head>
<body>
<applet code=FirstApplet.class width=400 height=400>
</applet>
</body>
</html>
simplu.html
appletviewer simplu.html
init
start
stop
start
destroy
destroy stop
Applet
destroy
CAPITOLUL 14. APPLETURI
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
Applet Container
init
14.4. INTERFAT A GRAFICA CU UTILIZATORUL
FlowLayout
setLayout
CAPITOLUL 14. APPLETURI
paint
paint Applet
APPLET
APPLET
CODE WIDTH
HEIGHT APPLET
null
Info
Applet Page info View
import java.applet.Applet;
import java.awt.*;
numeFont = getParameter("numeFont");
if (numeFont == null)
numeFont = "Arial";
CAPITOLUL 14. APPLETURI
try {
dimFont = Integer.parseInt(getParameter("dimFont"));
} catch(NumberFormatException e) {
dimFont = 16;
}
}
<APPLET
CODE = clasaApplet
WIDTH = latimeInPixeli
HEIGHT = inaltimeInPixeli
[ARCHIVE = arhiva.jar]
[CODEBASE = URLApplet]
[ALT = textAlternativ]
[NAME = numeInstantaApplet]
[ALIGN = aliniere]
[VSPACE = spatiuVertical]
14.6. TAG-UL APPLET
</APPLET>
clasaApplet
CODEBASE
latimeInPixeli inaltimeInPixeli
arhiva.jar
directorApplet
textAlternativ
APPLET
numeInstantaApplet
aliniere
spatiuVertical spatiuOrizontal
PARAM
APPLET Java-enabled
update paint
14.7. FOLOSIREA FIRELOR DE EXECUTIE IN APPLET URI
paint
import java.applet .*;
import java.awt.*;
paint
paint
g.drawString("Hello", x, y);
}
}
run
stop
start activ
start stop
start stop
import java.applet .*;
import java.awt.*;
}
}
stop
getParameterInfo
Canvas
paint drawImage
Graphics
Applet
getDocumentBase
getCodeBase
import java.applet.Applet;
import java.awt.*;
Applet
try {
URL doc = new URL("http://www.infoiasi.ro");
getAppletContext().showDocument(doc);
} catch(MalformedURLException e) {
System.err.println("URL invalid! \n" + e);
}
NAME
14.8. ALTE METODE OFERITE DE CLASA APPLET
Applet
java.applet
Applet
AudioClip
play.addActionListener(this);
loop.addActionListener(this);
stop.addActionListener(this);
CAPITOLUL 14. APPLETURI
// Exemplu
jar cvf arhiva.jar ClasaPrincipala.class AltaClasa.class
imagine.jpg sunet.au
// sau
jar cvf arhiva.jar *.class *.jpg *.au
14.10. RESTRICTI I DE SECURITATE
SecurityManager
Security Exception
main
init start
import java.applet.Applet;
import java.awt.*;
f.add(applet , BorderLayout.CENTER);
applet.init();
applet.start();
f.show();
}
}
baza de date
relational
DBMS
SGBD
CAPITOLUL 15. LUCRUL CU BAZE DE DAT E
conexiune (sesiune)
CAPITOLUL 15. LUCRUL CU BAZE DE DAT E
DriverManager.registerDriver(new TipDriver())
Class.forName("TipDriver");
Class.forName("TipDriver").newInstance();
System.setProperty("jdbc.drivers", "TipDriver");
jdbc.drivers
15.2. CONECTAREA LA O BAZA DE DATE
sub-protocol
odbc, oracle, sybase, db2
I dentificatorul bazei de date
jdbc:odbc:test
jdbc:oracle:thin@persistentjava.com:1521:test
jdbc:sybase:test
jdbc:db2:test
jdbc:odbc:test
jdbc:odbc:test;CacheSize=20;ExtensionCase=LOWER
jdbc:odbc:test;UID=duke;PWD=java
DriverManager
JDBC-ODBC Bridge
i denti f i cator
DriverManager
Connection c = DriverManager.getConnection(url);
Connection c = DriverManager.getConnection(url, username, password);
Connection c = DriverManager.getConnection(url, dbproperties);
Connection con ;
try {
con = DriverManager.getConnection(url, "duke", "java");
} catch(SQLException e) {
System.err.println("SQLException: " + e);
15.3. EFECTUAREA DE SECVENTE SQL
} finally {
try{
con.close ;
} catch(SQLException e) {
System.err.println(SQLException: " + e) ;
}
}
Connection
DriverManager.getConection
Connection
SELECT
CAPITOLUL 15. LUCRUL CU BAZE DE DAT E
CALL
Statement
PreparedStatement CallableStatement
Statement
Connection
SELECT
ResultSet
ResultSet
true
ResultSet false
null
execute
if(rowCount = 0) {
// Comanda DDL sau nici o linie afectata
System.out.println("Comanda DDL sau 0 actualizari");
CAPITOLUL 15. LUCRUL CU BAZE DE DAT E
stmt.getMoreResults();
continue;
}
// rowCount este -1
// Avem unul sau mai multe ResultSet-uri
ResultSet rs = stmt.getResultSet();
if(rs != null) {
// Proceseaza rezultatul
...
stmt.getMoreResults();
continue;
}
Statement
Statement
PreparedStatement
PreparedStatement
15.3. EFECTUAREA DE SECVENTE SQL
PreparedStatement
Statement
PreparedStatement
Connection
XXX
numarul de ordine
valoarea
pstmt.setString(1, "Ionescu");
pstmt.setInt(2, 100);
PreparedStatement
PreparedStatement Statement
PreparedStatement
Statement
CAPITOLUL 15. LUCRUL CU BAZE DE DAT E
pstmt.setString(1, "Popescu");
pstmt.setInt(2, 200);
pstmt.executeUpdate();
setXXX
tipuri JDBC
NULL
setXXX null
pstmt.setNull(1, Types.CHAR);
pstmt.setInt(2, null);
15.3. EFECTUAREA DE SECVENTE SQL
conti nut
conti nut
CallableStatement PreparedStatement
CallableStatement
Connection
PreparedStatement
"{call calculMedie(?)}");
cstmt.registerOutParameter(1, java.sql.Types.FLOAT);
cstmt.executeQuery();
float medie = cstmt.getDouble(1);
setXXX
registerOutParameter
ResultSet
XXX
15.3. EFECTUAREA DE SECVENTE SQL
ResultSet
next false
while-loop
ResultSet
ResultSet
XXX
CAPITOLUL 15. LUCRUL CU BAZE DE DAT E
linie noua
linie noua
linie noua
DatabaseMetaData
import java.sql.*;
// Inchidem conexiunea
con.close();
} catch(SQLException e) {
e.printStackTrace();
}
}
}
meta-date
import java.sql.*;
while (rs.next())
System.out.println(rs.getString("TABLE_NAME"));
con.close();
} catch(SQLException e) {
e.printStackTrace ();
}
}
}
ResultSet
ResultSet
Incarcarea
Editarea de legaturi
Initializarea
CAPITOLUL 16. LUCRUL DINAMIC CU CLASE
Descarcarea
Class
garbage collector
class loader
ClassLoader
ClassLoader
delegat
ClassLoader
parinte
16.1. INCARCAREA CLASELOR IN MEMORIE
java.* javax.*
ClassLoader Class
dinamica
CAPITOLUL 16. LUCRUL DINAMIC CU CLASE
ClassLoader
Class c = Class.forName("NumeCompletClasa");
// echivalent cu
ClassLoader loader = this.getClass().getClassLoader();
loader.loadClass("ClasaNecunoscuta");
Class c = Class.forName("java.awt.Button");
Button b = (Button) c.newInstance();
Functie
Functie executa
16.1. INCARCAREA CLASELOR IN MEMORIE
import java.util.*;
import java.io.*;
while (! numeFunctie.equals("gata")) {
System.out.print("\nFunctie:");
numeFunctie = stdin.readLine();
try {
// Incarcam clasa
Class c = Class.forName(numeFunctie);
// Setam vectorul
f.setVector(v); // sau f.v = v;
//Executam functia
int ret = f.executa();
System.out.println("\nCod returnat: " + ret);
} catch (ClassNotFoundException e) {
System.err.println("Functie inexistenta !");
} catch (InstantiationException e) {
System.err.println("Functia nu poate fi instantiata !
");
} catch (IllegalAccessException e) {
System.err.println("Functia nu poate fi accesata !");
CAPITOLUL 16. LUCRUL DINAMIC CU CLASE
}
}
}
}
import java.util.*;
public class Sort extends Functie {
public int executa() {
if (v == null)
return -1;
Arrays.sort(v);
for(int i=0; i<v.length; i++)
System.out.print(v[i] + " ");
return 0;
}
}
}
}
URLClassLoader
CLASSPATH
-classpath
ClassLoader
URLClassLoader
// La initializare
URLClassLoader systemLoader =
(URLClassLoader) this.getClass().getClassLoader();
URL[] urls = systemLoader.getURLs();
reflectare
Reflection API
16.2. MECANISMUL REFLECT ARI I
java.lang.Class
java.lang.Object
Array
Constructor
Field
Method
Modifier
java.lang.Class
isInterface
Reflection API
Class
Class c = obiect.getClass();
Class c = java.awt.Button.class;
Class c = Class.forName("NumeClasa");
Class
TipPrimitiv.class int.class, double.class
isPrimitive
getName
getModifiers
getSuperclass
Class
null Object
Class c = java.awt.Frame.class;
Class s = c.getSuperclass();
System.out.println(s); // java.awt.Window
Class c = java.awt.Object.class;
Class s = c.getSuperclass(); // null
getInterfaces
Class[]
public void interfete(Class c) {
Class[] interf = c.getInterfaces();
for (int i = 0; i < interf.length; i++) {
String nume = interf[i].getName();
System.out.print(nume + " ");
16.2. MECANISMUL REFLECT ARI I
}
}
...
interfete(java.util.HashSet.class);
// Va afisa interfetele implementate de HashSet:
// Cloneable, Collection, Serializable, Set
interfete(java.util.Set);
// Va afisa interfetele extinse de Set:
// Collection
Field
getName getType getModifiers
getField
getConstructors
getDeclaredConstructors Constructor[]
Constructor getName getParameterTypes
getModifiers getExceptionTypes
getConstructor
getMethods
getDeclaredMethods Method[] Method
getName getParameterTypes getModifiers
getExceptionTypes getReturnType
CAPITOLUL 16. LUCRUL DINAMIC CU CLASE
getMethod
getClasses
getDeclaredClasses Class[]
getDeclaringClass
Field Constructor Method
Reflection API
new
InstantiationException
IllegalAccessException
Class c = Class.forName("NumeClasa");
Object o = c.newInstance();
Class c = java.awt.Point.class;
Point p = (Point) c.newInstance();
Constructor
Point
// Pregatim argumentele
// Ele trebuie sa fie de tipul referinta corespunzator
Integer x = new Integer(10);
Integer y = new Integer(20);
Object[] arg = new Object[] {x, y};
// Instantiem
Point p = (Point) ctor.newInstance(arg);
newInstance InstantiationException
IllegalAccessException IllegalArgumentException
InvocationTargetException getConstructor
NoSuchMethodException
contains
CAPITOLUL 16. LUCRUL DINAMIC CU CLASE
Rectangle
contains
Point
// Pregatim argumentele
Point p = new Point(10, 20);
Object[] arg = new Object[] {p};
// Apelam metoda
metoda.invoke(obiect, arg);
null
invoke IllegalAccessException
InvocationTargetException getMethod
NoSuchMethodException
x
Point y
Functie
executa
import java.lang.reflect.*;
import java.util.*;
import java.io.*;
while (! numeFunctie.equals("gata")) {
System.out.print("\nFunctie:");
numeFunctie = stdin.readLine();
CAPITOLUL 16. LUCRUL DINAMIC CU CLASE
try {
// Incarcam clasa
Class c = Class.forName(numeFunctie);
} catch (Exception e) {
System.err.println("Eroare la apelarea functiei !");
}
}
}
}
java.lang.Class
isArray
getComponentType Class
newInstance
getLength
16.2. MECANISMUL REFLECT ARI I
set get