Sunteți pe pagina 1din 26

Bibliografie

 * * *, Java Development Kit


http://www.oracle.com/technetwork/java/javase/downloads/i
ndex.html
 Java programming: from problem analysis la program design, D.S.
Malik, 2010
 Java de la 0 la expert, Tanasa, Stefan, Olaru, Cristian; Andrei, Stefan
– Iasi, Polirom, 2007
Tematica

 POO în Java
 JVM structura alocării memoriei. Metodele clasei Object. Clonarea. Excepții. JNI
 Java I/O (stream, channel). Serializarea
 Java Generics. Java Collections Framework (JVC). Java
 Java 8 – Interfețe default, expresii lambda, Java Stream, colectori
 Java Threading
 Java Reflection si Introspector. Java Beans
 JDBC
 Programarea in retea (TCP, UDP, Http)
 Java XML
 Elemente de interfata grafica in JavaFX
POO Java
Clase, interfețe, campuri, metode,constructori, referinte, obiecte,
variabile
Clase și interfețe

Declarația de clasă:
[public][abstract|final] class <NumeClasa>
[extends <NumeSuperclasa>][implements <lista_interfete>]
{}

Declarația de interfață:
[public] interface <NumeInterfata>
[extends<lista_superinterfete>] { }
Câmpuri și metode
Declarația de câmp:
[public|protected|private] [static] [transient] [volatile] [final] <tip>|<clasa>
<numeCamp1>[=<initializare>][,<numeCamp2>[=<initializare>] … ]

Declarația de metodă:
[public|protected|private][static][abstract|final][synchronized][native]
<tip_valoare_intoarsa> <numeMetoda>([<tip>|<clasa> <identificator1>
[,<tip>|<clasa> <identificator2>]...])[throws <ClasaExceptie>[,<ClasaExceptie>] ... ]

Declarația de constructor:
[public|protected|private] <nume_clasa>([<tip>|<clasa> <identificator1>
[,<tip>|<clasa> <identificator2>]...])[throws <ClasaExceptie>[,<ClasaExceptie>] ... ]
Obiecte, referințe, variabile
Declararea variabilelor referinta:
<clasa> <nume_variabila>[=<initializare>][,<nume_variabila>[=<initializare>]]
Referirea la un camp al unui obiect:
<referinta_la_obiect>.<nume_camp>
Referirea la un camp static:
<nume_clasa>.<nume_camp>
Referirea la o metoda a unui obiect:
<referinta_la_obiect>.<invocare_metoda>
Referirea la o metoda statica:
<nume_clasa>.<invocare_metoda>
Construirea obiectelor:
Prin operatorul new: new <constructor>
Prin metoda statica class: <nume_clasa>.class.newInstance()
Referințe implicite:
this - referinta catre obiectul curent
super - referinta catre superclasa
POO Java
moștenirea
Acces la campuri/metode prin mostenire
Acces public protected private default
In aceeasi √ √ √ √
clasa

In clasa √ √ √
derivata din
acelasi
pachet

In clasa √ √
derivata din
alt pachet
Acces la campuri/metode prin referinte
Acces public protected private default
In aceeasi √ √ √ √
clasa
In clasa √ √ √
derivata din
acelasi pachet

In clasa √
derivata din alt
pachet
In clasa √ √ √
oarecare din
acelasi pachet

In clasa √
oarecare din
alt pachet
POO Java
clase interne
Clasele interne - nested classes - sunt clase declarate în interiorul altor
clase.
Clase interne statice
• Pot fi declarate doar la nivel de membru al unei clase de nivel
superior (TLC - Top Level Class)
• Pot avea modificatori de acces private, protected, public
• Structura:
public class OuterClass {
tlc_members
[public|protected|private] static class NestedClass {
mc_members
}
}
• Instantiere:
OuterClass.NestedClass obiect = new OuterClass.NestedClass();
package curs.curs1;
public class A { A a=new A();
private int c=10; A.A_B ab=new A.A_B();
private static int b=30; System.out.println(ab.calcul1());
protected static class A_B { System.out.println(ab.calcul2());
static int a=20; System.out.println(a.calcul3());
private int b=20;
public int calcul1(){
return a*b;
}
public int calcul2(){
// return c*b; //referire la un camp instanta in context static
return A.b*b;
}
}
protected int calcul3(){
return c*b*A.A_B.a;
}
}
Clase interne membru (Member class)
• Pot fi declarate doar la nivel de membru al unei clase de nivel superior (TLC -
Top Level Class)
• Obiectele acestor clase conțin o referință la clasa TLC
• Pot avea modificatori de acces private, protected, public
• Are acces la membrii clasei TLC
• Structura:
public class OuterClass {
tlc_members
[public|protected|private] class InnerClass {
mc_members
}
}
• Instantiere:
OuterClass obiectOuter = new OuterClass();
OuterClass.InnerClass obiectInner = obiectOuter.new InnerClass();
• Referire membrii TLC: OuterClass.this.numeMembru;
package curs.curs1;
public class B {
private int a=10;
protected class InnerB {
private int a=20;
protected int calcul(){
return B.this.a*a;
}
}
}

B b = new B();
B.InnerB ib = b.new InnerB();
System.out.println(ib.calcul());
Clase locale
• Sunt declarate în interiorul metodelor, constructorilor și blocurilor de inițializare
• Nu au modificatori de acces
• Pot accesa toti membrii clasei TLC și variabile din bloc
• Structura:
public class TLC {
membrii_TLC
declaratie_metoda_TLC{
instructiuni
class LocalClass {
membrii_LocalClass
}
instructiuni
}
...
}
package curs.curs1;
public class C {
private int a=10;
public int sum(){
int a=20;
class A { C c=new C();
int a=30; System.out.println(c.sum());
public int sum(int a){
return C.this.a+this.a+a;
}
}
A obj=new A();
return obj.sum(a);
}
}
Clase anonime
• Sunt definite și create la nivelul expresiilor
• Nu au modificatori și nu au nume
• Sunt utilizate în general ca adaptori (GUI - Interfata grafica) sau clase singleton
(clase cu o singura instanță)
• Sintaxa:
new numeClasa ( listaArgumente) { corpClasa}
new numeInterfata (listaArgumente) {corpClasa}

Exemple

package curs.curs1;
public interface Calcul {
double operatie(double a,double b);
}
System.out.println(new Calcul() {
@Override
public double operatie(double a, double b) {
return a+b;
}
}.operatie(10, 10));
System.out.println(new Calcul() {
@Override
public double operatie(double a, double b) {
return a*b;
}
}.operatie(10, 10));
System.out.println(new Object(){
public double operatie(double a,double b){
return a-b;
}
}.operatie(10, 10));
Tipuri de date
Tipurile primitive
Valoare
Tip Dimensiune Valori
implicita

byte 0 8 b cu semn [-128,127] ∩ N


short 0 16 b cu semn [-32768,32767] ∩ N
int 0 32 b cu semn [-231,231-1] ∩ N
long 0L 64 b [0,264-1] ∩ N
float 0.0f 32 b v.m. s.p. m:24,e:8
double 0.0d 64 v.m. d.p m:53, e:11

char '\u0000' 16 b Unicode

boolean false 1b true, false


Masive
Declarare referinta:
[public|protected|private] [static] [transient] [volatile] [final] <tip>[][[]..]
<variabila>[=<initializare>][,<variabila>[=<initializare>] … ]

Alocare:
<variabila> = new <tip>[n1][[n2]..]

double[][] x={{1,2,3},{1,2},{1,2,3,4}};
double[][] y=new double[][]{{1,2,3},{23,45,67,89}};

Object[][] o = {{"Liviu","Diana"},{23,56,90},{3.14}};
for(Object linie[]:o){
System.out.println();
for(Object e:linie){
System.out.print(e+" ");
}
}
Object[][] v = {new String[]{"Liviu","Diana"},new Integer[]{23,56,90},new Double[]{3.14}};
Tipul Enum
• Tipul Enum este un tip special de clasa utilzat pentru definirea de constante cu o
structura complexa
• Sintaxa:
[public|protected|private] enum numeEnum {
CONSTANTA_1,CONSTANTA_2,...,CONSTANTA_N;
[numeEnum(lista_parametrii){...}]
[ Campuri_si_metode ]
}
• Modificatorii protected și private pot aparea doar cand enumerarea este interna
unei clase
• Compilatorul adauga la crearea enumerarii o metoda statică values() care intoarce
intr-un vector constantele definite prin enumerare
• Enumerarile nu pot fi instantiate. Constructorul permite asocierea de valori
constantelor din enumerare.
Metode Enum
Ca orice clasă Enum conține metode statice și de instanță care permit o
gestionare flexibilă a conținutului:
public final String name(); // Numele de tip String al enumerarii
public final int ordinal(); // Numărul de ordine în cadrul enumerării
public static T valueOf(String name); //Întoarce valoarea
corespunzatoare șirului specificat prin name
public enum Cartier {
public class Imobil {
AVIATIEI(2),DRUMUL_TABEREI(2),UNIRII(0);
public Cartier cartier;
private final int zona;
public double valoare;
Cartier(int zona){ this.zona=zona; }
public Cartier getCartier() { return cartier; }
public int getZona() { return zona; }
public void setCartier(Cartier cartier) { this.cartier = cartier; }
}
public double getValoare() { return valoare; }
public void setValoare(double valoare) {
public static void main(String[] args) {
this.valoare = valoare;
Imobil i1=new Imobil();
}
i1.setValoare(100000);
public double impozit() {
i1.setCartier(Cartier.AVIATIEI);
switch (cartier.getZona()) {
System.out.println("Impozit:"+i1.impozit());
case 0:
System.out.println("Cartierul Aviatiei:"+
return valoare * 0.2;
Cartier.AVIATIEI.name());
case 1:
System.out.println("Cartiere:");
return valoare * 0.1;
for(Cartier c:Cartier.values()){
default:
System.out.print(c+" ");
return valoare * 0.05;
}
}
Cartier cartier=Cartier.valueOf("AVIATIEI");
}
System.out.println("\nConstanta pentru Aviatiei:"
}
+cartier);
}
Obiecte immutable
Sunt obiecte a căror stare (conținut) nu poate fi modificată.
Clase immutable: String, Integer, Long, Short, Double, Float, Character,
Byte, Boolean.
Reguli pentru crearea unei clase immutable:
1. Nu sunt furnizate metode de scriere pentru câmpuri ("setter" methods)
2. Câmpurile sunt declarate cu modificatorii final și private
3. Clasele immutable nu pot fi extinse fiind declarate final
4. Câmpurile de tip referință trebuie să fie referințe la clase care sunt la
rândul lor immutable

S-ar putea să vă placă și