Clase, câmpuri, metode

Clasa este o structură de date, asociată cu o colecție de proceduri sau funcții, metode, care utilizează datele din această structură.

Datele unei clase se numesc câmpuri, sau variabile membre. Câmpurile pot fi statice (ale clasei) sau nestatice (ale instanței). Când clasa este instanțiată, în memoria mașinii virtuale Java se construiește un obiect (o instanță a clasei respective). Obiectul conține numai câmpuri nestatice.  Câmpurile statice se păstreaza în memorie într-un singur loc, care este rezervat clasei respective.

Metoda este o funcție, care întoarce o valoare și poate avea, de asemenea, efect lateral. Ca și câmpurile, metodele pot fi statice(ale clasei) și nestatice (ale instanței). Metodele statice pot invocă numai câmpurile statice ale clasei respective, în timp ce metodele nestatice pot invoca atât câmpurile statice, cât și pe cele nestatice (ale unei instanțe a clasei respective). Dacă valoarea întoarsă de metodă este void, metoda respectivă este o procedură și trebuie să aibă obligatoriu efect lateral.
Invocarea unei metode statice  (a clasei) se face printr-o expresie de forma
    nume_clasa.nume_metoda(parametri_efectivi)
a cărei valoare este valoarea întoarsă de funcția respectivă. O astfel de invocare de funcție poate fi deci folosită ca o componentă într-o altă expresie. De exemplu, expresia Math.sqrt(a) serveste pentru a calcula rădăcina patrată a lui a, în care scop este invocată funcția sqrt, care este o metodă statică a clasei Math (clasa funcțiilor matematice uzuale). Putem folosi această invocare de metodă într-o expresie mai complicată, de exemplu
    x=2*Math.sin(a)+3;
Invocarea unei metode nestatice (a instanței) se face sub forma
    referința_la_obiect.nume_metodă(parametri_efectivi)
deci numele metodei nu mai este calificat prin (însoțit de) numele clasei, ci prin cel al variabilei referință la obiectul respectiv, sau prin o expresie care are ca valoare o astfel de referință. De exemplu, daca r1 este o variabilă referință care indică un anumit obiect din memorie, iar met(a)este o metodă nestatică a clasei căreia îi aparține acest obiect, atunci r1.met(a) are ca efect invocarea metodei met pentru obiectul indicat de r1. În acest fel, metoda met(a) va folosi atât câmpurile (nestatice ale) obiectului indicat de referința r1, cât și câmpurile (statice ale) clasei căreia îi aparține acest obiect.

Dacă o metoda are efect lateral, ea poate fi invocată și sub forma de instrucțiune. Această instrucțiune constă numai din expresia de invocare a metodei, urmată de punct_și_virgulă.  În acest caz, valoarea întoarsă de metodă (valoarea expresiei) este ignorată, folosindu-se numai efectul lateral al metodei respective. Un exemplu cunoscut deja este instrucțiunea
    System.out.println(sir);

Este evident că metodele care întorc void (procedurile) pot fi invocate numai sub formă de instrucțiuni, fiind folosite pentru efectul lor lateral.



© Copyright 2000 - Severin BUMBARU, Universitatea "Dunărea de Jos" din Galați