In corpul unei clase putem gasi declaratii de variabile, declaratii de constructori, declaratii de metode. Variabilele, metodele si constructorii unei clase se numesc membrii clasei.
Variabilele car sunt definite in interiorul unei clase dar in afara corpului unei metode se numesc variabile membre ale clasei.
nivelul_de_acces | Nivelurile de acces sunt: private , protected ,
public si package (default). * |
static | Este o variabila de clasa si nu de instanta * |
final | Variabila nu se mai poate modifica dupa de a fost initializata. * |
transient | Nu este specificata complet in The Java Language Specification. La serializarea obiectelor se foloseste pentru a marca un membru care nu trebuie serializat. * |
volatile | Cuvantul cheie volatile este folosit pentru a
impiedica compilatorul de a indeplini anumite optimizari asupra unui
membru. Este folosit numai de catre foarte putini programatori Java.
* |
tip numeVariabila |
Elementele noatate cu * pot lipsi din declaratia unei variabile membru.
Toate clasele Java sunt prevazute cu constructori care sunt utilizati la
initializarea unui nou obiect (In situatia in care programatorul nu declara o
functie coinstructor limbajul Java asigura un constructor default care nu face
nimic).Constructorii au aceeasi sintaxa ca si metodele dar se deosebesc de
acestea prin aceea ca au exact acelasi nume ca si clasa
din care fac parte. In exemplele urmatoare sunt declarate doua clase Point
si Rectangle
. Clasa Point are un singur constructor, iar clasa Rectangle
declara 4 constructori.
public class Point { public int x = 0; public int y = 0; // un constructor public Point(int x, int y) { this.x = x; this.y = y; } }
public class Rectangle { public int width = 0; public int height = 0; public Point origin; // four constructors public Rectangle() { origin = new Point(0, 0); } public Rectangle(Point p) { origin = p; } public Rectangle(int w, int h) { this(new Point(0, 0), w, h); } public Rectangle(Point p, int w, int h) { origin = p; width = w; height = h; } // o metoda pentru deplasarea dreptunghiului public void move(int x, int y) { origin.x = x; origin.y = y; } // o metoda pentru calculul ariei dreptunghiului public int area() { return width * height; } // o metoda speciala folosita pentru distrugerea // referintelor catre obiectele create de clasa, // element necesar pentru functionarea mecanismului // de colectare a "gunoaielor" = obiecte inutile // catre care nu mai exista nici o referinta protected void finalize() throws Throwable { origin = null; super.finalize(); } }
Functiile constructor admit urmatorii specificatori de acces:
private
- Nici o alta clasa nu poate instantia aceasta clasa.protected
- Numai subclasele pot instantia o astfel de clasa.public
- Orice clasa poate instantia o astfel de clasa.package
- Numai clasele din acelasi pachet pot instantia
aceasta clasa.Metodele sunt acele elemente de limbaj care asigura functionalitatea obiectelor.
nivelul_de_acces | Nivelurile de acces sunt: private , protected ,
public si package (default). * |
static | Este o metoda de clasa si nu de instanta * |
abstract | Aceasta metoda nu este implementata si trebuie sa fie membra
a unei clase abstract . * |
final | Subclasele nu pot acoperi (suprapune) aceasta metoda. Adica nu se pot adauga sau sterge functionalitati folosind numele acestei metode. * |
native | Metoda implementata in alt limbaj. * |
synchronized | Metoda are nevoie de un moditor pentru a fi executata. Firele de executie distincte concurente (ce folosesc metode specializate) pot avea nevoie sa opereze la un moment dat asupra unor date comune. Pentru ca lucrurile sa se desfasoare in siguranta trebuie ca aceste metode sa fie declarate synchronized. * |
tipReturnat numeMetoda | Tipul returnat si numele metodei. |
(lista parametrii) | lista parametrilor foloseste delimitatorul , |
throws Exceptii | Exceptiile generate de metoda. * |
{ | |
Corpul metodei | |
} |
Valoarea returnata de o metoda se precizeaza cu instructiunea return
.
Instruciunea return are sintaxa:
return valoareReturnata;
sau
return expresie;
Tipul returnat trebuie sa fie compatibil cu tipul declarat prin tipReturnat
.
Tipul returnat poate fi unul dintre tipurile
primitive sau un tip referinta.
In ultima situatie se pot returna obiecte de exact tipul declarat sau obiecte
care sunt descendente al obiectului declarat in ierarhia obiectelor.
In interiorul aceleiasi clase pot exista mai multe metode cu acelasi nume. Spre exemplu sunt licite urmatoarele declaratii
class DataRenderer { void draw(String s) { . . . } void draw(int i) { . . . } void draw(float f) { . . . } }
Compilatorul Java suporta suprapunerea numelor metodelor cu conditia ca lista
de parametri sa fie diferita ca numar sau componenta a tipurilor. Spre exemplu
nu se pot declara doua metode: draw(String s)
si draw(String
t)
, deoarece lista lor de parametrii este practic aceeasi.
O metoda poate suprapune (daca este permis acest lucru sau trebuie) o metoda a clasei antecedente in ierarhie.
Tipul returnat, numele metodei, numarul, tipul si ordinea parametrilor metodei acoperite si metodei care o acopera trebuie sa fie identice.
Un prin exemplu de metoda care suprapune este
metoda finalize()
folosita in clasa Rectangle
.
O subclasa trebuie neaparat sa suprapuna metodele declarate abstract
.
Nu poate fi suprapune o metoda declarata final
.
Accesul la metoda acoperita se face folosind cuvantul cheie super
.
© Cornel Mironel Niculae, 2003-2007
26-Jun-2007