- Figura 1 -
În aceasta figură, clasele acoperitoare de tip sunt reprezentate cu negru. Clasa Number este o clasa abstractă, din care sunt derivate toate clasele acoperitoare pentru tipuri de date numerice. Fiecare din celelalte clase acoperă un anumit tip de date primitiv. Clasa Character acoperă tipul char, iar clasa Integer acoperă tipul int. Toate celelalte clase acopera tipul primitiv al carui nume îl poartă. Spre deosebire de numele tipurilor primitive, care sunt scrise cu litere mici, numele claselor acoperitoare încep (ca la orice alte clase) cu majuscule.
Toate clasele acoperitoare sunt clase finale, deci din ele nu mai pot fi derivate alte clase.
Fiecare instanță a unei clase acoperitoare conține un câmp de date nestatic în care se pastrează o valoare aparținând tipului primitiv de date corespunzator clasei respective. De exemplu, un obiect din clasa Boolean conține un câmp de tip boolean care, la rândul lui, conține valoarea logică true sau false. În mod similar, un obiect din clasa Double conține un câmp de tip double în care există un număr în virgulă mobilă în dublă precizie.
În afară de câmpul de date nestatic, fiecare clasă acoperitoare conține mai multe câmpuri de date statice finale, în care se păstrează diferite constante (variabile finale) specifice tipului de date corespunzător.
Unele dintre metode sunt prezente în toate clasele acoperitoare, altele sunt specifice fiecărei clase sau unui grup de astfel de clase. Prezentăm aici succint principalele metode prezente în toate clasele:
public boolean equals(Object obj) - este o redefinire a
metodei equals()din clasa Object ; compară obiectul
propriu cu obiectul obj primit ca argument și întoarce true
dacă acestea sunt identice, sau false în caz contrar;
public String toString() - este o redefinire a metodei toString()
din clasa Object ; întoarce valoarea primitivă conținută în
obiectul respectiv, convertită într-un șir de caractere, reprezentând
forma externă a valorii respective;
public int hashCode() - este o redefinire a metodei hashCode()
din clasa Object; intoarce codul de dispersie al obiectului
propriu.
Clasele acoperitoare oferă, de asemenea, metode prin care se pot
converti datele din tipurile respective din forma externă (de șiruri de
caractere) în cea interna și invers.
Clasa BooleanClasa Boolean acoperă tipul primitiv boolean. Clasa are doi constructori publici: Boolean(boolean value) și Boolean(String s). Primul primește ca argument o expresie cu valoare de tip boolean, iar al doilea primește un șir de caractere, care conține forma externă a unei valori de tip boolean.În afara de metodele equals(), toString() și
hashCode(), care au fost deja menționate, clasa Boolean
mai oferă următoarele metode specifice: Clasa Boolean moștenește, de asemenea, metodele clasei Object. În programul din fișierul TestBoolean.java
este testată clasa Boolean. |
Remarcăm că aceste metode se aplica tuturor claselor acoperitoare
pentru numere, realizând conversia numărului conținut într-o instanță a
unei clase acoperitoare numerice către tipul primitiv dorit de
utilizator.
Clasa Integer este clasa acoperitoare pentru tipul primitiv int. Clasa conține următoarele câmpuri de date statice:
public static final int MAX_VALUE - conține valoarea
maximă pentru tipul de date int, adică valoarea 2147483647;
public static final int MIN_VALUE - conține valoarea minimă
pentru tipul de date int, adică -2147483648;
public static final Class TYPE - conține un obiect din
clasa Class cu informații despre tipul primitiv int.
Clasa are doi constructori:
public Integer(int value) - construiește instanța clasei
Integer care conține valoarea primitivă value;
public Integer(String s) - convertește șirul s, primit ca
argument, într-un număr de tip int și construiește obiectul Integer care
conține acest număr; dacă șirul s nu reprezintă forma externă a unui
număr întreg, se obține excepția NumberFormatException. Remarcăm deci
că se face analiza sintactică a șirului s pentru a se verifica dacă
acesta este cu adevărat un număr întreg.
Clasa oferă un numeroase metode, atât de instanță, cât și statice, care sunt utile când se lucrează cu numere întregi. Dintre acestea menționăm:
a/ metodele equals(), toString() și hashCode() existente în toate clasele acoperitoare;
b/ metodele byteValue(), shortValue(), intValue(), longValue(), floatValue()si doubleValue() existente în toate subclasele clasei Number;
c/ metode statice, utile în diverse operații cu numere
întregi:
public static int parseInt(String s) - face analiza
sintactică a șirului s, considerat ca forma externă a unui număr întreg
în sistemul de numerație zecimal, și întoarce valoarea de tip int
corespunzatoare; dacă șirul s nu are forma corectă a unui număr întreg,
se obține excepția NumberFormatException;
public static int parseInt(String s, int radix) -
acționeaza asemănător cu metoda precedentă, cu deosebirea că se
consideră că șirul s este un număr în sistemul de numerație cu baza
radix; public static String toBinaryString(int i) - întoarce numărul întreg i convertit într-un șir care îl reprezintă în sistemul de numerație binar; public static String toHexString(int i) - întoarce numărul întreg i convertit într-un șir hexazecimal; public static String toOctalString(int i) - întoarce numărul întreg i convertit într-un șir în sistemul de numerație octal; public static String toString(int i) - întoarce numărul întreg i convertit într-un șir în sistemul de numerație zecimal (se deosebește de metoda toString(), moștenită de la clasa Object, prin faptul ca nu este o metodă a instanței, ci una statică); public static String toString(int i, int radix) - întoarce un șir care conține numărul intreg i convertit în sistemul de numerație cu baza radix; public static Integer valueOf(String s) - acționează asemănător cu metoda parseInt(String s), dar întoarce un obiect din clasa Integer; public static Integer valueOf(String s, int radix) - similara cu metoda precedentă, dar se consideră că șirul s este un număr întreg în baza de numerație radix; public static Integer decode(String s) - analizează șirul s și îl decodifică; dacă acesta respectă unul din formatele admise pentru numere întregi, adică este forma externă a unui număr întreg în unul din sistemele zecimal, hexazecimal (incepe cu 0x) sau octal (incepe cu 0), atunci il convertește în valoare internă de tip int și întoarce obiectul de clasa Integer care contine aceasta valoare; altfel, întoarce excepția NumberFormatException. |
d/ metode ale instanței (în plus, față de cele menționate la punctele a/ și b/):
public int compareTo(Integer anotherInteger) - compară
propriul obiect din clasa Integer cu obiectul anotherInteger primit ca
argument. Dacă ele sunt egale, întoarce zero; daca întregul propriu este
mai mic decât argumentul, întoarce o valoare negativă, iar dacă este
mai mare întoarce o valoare pozitivă;
public int compareTo(Object obj) - dacă obiectul-argument
obj este tot un Integer, atunci această metodă acționează la fel cu cea
precedentă; altfel, se obține excepția ClassCastException.
Exemplu:
Programul din fișierul TestInt.java
testează utilizarea unora dintre metodele clasei Integer. Executând
acest program se poate constata că analiza sintactică a șirului primit
ca argument decurge în același mod la metodele parseInt(String),
valueOf(String) și la constructorul Integer(String). Se acceptă numai
șirurile care reprezintă cu adevărat numere întregi cuprinse în domeniul
de valori al tipului int. Se admite ca numărul să fie precedat de
semnul - (minus), dar nu de semnul +. Se observă, de asemenea, că la
conversia de la Integer către byte sau short este posibil să se piardă
cifrele cele mai semnificative prin trunchiere.
Câmpuri de date statice:
Clasa Double (și similar clasa Float) oferă
următoarele câmpuri de date statice:
public static final double MAX_VALUE - cea mai mare
valoare pozitivă de tip double;
public static final double MIN_VALUE - cea mai mică valoare
pozitivă de tip double;
public static final double NaN - valoarea NaN
(Not a Number) pentru tipul double;
public static final double POSITIVE_INFINITY - valoarea Infinitypentru
tipul double;
public static final double NEGATIVE_INFINITY - valoarea -Infinity
pentru tipul double;
public static final Class TYPE - un obiect din clasa Class
cu informații despre tipul primitiv double.
Constructori:
Clasa Double are doi constructori:
Double(double value) - construiește o instanță a clasei Double
care conține valoarea primitivă value;
Double(String s) - construiește o instanță a clasei Double
care conține valoarea primitivă de tip double a cărei formă
externă este șirul s primit ca argument; dacă acest șir nu
este corect sintactic, se obtine excepția NumberFormatException.
Metode:
Clasa Double oferă numeroase metode utile în lucrul cu date de tip double, dintre care mentionăm:
a/ metodele equals(), toString() si hashCode() existente în toate clasele acoperitoare;
b/ metodele byteValue(), shortValue(), intValue(), longValue(), floatValue() si doubleValue() existente în toate subclasele clasei Number;
c/ metode statice, utile în diverse operații cu numere
reale:
public static double parseDouble(String s) - analizează
sintactic șirul s primit ca argument și - dacă este corect - întoarce
valoarea primitivă double corespunzatoare; altfel generează excepția
NumberFormatException;
public static String toString(double d) - convertește în
sir numărul primitiv primit ca argument;
public static Double valueOf(String s) -
acționeaza asemănător cu metodă parseDouble(String), dar intoarce un
obiect din clasa Double; public static long doubleToLongBits(double value) - întoarce o valoare de tip long care este reprezentarea pe 64 biți, conform standardului IEEE 754, a numărului de tip double primit ca argument; public static double longBitsToDouble(long bits) - întoarce o valoare de tip double, a cărei reprezentare ca long (întreg pe 64 biți) conform standardului IEEE 754 este cea primită ca argument; public static boolean isInfinite(double v) - întoarce true dacă argumentul v este infinit; public static boolean isNaN(double v) - întoarce true dacă argumentul v este NaN; |
d/ metode ale instanței (în plus, față de cele menționate la
punctele a/ și b/):
public int compareTo(Double anotherDouble) -
compară propriul obiect din clasa Double cu obiectul anotherDouble
primit ca argument; dacă ele sunt egale, întoarce zero; dacă numărul
propriu este mai mic decât argumentul întoarce o valoare negativă, iar
dacă este mai mare întoarce o valoare pozitivă; public int compareTo(Object obj) - dacă obiectul-argument obj este tot un Double, atunci această metodă acționează la fel cu cea precedentă; altfel, se obține excepția ClassCastException. public boolean isInfinite() - întoarce true dacă valoarea conținută în obiectul propriu este infinită; public boolean isNaN() - întoarce true dacă valoarea conținuta în obiectul propriu este NaN; |
Exemplu:
Programul din fișierul TestDouble.java
testează principalele metode ale clasei Double. Remarcăm că,
în acest caz, a fost considerat corect și un sir care reprezintă un
număr real precedat de semnul +. Pentru reprezentarea formatului intern
al numărului s-a folosit metoda doubleToLongBits(), combinată
cu metodele toBynaryString() și toHexString()din
clasa Long.
Câmpuri statice:
Clasa Character conține numeroase câmpuri de date statice,
prezentate în documentația Java API. Cele mai multe dintre ele sunt
coduri numerice ale diferitelor categorii de caractere (litere
majuscule, litere minuscule, cifre zecimale, simboluri matematice etc),
folosite în metodele care verifică dacă un anumit caracter corespunde
categoriei respective. Printre ele există însă și câmpul
public static final Class TYPE
care conține un obiect din clasa Class cu informații despre
tipul primitiv char.
Constructori:
Clasa Character are un singur constructor
public Character(char value) - construiește un obiect al
clasei Character care conține caracterul primit ca argument.
Metode statice:
Clasa Character oferă numeroase metode statice utile
în lucrul cu caractere, dintre care menționăm: Metode nestatice: În afara de metodele generale equals(), toString() și
hashCode(), clasa Character oferă, de asemenea,
următoarele metode: |
Exemplu:
În fișierul TestChar.java este dat un
program de testare a metodelor oferite de clasa Character.