Sunteți pe pagina 1din 30

Curs 3.

Constructori
Constructori
• Un constructor inițializează un obiect atunci când este creat. Are același nume
ca și clasa sa și este similar sintactic cu o metodă. Cu toate acestea,
constructorii nu au un tip de returnare explicită.

• De obicei, veți utiliza un constructor pentru a da valori inițiale variabilelor de


instanță definite de clasa sau pentru a efectua orice alte proceduri de pornire
necesare pentru a crea un obiect.

• Toate clasele au constructori, indiferent dacă definiți unul sau nu, deoarece
Java furnizează automat un constructor implicit care inițializează toate
variabilele membre la zero. Cu toate acestea, după ce definiți propriul
constructor, constructorul implicit nu mai este utilizat.
Constructori
class NumeClasa {
NumeClasa() {
}
}

Java permite două tipuri de constructori și anume:

Constructori fara argument


Constructori parametrizați
Constructori fara argument
După cum specifică numele, constructorii Java fără argument nu acceptă niciun
parametru. Utilizând acești constructori, variabilele de instanță ale unei metode
vor fi inițializate cu valori fixe pentru toate obiectele.

public class ClasaMea {


int num;
ClasaMea() {
num = 100;
}
}
Constructori fara argument
Constructorul se apelează pentru a inițializa obiectele după cum urmează:

public class Demo {


public static void main (String args[]) {
ClasaMea c1 = new ClasaMea ();
ClasaMea c2 = new ClasaMea ();
System.out.println(c1.num + " " + c2.num);
}
}
Output
100 100
Constructori parametrizați
Cel mai adesea, veți avea nevoie de un constructor care să accepte unul sau mai
mulți parametri. Parametrii sunt adăugați la un constructor în același mod în care
sunt adăugați la o metodă, doar sunt declarați în paranteze după numele
constructorului.
// Un constructor simplu
class ClasaMea {
int x;
// Constructorul
ClasaMea (int i ) {
x = i;
}
}
Constructori parametrizați
Apelarea constructorului pentru a inițializa obiectele după cum urmează:

public class Demo {


public static void main(String args[]) {
ClasaMea c1 = new ClasaMea (10);
ClasaMea c2 = new ClasaMea (20);
System.out.println (c1.x + " " + c2.x);
}
}
Output
10 20
Tipuri de date
• Variabilele sunt locații de memorie rezervate pentru stocarea valorilor.
Aceasta înseamnă că atunci când creați o variabilă vă rezervați spațiu în
memorie.

• Pe baza tipului de date al unei variabile, sistemul de operare alocă memorie și


decide ce poate fi stocat în memoria rezervată. Prin urmare, alocând diferite
tipuri de date variabilelor, puteți stoca numere întregi, zecimale sau caractere
în aceste variabile.

• Există două tipuri de date disponibile în Java:

Tipuri de date primitive


Tipuri de date de referință / obiect
Tipuri de date primitive
• Există opt tipuri de date primitive acceptate de Java. Tipurile de date primitive
sunt predefinite de limbă și numite de un cuvânt cheie.
• Să analizăm în detaliu cele opt tipuri de date primitive.
Octet - byte
Tipul de date de byte este un număr întreg de două semne pe 8 biți
Valoarea minimă este -128 (-2 ^ 7)
Valoarea maximă este 127 (inclusiv) (2 ^ 7 -1)
Valoarea implicită este 0
Tipul de date de octeți este utilizat pentru a economisi spațiu în matricele mari, în principal
în locul numerelor întregi, deoarece un octet este de patru ori mai mic decât un număr
întreg.

Exemplu: byte a = 100, byte b = -50


Tipuri de date primitive
short
Tipul de date short este un număr întreg de două semnate pe 16 biți
Valoarea minimă este -32,768 (-2 ^ 15)
Valoarea maximă este 32.767 (inclusiv) (2 ^ 15 -1)

Tipul de date shorte poate fi, de asemenea, utilizat pentru a salva memoria ca tip
de date de byte. Un short este de 2 ori mai mic decât un număr întreg

Valoarea implicită este 0.

Exemplu: short s = 10000, short r = -20000


Tipuri de date primitive
int
Tipul de date Int este un număr întreg de două semne pe 32 de biți.

Valoarea minimă este - 2.147.483.648 (-2 ^ 31)


Valoarea maximă este de 2.147.483.647 (inclusiv) (2 ^ 31 -1)

Integer este de obicei utilizat ca tip de date implicit pentru valori intetregi, cu
excepția cazului în care există o constrângere cu privire la memorie.

Valoarea implicită este 0


Exemplu: int a = 100000, int b = -200000
Tipuri de date primitive
long
Tipul de date long este un număr întreg de două semne pe 64 de biți
Valoarea minimă este -9.223.372.036.854.775.808 (-2 ^ 63)
Valoarea maximă este 9.223.372.036.854.775.807 (inclusiv) (2 ^ 63 -1)
Acest tip este utilizat atunci când este nevoie de o gamă mai largă decât
cea de int
Valoarea implicită este 0L

Exemplu: long a = 100000L, long b = -200000L


Tipuri de date primitive
float
Tipul de date float este un punct mobil IEEE 754 pe 32 de biți de o
singură precizie

Float este utilizat în principal pentru a economisi memorie în tablouri


mari de numere în virgulă mobilă
Valoarea implicită este 0,0f
Tipul de date float nu este niciodată utilizat pentru valori precise, cum ar
fi moneda

Exemplu: float f1 = 234.5f


Tipuri de date primitive
double
tipul double de date este un punct mobil IEEE 754 pe 64 de biți de
precizie

Acest tip de date este utilizat în general ca tip de date implicit pentru
valori zecimale, în general alegerea implicită.

Tipul double de date nu trebuie utilizat niciodată pentru valori precise.


Valoarea implicită este 0.0d
Exemplu: double d1 = 123,4
Tipuri de date primitive
boolean
tipul de date booleane reprezintă un bit de informație

Există doar două valori posibile: adevărat și fals


Acest tip de date este utilizat pentru steaguri simple care urmăresc
condițiile adevărat / fals

Valoarea implicită este false

Exemplu: boolean one = true


Tipuri de date primitive
Char

tipul de date char este un singur caracter Unicode pe 16 biți


Valoarea minimă este „\ u0000” (sau 0)
Valoarea maximă este „\ uffff” (sau 65.535 inclusiv)

Tipul de date Char este utilizat pentru a stoca orice caracter

Exemplu: char letterA = 'A'


Tipuri de date referință
Variabilele de referință sunt create utilizând constructori definiți ai claselor. Sunt utilizate
pentru a accesa obiecte. Aceste variabile sunt declarate a fi de tip specific care nu pot fi
modificate. De exemplu, angajat, cățel etc.

Obiectele de clasă și diferite tipuri de variabile de matrice se află sub tipul de date de
referință.

Valoarea implicită a oricărei variabile de referință este nulă.

O variabilă de referință poate fi utilizată pentru a referi orice obiect de tip declarat sau orice
tip compatibil.

Exemplu: Animal animal1 = Animal new („girafa”);


Literali
Un literal este reprezentarea codului sursă a unei valori fixe. Sunt reprezentate direct în cod,
fără niciun fel de calcul.

Literali pot fi atribuiti oricărei variabile de tip primitiv. De exemplu:


byte a = 68;
char a = 'A’;
byte, int, long și short pot fi exprimate și în sisteme de numere zecimale (baza 10),
hexadecimal (baza 16) sau octal (baza 8).

Prefixul 0 este folosit pentru a indica octal, iar prefixul 0x indică hexadecimal când se
utilizează aceste sisteme numerice pentru literali. De exemplu -
int decimal = 100;
int octal = 0144;
int hexa = 0x64;
Literali
Literali cu șiruri în Java sunt specificate ca în majoritatea altor limbi, înglobând o secvență
de caractere între o pereche de ghilimele duble. Exemple de literali cu șiruri sunt –
"Hello World"
"two\nlines"
"\"This is in quotes\"“
char a = '\u0001';
String a = "\u0001";
Java acceptă și câteva secvențe speciale escape pentru literali String și Char.
\n Newline (0x0a)
\r Carriage return (0x0d)
\f Formfeed (0x0c)
\b Backspace (0x08)
\s Space (0x20)
\t tab
Tipuri de variabile
• O variabilă ne oferă un spațiu de stocare anumit pe care programele
noastre le pot manipula. Fiecare variabilă în Java are un tip specific,
care determină dimensiunea și aspectul memoriei variabilei; gama de
valori care pot fi stocate în memoria respectivă; și setul de operații care
pot fi aplicate variabilei.

• Trebuie să declarați toate variabilele înainte de a putea fi utilizate. ză


Forma generala a unei declarații variabile:
data type variable [ = value][, variable [ = value] ...] ;

Aici tipul de date este unul dintre tipurile de date Java și variabila este numele
variabilei. Pentru a declara mai multe variabile de tipul specificat, puteți utiliza
o listă separată de virgule.
Tipuri de variabile
int a, b, c; // Declarează trei intregi, a, b și c.
int a = 10, b = 10; // Exemplu de inițializare
byte B = 22; // inițializează o variabilă de tip octeți B.
double PI = 3.14159; // declară și atribuie o valoare a PI.
char a = 'a'; // variabila char a este inițiată cu valoarea „a”

Există trei tipuri de variabile în Java:

Variabile locale
Variabile de instanta
Variabilele clasă / statice
Variabile locale
• Variabilele locale sunt declarate în metode, constructori sau blocuri.

• Variabilele locale sunt create atunci când metoda, constructorul sau blocul este introdus
și variabila va fi distrusă odată ce iese din metodă, constructor sau bloc.

• Modificatorii de acces nu pot fi folosiți pentru variabile locale.

• Variabilele locale sunt vizibile numai în cadrul metodei, constructorului sau blocului
declarat.

• Variabilele locale sunt implementate la nivel de stivă la nivel intern.

• Nu există o valoare implicită pentru variabilele locale, deci variabilele locale trebuie
declarate și o valoare inițială trebuie atribuită înainte de prima utilizare.
Variabile locale
Exemplu
Aici, vârsta este o variabilă locală. Aceasta este definită în cadrul metodei varsta (), iar sfera sa este limitată
numai la această metodă.
public class Test {
public void varsta () {
int varsta = 0;
varsta = varsta + 7;
System.out.println (“Maria are: " + varsta + “ani”);
}
public static void main(String args[]) {
Test test = new Test();
test.varsta();
}
}
Output
Maria are 7 ani.
Variabile locale
Următorul exemplu folosește vârsta, fără inițializarea acesteia, astfel încât se produce o eroare în
momentul compilării.

public class Test {


public void varsta () {
int varsta;
varsta = varsta + 7;
System.out.println(“Maria are: " + varsta);
}

public static void main(String args[]) {


Test test = new Test();
test.varsta();
}
}
Variabile de instanță
• Variabilele de instanță sunt declarate într-o clasă, dar în afara unei metode,
constructor sau orice bloc.
• Când un spațiu este alocat pentru un obiect din heap, se creează un slot pentru
fiecare valoare variabilă de instanță.
• Variabilele de instanță sunt create atunci când un obiect este creat cu utilizarea
cuvântului cheie „new” și distrus atunci când obiectul este distrus.
• Variabilele de instanță conțin valori la care trebuie făcut referire prin mai
multe metode, constructor sau bloc sau părți esențiale ale stării unui obiect
care trebuie să fie prezente în întreaga clasă.
• Variabilele de instanță pot fi declarate la nivel de clasă înainte sau după
utilizare.
• Modificatorii de acces pot fi furnizați pentru variabile.
Variabile de instanta
• Variabilele de instanță sunt vizibile pentru toate metodele, constructorii și
blocurile din clasă. În mod normal, se recomandă ca aceste variabile să fie
private (nivel de acces). Cu toate acestea, vizibilitatea pentru subclase poate fi
dată pentru aceste variabile cu utilizarea modificatoarelor de acces.

• Variabilele de instanță au valori implicite. Pentru numere, valoarea implicită


este 0, pentru Booleans este false, iar pentru referințele obiectului este nulă.
Valorile pot fi alocate în timpul declarației sau în cadrul constructorului.

• Variabilele de instanță pot fi accesate direct, apelând numele variabilei din


interiorul clasei. Cu toate acestea, în cadrul metodelor statice (atunci când
variabilelor de instanță li se oferă accesibilitate), acestea trebuie apelate
folosind numele complet calificat. ObjectReference.VariableName.
Variabile de instanta
import java.io.*;
public class Angajat {
// aceasta variabila de instanta este vizibila din orice sub-clasa
public String nume;
// variabila salariu este vizibila doar in clasa Angajat
private double salariu;

// variabila nume este asignata in constructor


public Angajat (String angNume) {
nume = angNume;
}
// variabilei salariu i se atribuie o valoare
public void setSalariu(double angSal) {
salariu = angSal;
}
Variabile de instanta
// aceasta metoda tipareste detaliile despre angajat
public void printAng () {
System.out.println("nume : " + nume );
System.out.println ("salariu :" + salariu);
}

public static void main(String args[]) {


Angajat ang1 = new Angajat (“Tomescu");
ang1.setSalariu(9000);
ang1.printAng ();
}
}
Variabile de clasă/statice
• Variabilele de clasă cunoscute și sub numele de variabile statice sunt declarate cu cuvântul cheie
static într-o clasă, dar în afara unei metode, constructor sau bloc.
• Ar exista o singură copie a fiecărei variabile de clasă pe clasă, indiferent de câte obiecte sunt create
din ea.
• Variabilele statice sunt rareori utilizate, în afară de a fi declarate constante. Constanțele sunt
variabile care sunt declarate public / private, final și static. Variabilele constante nu se schimbă
niciodată din valoarea lor inițială.
• Variabilele statice sunt stocate în memoria statică. Rar se folosesc variabile statice, altele decât cele
declarate finale și folosite ca constante publice sau private.
• Variabilele statice sunt create când programul pornește și se distrug atunci când programul se
oprește.
• Vizibilitatea este similară cu variabilele de instanță. Cu toate acestea, majoritatea variabilelor statice
sunt declarate publice, deoarece acestea trebuie să fie disponibile pentru utilizatorii clasei.
• Valorile implicite sunt aceleași cu variabilele de instanță. Pentru numere, valoarea implicită este 0;
pentru booleani, este false; iar pentru referințe la obiect, este nul. Valorile pot fi alocate în timpul
declarației sau în cadrul constructorului. În plus, valorile pot fi alocate în blocuri de inițializare
statică speciale.
• Variabilele statice pot fi accesate apelând cu numele de clasă ClassName.VariableName.
Variabile de clasă/statice
import java.io.*;
public class Angajat {
// variabila salariu este private static
private static double salariu;
// DEPARTMENT este o constanta
public static final String DEPARTMENT = "Dezvoltare";
public static void main(String args[]) {
salariu = 1000;
System.out.println (DEPARTMENT + „salariu mediu:" + salariu);
}
}
Output
Dezvoltare salariu mediu:1000

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