This shows you the differences between two versions of the page.
|
poo-ca-cd:laboratoare:obiecte-in-java [2025/10/15 04:33] florian_luis.micu [Blocuri statice] |
poo-ca-cd:laboratoare:obiecte-in-java [2025/10/15 04:36] (current) florian_luis.micu [Metode statice] |
||
|---|---|---|---|
| Line 1140: | Line 1140: | ||
| </code> | </code> | ||
| - | <note tip> | + | <note important> |
| - | Metodele statice pot accesa doar **variabile statice**, deoarece membrii statici sunt inițializați **înainte de crearea instanțelor**. Astfel, o variabilă care aparține instanței, cum este ''size'', nu ar fi încă inițializată în momentul în care metoda statică ''getSize()'' este apelată. | + | * Metodele statice pot accesa doar **variabile statice**, deoarece membrii statici sunt inițializați **înainte de crearea instanțelor**. Astfel, o variabilă care aparține instanței, cum este ''size'', nu ar fi încă inițializată în momentul în care metoda statică ''getSize()'' este apelată. |
| + | * În **metodele sau blocurile statice**, cuvântul cheie ''this'' nu poate fi folosit, deoarece el face referire la **instanța curentă a clasei**. În momentul în care codul static este executat, **nu există** încă niciun obiect creat, deci nu există nicio instanță la care ''this'' să se refere. | ||
| </note> | </note> | ||
| - | <note important> | + | ===== ===== |
| - | În **metodele sau blocurile statice**, cuvântul cheie ''this'' nu poate fi folosit, deoarece el face referire la **instanța curentă a clasei**. În momentul în care codul static este executat, **nu există** încă niciun obiect creat, deci nu există nicio instanță la care ''this'' să se refere. | + | |
| + | <note tip> | ||
| + | * Folosiți ''static'' pentru **constante**, **contoare**, **configurații globale** sau **metode utilitare** (ex. ''Math.sqrt()''). Puteți găsi câteva exemple concrete în secțiunea **[Nice to know]** de mai jos. | ||
| + | * Nu folosiți foarte des ''static'', deoarece poate strica **încapsularea** ceea ce va face codul mai greu de testat. | ||
| </note> | </note> | ||
| + | |||
| + | <spoiler [Nice to know] Static use cases> | ||
| + | **1. Folosirea variabilelor statice pentru opțiuni la nivel de clasă** | ||
| + | |||
| + | Membrii statici pot de asemenea să stocheze opțiuni de configurație global: | ||
| + | |||
| + | <code java> | ||
| + | class Apple { | ||
| + | static int SMALL = 0, MEDIUM = 1, LARGE = 2; | ||
| + | |||
| + | int size; | ||
| + | |||
| + | void setSize(int s) { size = s; } | ||
| + | } | ||
| + | </code> | ||
| + | |||
| + | Aceștia pot fi accesați și folosiți astfel: | ||
| + | |||
| + | <code java> | ||
| + | Apple typicalApple = new Apple(); | ||
| + | typicalApple.setSize(Apple.MEDIUM); | ||
| + | </code> | ||
| + | |||
| + | Sau pot fi accesați chiar din aceeași clasă: | ||
| + | |||
| + | <code java> | ||
| + | class Apple { | ||
| + | ... | ||
| + | |||
| + | void resetEverything() { | ||
| + | setSize(MEDIUM); // nu este nevoie să scriem Apple.MEDIUM | ||
| + | } | ||
| + | } | ||
| + | </code> | ||
| + | |||
| + | **2. Folosirea variabilelor statice pentru contoare** | ||
| + | |||
| + | Dacă dorim să numărăm de câte ori o clasă a fost instanțiată putem folosi o variabilă statică: | ||
| + | |||
| + | <code java> | ||
| + | class ClassWithStatics { | ||
| + | |||
| + | static String className = "Class With Static Members"; | ||
| + | private static int instanceCount = 0; | ||
| + | |||
| + | public ClassWithStatics() { | ||
| + | instanceCount++; | ||
| + | } | ||
| + | |||
| + | public static int getInstanceCount() { | ||
| + | return instanceCount; | ||
| + | } | ||
| + | } | ||
| + | |||
| + | class Test { | ||
| + | |||
| + | public static void main(String[] args) { | ||
| + | System.out.println(ClassWithStatics.getInstanceCount()); // 0 | ||
| + | |||
| + | ClassWithStatics instance1 = new ClassWithStatics(); | ||
| + | ClassWithStatics instance2 = new ClassWithStatics(); | ||
| + | ClassWithStatics instance3 = new ClassWithStatics(); | ||
| + | |||
| + | System.out.println(ClassWithStatics.getInstanceCount()); // 3 | ||
| + | } | ||
| + | } | ||
| + | </code> | ||
| + | |||
| + | **3. Definirea unor constante globale** | ||
| + | |||
| + | Constantele globale pot fi folosite oriunde în cod și ne pot ajuta să economisim memorie: | ||
| + | |||
| + | <code java> | ||
| + | public class MathUtils { | ||
| + | public final static float EULER = 0.57721f; | ||
| + | public final static float PI = 3.1415f; | ||
| + | public final static float GOLDEN_RATIO = 1.61803; | ||
| + | ... | ||
| + | } | ||
| + | </code> | ||
| + | </spoiler> | ||
| <hidden> | <hidden> | ||