CATEGORII DOCUMENTE |
Curs Java incepatori |
|
Conversii de tip implicite si explicite
|
a)
Fie atribuirea
v = 173
in care v este o variabila de tip intreg. Efectul
direct al acestei operatii este ca se
'calculeaza' valoarea functiei ca fiind 173. Efectul lateral al
aceleeasi operatii este ca se atribuie operandului v
valoarea 173.
b) Fie atribuirea
v = a + b
in care v, a, b sunt variabile de tip intreg. Aici avem, de fapt doua operatii.
Se va executa mai intai adunarea a+b. Aceasta operatie
nu are efect lateral, deci valorile operanzilor a si b raman neschimbate. In
schimb, ca rezultat se obtine valoarea functiei (suma valorilor celor doi
operanzi), care se atribuie variabilei v. Prin aceasta se modifica valoarea
variabilei v (efectul lateral), aceasta noua valoare putand fi folosita in
continuare ca valoare a functiei de atribuire (efectul direct).
b) Fie atribuirile in lant
x=y=z=173
In acest caz, operatorul de atribuire se aplica de trei ori succesiv, de la
dreapta la stanga. In consecinta, se face mai intai atribuirea z=173, avand ca
efect lateral ca variabilei z i se atribuie valoarea 173. Aceasta atribuire este insa si o functie, care are valoarea 173. Aceasta
valoare este folosita in continuare, fiind atribuita
lui y, deci se executa operatia y=173. Se obtine si de data aceasta valoarea
functiei 173, care se atribuie lui z. Ca rezultat final, s-a atribuit valoarea
173 tuturor celor trei variabile si s-a obtinut, de asemenea, valoarea ultimei
operatii (x=173), pe care o putem folosi in continuare.
Tipurile de date primitive in limbajul Java
In limbajul Java exista urmatoarele tipuri de date primitive:
A. Tipul de date void este folosit pentru a arata lipsa unui tip de date (in
engleza, void inseamna gol, vid, lipsa, fara valoare. Este folosit acolo unde
sintaxa instructiunii cere un tip de date, dar - in
situatia data - in locul respectiv nu trebuie indicata o anume valoare. Un
exemplu este folosirea tipului void in definirea metodei main().
B. Date logice: tipul boolean, care contine valorile
logice true (adevarat) si false (fals).
C. Date sub forma de caractere: tipul char, care contine toate caracterele:
litere, cifre, semne de punctuatie, simboluri matematice etc.
D. Date numerice:
D1. Numere intregi de diferite lungimi
byte - numere intregi reprezentate intern pe un octet;
short - numere intregi reprezentate intern pe doi octeti;
int - numere intregi reprezentate intern pe patru octeti;
long - numere intregi reprezentate intern pe opt octeti;
D2. Numere reale (in virgula mobila) cu diferite precizii
float - numere reale in simpla precizie (reprezentate intern pe patru octeti);
double - numere reale in dubla precizie (reprezentate intern pe opt octeti).
Tipurile de date mentionate mai sus sunt descrise in sectiunile urmatoare ale
acestui capitol.
Rezumatul capitolului 'Tipuri de date primitive'
Prin tip de date (engl.: data type) se intelege o
multime de valori, careia i se asociaza o multime de operatii asupra valorilor
respective.
In fiecare limbaj de programare exista un set de
tipuri de date primitive, numite si tipuri de date fundamentale sau elementare.
Acestea sunt tipuri predefinite in limbajul respectiv, deci ele nu trebuie sa fie definite de catre programator. Cu ajutorul acestor
tipuri primitive, programatorul poate sa construiasca
propriile sale tipuri de date derivate. In acest scop, limbajul de programare
ii pune la dispozitie anumite modalitati de construire.
In programare, se numeste variabila o zona de memorie care poarta un nume si care pastreaza o anumita valoare,
apartinand unui tip de date.
In limbajul Java, orice variabila trebuie declarata inainte de a fi utilizata.
Prin declararea variabilei se intelege specificarea, pentru
compilator, a tipului si numelui acesteia. Definirea variabilei se face atunci,
cand acesteia i se da pentru prima data o valoare si deci
i se aloca spatiu in memorie. Nu este obligatoriu ca
definirea sa coincida cu declararea variabilei. Declaratia de tip este o instructiune care serveste pentru declararea si,
eventual, definirea (initializarea) unor variabile.
Tipurile primitive din limbajul Java sunt urmatoarele: boolean,
char, byte, short, int, long, float, double.
Fiecare tip de date se caracterizeaza prin multimea de valori, reprezentarea in
memoria interna, reprezentarea externa (in programul scris in limbajul Java) si
setul de operatii permise asupra datelor din tipul respectiv. Sub forma
externa, datele se reprezinta prin literali.
Tipul boolean are multimea de valori
in semnificatia lor din logica matematica (logica booleana). Literalii, prin
care se reprezinta aceste valori in program, sunt, respectiv, cuvintele
rezervate false si true. Operatiile permise asupra datelor de tip boolean sunt:
atribuirea (=), comparatia (== si !=) si operatiile din
logica matematica (!, &, &&, |, ||, ^).
Tipul char are ca valori multimea de caractere, codificate intern pe 16 biti in
Unicode. Literalii de tip char se scriu sub forma caracterului respectiv,
cuprins intre apostrofuri. In cazul caracterelor care nu exista la tastatura,
caracterul poate fi inlocuit printr-o secventa escape. Datele de tip char sunt
asimilate numerelor intregi fara semn. Operatiile permise asupra datelor de tip
char sunt deci aceleasi ca asupra datelor de tipuri intregi.
Tipurile byte, short, int si long sunt tipuri de date intregi si au ca valori
numere intregi cu semn. Aceste tipuri difera intre ele prin lungimea
reprezentarii interne si, drept consecinta, prin multimile de valori.
Operatiile permise asupra tipurilor de date intregi sunt : atribuirea (=),
operatiile aritmetice (+, -, *, /, %), incrementarea si decrementarea (++, --),
comparatia (==, !=, <, <=, >, >=), deplasarile binare (<<,
>>, >>>), operatiile logice pe biti (~, &, |, ^) si operatiile
de atribuire compusa (+=, -=, *=, %=, <<=, >>=, >>>=,
&=, |=, ^=). Daca, intr-o operatie cu numere intregi, unul din operanzi este de tip long, rezultatul este de tip long. Altfel el este de tip int. Exceptie fac operatiile de atribuire, la
care rezultatul are tipul variabilei din partea stanga, si cele de incrementare
sau decrementare, la care rezultatul are tipul operandului. Este posibil ca, la
operatiile cu numere intregi, rezultatul sa nu fie cel
corect. Aceasta situatie apare atunci cand lungimea rezultatului este mai mare decat zona de memorie alocata in memorie
pentru numerele de tipul respectiv. O astfel de depasire binara nu este semnalata ca eroare de catre calculator.
Tipurile long si float sunt tipuri de date reale si au ca valori numere reale
reprezentate in virgula mobila. Aceste tipuri difera intre ele prin lungimea
reprezentarii interne si, drept consecinta, prin multimile de valori si prin
precizie. In limbajul Java, multimile de valori ale tipurilor de date reale
contin si valori speciale: Infinity, -Infinity si
Tipul referinta cuprinde variabilele care au drept valoare o referinta la un obiect sau la un tablou. Referinta este,
de fapt, adresa la care se gaseste in memorie obiectul respectiv. Singura
operatie permisa direct asupra acestor variabile este
atribuirea (=). Orice alte operatii, care au ca operanzi variabile referinta,
se efectueaza asupra obiectelor la care se fac referintele si nu asupra
adreselor acestor obiecte.
Valorile variabilelor de tipuri numerice pot fi convertite dintr-un tip in
altul. Conversiile de tip se fac implicit atunci cand intr-o operatie binara
intervin operanzi de tipuri diferite. La atribuire, conversia se face implicit
daca ea are loc fara pierdere de informatie, sau explicit (prin folosirea
operatorului cast) in caz contrar.
Conceptul de tip de date
Conceptul de tip de date este unul din conceptele
fundamentale ale programarii. In matematica, stiinta, tehnica, economie si alte
domenii ale activitatii umane se lucreaza cu date, care sunt numere intregi,
numere reale, siruri de caractere, valori logice sau structuri de date
construite cu ajutorul acestora. Se admite ca, atat multimea numerelor intregi,
cat si cea a numerelor reale, sunt multimi infinite. In programare, se are insa
in vedere ca este necesar sa se respecte anumite
restrictii, legate de modul de reprezentare a datelor in calculator. Sa consideram, de exemplu, multimea numerelor intregi. In
matematica, aceasta este o multime infinita. In
calculator insa, numarul intreg se reprezinta intr-o zona de memorie de lungime
finita, de exemplu 4 octeti (32 biti), ceeace inseamna ca 'multimea
numerelor de tip intreg', care pot fi astfel reprezentate, este finita,
continand 2 la puterea 32 valori. Trebuie avute in vedere, de asemenea,
restrictiile privind operatiile care pot fi efectuate pe calculator asupra
acestei multimi de valori.
Prin tip de date (engl.: data type) se intelege o
multime de valori, careia i se asociaza o multime de operatii asupra valorilor
respective.
In fiecare limbaj de programare exista un set de
tipuri de date primitive, numite si tipuri de date fundamentale sau elementare.
Acestea sunt tipuri predefinite in limbajul respectiv, deci ele nu trebuie sa fie definite de catre programator. Cu ajutorul acestor
tipuri primitive, programatorul poate sa construiasca
propriile sale tipuri de date derivate. In acest scop, limbajul de programare
ii pune la dispozitie anumite modalitati de construire.
In principiu, majoritatea limbajelor de programare admit ca tipuri de date
primitive numerele intregi si reale, caracterele si valorile logice (booleene).
Pot exista insa mai multe tipuri de numere intregi sau reale, care sa difere intre ele prin lungimea zonei de memorie alocate.
Pot exista, de exemplu, numere intregi reprezentate pe unul, doi, patru sau opt
octeti, ele fiind considerate tipuri de date diferite.
In cele ce urmeaza, vom descrie tipurile de date
primitive ale limbajului de programare Java, aratand pentru fiecare modul de
reprezentare in memorie, multimea de valori si multimea de operatii.
Tipuri de date numerice
Sub aspect conceptual, datele numerice sunt numere, care pot fi intregi sau
reale, asupra carora pot fi efectuate operatii aritmetice. Numai ca nu orice
numar intreg sau numar real poate fi reprezentat in memoria calculatoarului.
Pentru reprezentarea unui numar este necesar sa se
aloce o anumita zona de memorie (un anumit numar de octeti succesivi). Pot deci
exista deosebiri legate de lungimea zonei alocate, dar, oricare ar fi aceasta,
in calculator nu pot fi reprezentate numere intregi oricat de mari. De asemenea, pentru reprezentarea in memorie a
numerelor reale, este necesar sa se adopte conventii
privind: modul de pozitionare a virgulei; numarul maxim de cifre situate in
fata virgulei; numarul maxim de cifre situate dupa virgula. Pot exista,
desigur, diferite moduri de reprezentare, dar, si de data aceasta, nu putem
folosi numere reale cu un numar oricat de mare de
cifre inainte sau dupa virgula.
In cele ce urmeaza, vom prezenta tipurile de date
numerice folosite in limbajul Java, indicand pentru fiecare conventiile de
reprezentare, restrictiile impuse de acestea, precum si setul de operatii
asociat fiecarui tip.
Variabile si tipuri de date
Avand in vedere relatia deja enuntata Program=Date+Algoritm, in acest capitol
vom trata un prim aspect al datelor, incluzand conceptele de variabila si de
tip de date si prezentarea datelor primitive din limbajul Java, iar in
capitolul urmator vom pune bazele descrierii algoritmilor.
Variabile. Declaratii de tip
Conceptul de variabila
In matematica, variabila este un simbol caruia i se
asociaza o valoare dintr-o anumita multime de valori, care constituie domeniul
de definitie al variabilei respective.
In programare, valoarea variabilei trebuie sa fie
reprezentata in memoria calculatorului la o anumita adresa, iar in locul
domeniului de definitie trebuie specificat tipul de date corespunzator. De
asemenea, simbolul variabilei este inlocuit printr-un
nume, care este un identificator. In consecinta, numim variabila o zona de
memorie care poarta un nume si care pastreaza o
anumita valoare, apartinand unui tip de date.
Programatorul care foloseste un limbaj de nivel inalt, cum este si limbajul
Java, nu trebuie sa cunoasca adresa de memorie, la care este plasata valoarea
variabilei, si nici reprezentarea interna a acesteia, fiind suficient sa-i
cunoasca numele si tipul. Alocarea de spatiu in memorie pentru fiecare
variabila se face, dupa caz, de catre compilator sau interpretor. In schimb,
numele si tipul trebuie declarate de catre programator.
In limbajul Java, orice
variabila trebuie declarata inainte de a fi utilizata. Prin declararea variabilei se intelege
precizarea, pentru compilator, a tipului si numelui acesteia. Initializarea variabilei se face atunci, cand acesteia i se da
pentru prima data o valoare si deci i se aloca spatiu in memorie. Daca,
la declararea variabilei, aceasta nu este si
initializata in mod explicit, atunci ea este initializata cu o valoare
implicita, care va fi specificata la descrierea fiecarui tip.
Declararea si initializarea variabilelor
Declaratia de tip este o instructiune care serveste pentru declararea si,
eventual, initializarea unor variabile si are urmatoarea forma generala:
[=] [,[=]]*;
In care:
este numele tipului de date caruia ii apartine variabila;
este numele variabilei si este un identificator;
este valoarea de initializare a variabilei, care trebuie sa fie corespunzatoare
tipului.
Se observa ca este posibil ca, intr-o singura
declaratie, sa se declare mai multe variabile. Specificarea valorii este optionala dar, daca aceasta exista, atunci se spune ca
variabila respectiva a fost si initializata.
Remarcam ca simbolurile reprezentate cu culoare neagra (= ,
;) sunt obligatorii.
Prin conventie, numele variabilelor incep totdeauna cu litera
mica. Este permis insa ca, in interiorul numelui, sa
existe si litere mari. Aceasta se intampla atunci cand numele variabilei este format din mai multe cuvinte ale limbii naturale, de
exemplu vitezaMedie.
In limbajul Java exista doua categorii de tipuri de date: tipuri primitive si
tipuri referinta.
Tipurile primitive sunt cele la care valoarea variabilei este
stocata chiar la adresa de memorie alocata variabilei respective. Acestea sunt
date pentru care atat lungimea zonei de memorie alocata, cat si modul de
reprezentare a valorii, sunt predefinite.
In cazul variabilelor de tipuri referinta, la adresa din memorie alocata
variabilei respective nu se gaseste valoarea acesteia, ci doar o referinta
catre aceasta valoare. Aceasta referinta este, de
fapt, adresa zonei de memorie in care este stocata valoarea variabilei. In
limbajul Java exista trei categorii de tipuri referinta: referinta la clase
(obiecte), la interfete si la tablouri. Utilizarea variabilelor referinta va fi prezentata in detaliu in cadrul programarii orientate
pe obiecte.
Tipurile primitive din limbajul Java sunt urmatoarele: boolean,
char, byte, short, int, long, float, double. Aceste tipuri
vor fi descrise in detaliu in sectiunile urmatoare ale acestui capitol.
Aici vom da numai exemple de declarare si definire a unor variabile, pentru a ilustra forma sintactica.
Exemple de declaratii si initializari de variabile
a) Declaratii de variabile de tipuri primitive
boolean existent;
char c1, c2, c3;
int k1=127, k2=-15, k3, beta;
double viteza=127.4563, spatiu, arie=12.78351;
b) Declaratii de variabile referinta
String s1='Un sir de caractere', s2;
Observam ca au fost initializate explicit variabilele k1 si k2 de tip int,
variabilele viteza si arie de tip double si variabila referinta s1, iar
celelalte au fost numai declarate, dar nu au primit valori in mod explicit,
deci au fost initializate la valorile implicite corespunzatoare tipurilor
carora le apartin. In ultimul exemplu, variabilele s1 si s2 sunt referinte
catre obiecte din clasa String, care este clasa
sirurilor de caractere.
Variabile finale
In limbajul Java, se numesc variabile finale acele 'variabile', ale
caror valori nu pot fi modificate prin program. Acestea sunt
deci, de fapt, niste constante cu nume. Ele se aseamana cu variabilele
propriu-zise prin faptul ca sunt tot perechi nume - valoare, numai ca valoarea
lor se da o singura data, sub forma de initializare in declaratia de tip sau
sub forma de atribuire, dupa care nu mai poate fi modificata.
Declaratia de tip pentru variabilele finale are forma:
final [=] [,[=]]*;
Se deosebeste deci de declaratia de tip pentru variabile propriuzise prin
prezenta calificativului final. Initializarea nu este
nici de data aceasta obligatorie. Daca insa variabilei i-a
fost data o valoare, aceasta nu mai poate fi ulterior modificata. Exemple de declarare si initializare a variabilelor finale se dau
in programul din fisierul VarFin.java, unde se face si comparatia cu
variabilele obisnuite.
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 1726
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved