Ebben az oktatóanyagban a Java statikus kulcsszaváról, a statikus módszerekről, a statikus változókról és a statikus blokkokról a példák segítségével tanulhatunk meg.
Mi a statikus kulcsszó a Java-ban?
Ha Java-ban szeretnénk hozzáférni az osztály tagjaihoz, először létre kell hoznunk az osztály egy példányát. De lesznek olyan helyzetek, amikor változók létrehozása nélkül szeretnénk hozzáférni az osztály tagjaihoz.
Ilyen esetekben használhatjuk a static
kulcsszót a Java-ban. Ha anélkül szeretnénk hozzáférni az osztály tagjaihoz, hogy létrehoznánk az osztály egy példányát, akkor statikusnak kell nyilvánítanunk az osztály tagjait.
A Math
Java osztályban szinte minden tagja statikus. Tehát hozzáférhetünk tagjaihoz anélkül, hogy létrehoznánk a Math osztály példányait. Például,
public class Main ( public static void main( String() args ) ( // accessing the methods of the Math class System.out.println("Absolute value of -12 = " + Math.abs(-12)); System.out.println("Value of PI = " + Math.PI); System.out.println("Value of E = " + Math.E); System.out.println("2^2 = " + Math.pow(2,2)); ) )
Kimenet :
-12 = 12 abszolút értéke PI értéke 3,141592653589793 E értéke 2,718281828459045 2 2 = 4,0
A fenti példában nem hoztunk létre az Math
osztály egyetlen példányát . De képesek vagyunk elérni a módszerek: abs()
és pow()
és változók: PI
és E
.
Lehetséges, mert az Math
osztály módszerei és változói statikusak.
Statikus módszerek
A statikus módszereket osztálymódszereknek is nevezik. Ennek oka, hogy a statikus módszer az osztályhoz tartozik, nem pedig az osztály objektumához.
A statikus módszereket pedig közvetlenül meghívhatjuk az osztálynév használatával. Például,
class Test ( // static method inside the Test class public static void method() (… ) ) class Main ( // invoking the static method Test.method(); )
Itt láthatjuk, hogy a statikus módszer közvetlenül elérhető más osztályokból az osztálynév használatával.
Minden Java programban deklaráltuk a main
módszert static
. Ennek oka, hogy a program futtatásához a JVM-nek képesnek kell lennie a fő módszer meghívására a kezdeti szakaszban, amikor a memóriában nincsenek objektumok.
1. példa: Java statikus és nem statikus módszerek
class StaticTest ( // non-static method int multiply(int a, int b)( return a * b; ) // static method static int add(int a, int b)( return a + b; ) ) public class Main ( public static void main( String() args ) ( // create an instance of the StaticTest class StaticTest st = new StaticTest(); // call the nonstatic method System.out.println(" 2 * 2 = " + st.multiply(2,2)); // call the static method System.out.println(" 2 + 3 = " + StaticTest.add(2,3)); ) )
Kimenet :
2 * 2 = 4 2 + 3 = 5
A fenti programban deklaráltunk egy nem statikus multiply()
és egy add()
osztályon belül megnevezett statikus metódust StaticTest
.
A Main osztály belsejében láthatjuk, hogy a nem statikus metódust hívjuk meg az osztály ( st.multiply(2, 2)
) objektumának felhasználásával . A statikus metódust azonban az osztálynév ( StaticTest.add(2, 3)
) használatával hívjuk meg .
Statikus változók
A Java-ban, amikor egy osztály objektumait készítjük, akkor minden objektumnak meg lesz a saját másolata az osztály összes változójából. Például,
class Test ( // regular variable int age; ) class Main ( // create instances of Test Test test1 = new Test(); Test test2 = new Test(); )
Itt mind a test1, mind a test2 objektumoknak külön példányai lesznek a változó korról. És különböznek egymástól.
Ha azonban egy változót statikusnak nyilvánítunk, akkor az osztály összes objektumának ugyanaz a statikus változója. Ugyanis a statikus módszerekhez hasonlóan a statikus változók is társulnak az osztályhoz. És a statikus változók eléréséhez nem kell az osztály objektumait létrehoznunk. Például,
class Test ( // static variable static int age; ) class Main ( // access the static variable Test.age = 20; )
Itt láthatjuk, hogy a statikus változóhoz a másik osztályból az osztály nevét használjuk.
2. példa: Java statikus és nem statikus változók
class Test ( // static variable static int max = 10; // non-static variable int min = 5; ) public class Main ( public static void main(String() args) ( Test obj = new Test(); // access the non-static variable System.out.println("min + 1 = " + (obj.min + 1)); // access the static variable System.out.println("max + 1 = " + (Test.max + 1)); ) )
Kimenet :
min + 1 = 6 max + 1 = 11
A fenti programban deklaráltunk egy min nevű statikus változót és egy max nevű statikus változót a Test osztályon belül.
A Main osztály belsejében láthatjuk, hogy a nem statikus változót az osztály ( obj.min + 1
) objektumával hívjuk meg . A statikus változót azonban az osztálynév ( Test.max + 1
) használatával hívjuk meg .
Megjegyzés : A statikus változókat ritkán használják a Java-ban. Ehelyett a statikus állandókat használják. Ezeket a statikus állandókat static final
kulcsszóval határozzuk meg, és nagybetűvel ábrázoljuk. Éppen ezért egyesek inkább nagybetűket használnak statikus változókhoz is.
Statikus változók és módszerek elérése az osztályon belül
Egy másik osztályból hozzáférünk a statikus változóhoz. Ezért az osztály nevét használtuk a hozzáféréshez. Ha azonban a statikus tagot az osztály belsejéből szeretnénk elérni, akkor az közvetlenül elérhető. Például,
public class Main ( // static variable static int age; // static method static void display() ( System.out.println("Static Method"); ) public static void main(String() args) ( // access the static variable age = 30; System.out.println("Age is " + age); // access the static method display(); ) )
Kimenet :
Az életkor 30 Statikus módszer
Itt közvetlenül elérhetjük a statikus változót és a módszert anélkül, hogy használnánk az osztály nevét. Ennek oka, hogy a statikus változók és módszerek alapértelmezés szerint nyilvánosak. És mivel ugyanabból az osztályból érkezünk, nem kell megadnunk az osztály nevét.
Statikus blokkok
A Java-ban statikus blokkokat használnak a statikus változók inicializálására. Például,
class Test ( // static variable static int age; // static block static ( age = 23; ) )
Itt láthatjuk, hogy statikus blokkot használtunk a szintaxissal:
static ( // variable initialization )
A statikus blokkot csak egyszer hajtják végre, amikor az osztály be van töltve a memóriába. Az osztály akkor töltődik be, ha vagy az osztály objektumát kódban kérik, vagy a statikus tagokat kódban kérik.
Egy osztálynak több statikus blokkja lehet, és mindegyik statikus blokkot ugyanabban a sorrendben hajtják végre, ahogyan egy programban írták őket.
3. példa: Statikus blokk használata a java-ban
class Main ( // static variables static int a = 23; static int b; static int max; // static blocks static ( System.out.println("First Static block."); b = a * 4; ) static ( System.out.println("Second Static block."); max = 30; ) // static method static void display() ( System.out.println("a = " + a); System.out.println("b = " + b); System.out.println("max = " + max); ) public static void main(String args()) ( // calling the static method display(); ) )
Kimenet :
Első statikus blokk. Második statikus blokk. a = 23 b = 92 max = 30
A fenti programban. amint a Fő osztály betöltődik,
- Az érték egy van állítva
23
. - Az első statikus blokk végrehajtásra kerül. Ezért a karaktersorozat
First Static block
kinyomtatásra kerül, és b értéke értékea * 4
. - A második statikus blokk végrehajtásra kerül. Ezért a karaktersorozat ki
Second Static block
van nyomtatva, és a max értéke értéke30
. - És végül a metódus belsejében lévő nyomtatott utasítások
display()
végrehajtásra kerülnek.
Beágyazott statikus osztály
A Java-ban osztályt deklarálhatunk egy másik osztályon belül. Az ilyen osztályokat beágyazott osztályoknak nevezik. A beágyazott osztályok 2 típusból állnak:
- Statikus beágyazott osztályok
- Nem statikus beágyazott osztályok
Például,
class OuterClass ( // static nested class static class NestedClass (… ) // non-static nested class class InnerClass (… ) )
További információkért keresse fel a Java Nested osztályt.