Selles õpetuses õpime näidete abil Java staatilist märksõna koos staatiliste meetodite, staatiliste muutujate ja staatiliste plokkidega.
Mis on Java staatiline märksõna?
Kui soovime Java-s juurde pääseda klassi liikmetele, peame kõigepealt looma klassi eksemplari. Kuid on olukordi, kus soovime pääseda klassi liikmetele juurde muutujaid loomata.
Nendes olukordades saame static
Java-s märksõna kasutada . Kui tahame klassi liikmetele juurde pääseda klassi eksemplari loomata, peame klassi liikmed staatiliseks tunnistama.
Math
Klassi Java on peaaegu kõik selle liikmed staatiline. Niisiis, pääseme selle liikmetele juurde, matemaatika klassi eksemplare loomata. Näiteks,
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)); ) )
Väljund :
Absoluutväärtus -12 = 12 PI väärtus = 3,141592653589793 Väärtus E = 2,718281828459045 2 2 = 4,0
Ülaltoodud näites pole me Math
klassi ühtegi eksemplari loonud . Aga me oleme pääse oma meetodid: abs()
ja pow()
ja muutujad: PI
ja E
.
See on võimalik, kuna Math
klassi meetodid ja muutujad on staatilised.
Staatilised meetodid
Staatilisi meetodeid nimetatakse ka klassimeetoditeks. Sellepärast, et staatiline meetod kuulub pigem klassi kui klassi objekti.
Ja me võime staatilisi meetodeid otse kasutada, kasutades klassi nime. Näiteks,
class Test ( // static method inside the Test class public static void method() (… ) ) class Main ( // invoking the static method Test.method(); )
Siit näeme, et staatilisele meetodile pääseb klassi nime kasutades otse juurde teistest klassidest.
Igas Java-programmis oleme main
meetodi deklareerinud static
. Sellepärast, et programmi käivitamiseks peaks JVM algfaasis saama kasutada peamist meetodit, kui mälus pole ühtegi objekti.
Näide 1: Java staatilised ja mittestaatilised meetodid
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)); ) )
Väljund :
2 * 2 = 4 2 + 3 = 5
Ülaltoodud programmis oleme klassi sees deklareerinud mittestaatilise meetodi multiply()
ja staatilise meetodi .add()
StaticTest
Põhiklassi sees näeme, et kutsume mitte staatilist meetodit klassi objekti ( st.multiply(2, 2)
) abil. Kuid me kutsume staatilist meetodit, kasutades klassi nime ( StaticTest.add(2, 3)
).
Staatilised muutujad
Kui loome Java objektides klassi objekte, on igal objektil oma koopia kõikidest klassi muutujatest. Näiteks,
class Test ( // regular variable int age; ) class Main ( // create instances of Test Test test1 = new Test(); Test test2 = new Test(); )
Siin on nii objektidel test1 kui test2 muutuva vanuse eraldi koopiad. Ja nad erinevad üksteisest.
Kui kuulutame muutuja staatiliseks, on kõigil klassi objektidel sama staatiline muutuja. Sellepärast, et nagu staatilised meetodid, on ka staatilised muutujad klassiga seotud. Staatiliste muutujate juurde pääsemiseks pole meil vaja luua klassi objekte. Näiteks,
class Test ( // static variable static int age; ) class Main ( // access the static variable Test.age = 20; )
Siin näeme, et pääseme teise klassi staatilisele muutujale juurde, kasutades klassi nime.
Näide 2: Java staatilised ja mittestaatilised muutujad
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)); ) )
Väljund :
min + 1 = 6 max + 1 = 11
Eespool nimetatud programmis oleme klassi Test kuulutanud mittestaatilise muutuja nimega min ja staatilise muutuja nimega max.
Põhiklassi sees näeme, et kutsume mittestaatilist muutujat klassi objekti ( obj.min + 1
) abil. Staatilist muutujat kutsume siiski klassi nime ( Test.max + 1
) abil.
Märkus . Staatilisi muutujaid kasutatakse Java-s harva. Selle asemel kasutatakse staatilisi konstante. Need staatilised konstandid on määratletud static final
märksõna järgi ja kujutatud suurtähtedega. Seetõttu eelistavad mõned inimesed kasutada staatiliste muutujate jaoks ka suurtähti.
Juurdepääs klassi staatilistele muutujatele ja meetoditele
Staatilisele muutujale pääseme juurde teisest klassist. Seega oleme sellele juurdepääsu saamiseks kasutanud klassi nime. Kui aga tahame staatilisele liikmele juurde pääseda klassi seest, pääseb sellele otse juurde. Näiteks,
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(); ) )
Väljund :
Vanus on 30 Staatiline meetod
Siin on meil juurdepääs staatilisele muutujale ja meetodile otse, ilma klassi nime kasutamata. Sellepärast, et staatilised muutujad ja meetodid on vaikimisi avalikud. Ja kuna meil on juurdepääs samast klassist, ei pea me klassi nime määrama.
Staatilised plokid
Java-s kasutatakse staatilisi muutujaid initsialiseerimiseks staatilisi plokke. Näiteks,
class Test ( // static variable static int age; // static block static ( age = 23; ) )
Siin näeme, et oleme kasutanud süntaksiga staatilist plokki:
static ( // variable initialization )
The static block is executed only once when the class is loaded in memory. The class is loaded if either the object of the class is requested in code or the static members are requested in code.
A class can have multiple static blocks and each static block is executed in the same sequence in which they have been written in a program.
Example 3: Use of static block in java
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(); ) )
Output:
First Static block. Second Static block. a = 23 b = 92 max = 30
In the above program. as soon as the Main class is loaded,
- The value of a is set to
23
. - The first static block is executed. Hence, the string
First Static block
is printed and the value of b is set toa * 4
. - The second static block is executed. Hence, the string
Second Static block
is printed and the value of max is set to30
. - Ja lõpuks
display()
täidetakse meetodi sees olevad väljatrükid .
Pesastatud staatiline klass
Java keeles võime klassi kuulutada teise klassi sisse. Selliseid klasse nimetatakse pesastatud klassideks. Pesastatud klassid on kahte tüüpi:
- Staatilised pesastatud klassid
- Mittestaatilised pesastatud klassid
Näiteks,
class OuterClass ( // static nested class static class NestedClass (… ) // non-static nested class class InnerClass (… ) )
Lisateabe saamiseks külastage Java pesastatud klassi.