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.