Differences

This shows you the differences between two versions of the page.

Link to this comparison view

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 folositdeoarece 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>​
poo-ca-cd/laboratoare/obiecte-in-java.1760492023.txt.gz · Last modified: 2025/10/15 04:33 (external edit)
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0