Documente Academic
Documente Profesional
Documente Cultură
1. Constructori – metode speciale fără tip de return care inițializează obiectele în momentul creării
lor cu new; un constructor se apelează automat în momentul crearii unui obiect cu new.
// SimpleConstructor2.java
//Constructorii pot fi cu sau fara argumente.
class Rock2 {
Rock2(int i) { //constructor cu argumente
System.out.println("Rock " + i + " ");
}
}
public class SimpleConstructor2 {
public static void main(String[] args) {
Rock2 obj;
for(int i = 0; i < 8; i++)
obj=new Rock2(i); //se creaza 8 obiecte din clasa Rock2
//instantierea se face cu trimiterea argumentului i - asa cum o cere constructorul Rock2
//se vor afisa 8 mesaje - deoarece se va apela de 8 ori constructorul Rock2(int i)
}
}
2. Supraîncărcarea metodelor – într-o clasă putem avea același identifcator (nume) utilizat la
definirea mai multor metode, dar fiecare metodă trebuie să aiba argumente diferinte și același tip
de return.
// Overloading.java
//Constructorii pot fi supraincarcati
//metodele dintr-o clasa pot fi supraincarcate
class Tree {
int height;
Tree() { //constructor implicit fara argumente
System.out.println("Planting a seedling");
height = 0;
}
//constructorii supraincarcati ofera flexibilitate in initialirea obiectelor
Tree(int initialHeight) { //acelasi constructor Tree supraincarcat cu un argument
height = initialHeight;
System.out.println("Creating new Tree that is " + height + " feet tall");
}
//metode supraincarcate
void info() { //metoda info fara argumente cu tip de return void
System.out.println("Tree is " + height + " feet tall");
}
void info(String s) { //metoda info cu argumente cu tip de return void
System.out.println(s + ": Tree is " + height + " feet tall"); }
}
public class Overloading {
public static void main(String[] args) {
for(int i = 1; i < 5; i++) {
Tree t = new Tree(i); //instantiere utilizand constructorul supraincarcat cu un argument
t.info(); //apel metoda info() fara argumente
t.info("overloaded method"); //apel metoda info cu argument
}
Tree t=new Tree(); //instantierea obiectului t prin constructorul fara argument
}
}
3. Utilizarea this
//Leaf.java
public class Leaf { //clasa Leaf
int i = 0; //atribut in clasa Leaf
Leaf increment() { //metoda ce returneaza un obiect de tip Leaf
i++;
return this; // se returneaza obiectul curent
}
void print() { //metoda in clasa Leaf
System.out.println("i = " + i);
}
public static void main(String[] args) {
Leaf x = new Leaf(); //instantiere
x.increment().increment().increment().print(); //3 apeluri ale metodei increment
//fiecare apel al metodei increment schimba valoarea atributlui i si returneaza obiectul cu noua
//valoare; fiecare apel increment() returneaza un obiect de tip Leaf
}
}
4. Utilizarea finalize
În programul de mai jos, se presupune că o carte (Book) trebuie să fie în mod necesar “checkin” înainte
ca aceasta să fie ”distrusă”. Observăm ca există o carte pentru care nu se face checkin și la apelul
forțat al garbage collector-ului, va apărea mesajul de eroare din finalize().
//TerminationCondition.java
class Book {
boolean checkedOut = false;
Book(boolean checkOut) { //constructor cu argument
checkedOut = checkOut; //initializeaza atributul checkedOut cu valoarea trimisa prin argument
}
void checkIn() { //metoda checkin
checkedOut = false;
}
protected void finalize() { //utilizarea finalize() in clasa Book
//inainte de distrugerea obiectelor cu garbage collector se va apela metoda finalize()
if(checkedOut) //daca atributul checkedOut e True - se afiseaza eroare
System.out.println("Error: checked out");
// Normally, you’ll also do this:
// super.finalize(); // Call the base-class version
}
}
public class TerminationCondition {
public static void main(String[] args) {
Book novel = new Book(true); //creare obiect novel de tip Book
// Proper cleanup:
novel.checkIn(); //dupa utilizare - se da checkin() - obiectul se poate sterge
// Drop the reference, forget to clean up:
new Book(true); //se creaza un nou obiect din clasa Book
// Force garbage collection & finalization:
System.gc();
//se apeleaza garbage collector - ce determina executia finalize() din clasa Book
//pentru ca la cel de-al doilea obiect nu s-a apelat metoda checkIn() - se va afisa mesajul de eroare
}
}
6. Initializarea static – atributele statice se initializeaza o singura data; daca acestea au fost deja
intializate, ele nu se reinitializeaza.
//StaticInitialization.java
class Bowl {
Bowl(int marker) { //constructor in clasa Bowl
System.out.println("Bowl(" + marker + ")");
}
void f1(int marker) { //metoda in clasa Bowl
System.out.println("f1(" + marker + ")");
}
}
class Table {
static Bowl bowl1 = new Bowl(1); //(init. 1) membru static de tip Bowl in clasa Table
Table() { //apelul constructor se face dupa initializarea atributelor statice din clasa
System.out.println("Table()");
bowl2.f1(1); //apel catre metoda f1()
}
void f2(int marker) { //metoda in clasa Table
System.out.println("f2(" + marker + ")");
}
static Bowl bowl2 = new Bowl(2); //(init. 2) membru static de tip Bowl in clasa Table
}
class Cupboard {
//initializarea membrilor non-statici se face dupa initializarea celor statici din clasa
Bowl bowl3 = new Bowl(3); //membru non static de tip Bowl in Cupboard
static Bowl bowl4 = new Bowl(4); //(init.3) membru static de tip Bowl in clasa CupBoard
Cupboard() { //constructor in Cupboard
System.out.println("Cupboard()");
bowl4.f1(2);
}
void f3(int marker) {
System.out.println("f3(" + marker + ")");
}
static Bowl bowl5 = new Bowl(5);//(init. 4) membru static
}
In main, creati un sir de obiecte de tip String si initializati fiecare obiect din sir. Tipariti sirul folosind un for.
Creati un sir de referinte catre obiecte din clasa creata, dar fara a crea obiectele din sir. Initializati sirul cu
obiecte din clasa creata. La executia programului, vedeti daca mesajul din constructor este tiparit.