Šioje pamokoje pavyzdžių pagalba sužinosime apie „Java“ statinį raktinį žodį, kartu su statiniais metodais, statiniais kintamaisiais ir statiniais blokais.
Kas yra „Java“ statinis raktinis žodis?
Jei „Java“ norime pasiekti klasės narius, pirmiausia turime sukurti klasės egzempliorių. Tačiau bus situacijų, kai norime pasiekti klasės narius nekurdami jokių kintamųjų.
Tokiose situacijose static
raktinį žodį galime naudoti „ Java“. Jei norime pasiekti klasės narius nesukurdami klasės egzemplioriaus, turime klasių narius paskelbti statiškais.
„ Math
Java “ klasėje beveik visi nariai yra statiniai. Taigi, mes galime pasiekti jo narius nekurdami matematikos klasės egzempliorių. Pavyzdžiui,
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)); ) )
Išvestis :
Absoliuti vertė -12 = 12 PI reikšmė = 3,141592653589793 E reikšmė = 2,718281828459045 2 2 = 4,0
Ankstesniame pavyzdyje mes nesukūrėme jokių Math
klasės egzempliorių . Bet mes galime prieiti prie savo metodus: abs()
ir pow()
ir kintamieji: PI
ir E
.
Tai įmanoma, nes Math
klasės metodai ir kintamieji yra statiški.
Statiniai metodai
Statiniai metodai dar vadinami klasės metodais. Taip yra todėl, kad statinis metodas priklauso klasei, o ne klasės objektui.
Statinius metodus galime naudoti tiesiogiai naudodami klasės pavadinimą. Pavyzdžiui,
class Test ( // static method inside the Test class public static void method() (… ) ) class Main ( // invoking the static method Test.method(); )
Čia galime pamatyti, kad naudojant statinį metodą galima tiesiogiai pasiekti kitas klases naudojant klasės pavadinimą.
Kiekvienoje „Java“ programoje mes deklaravome main
metodą static
. Taip yra todėl, kad vykdant programą JVM turėtų sugebėti pradiniame etape iškviesti pagrindinį metodą, kai atmintyje nėra objektų.
1 pavyzdys: „Java“ statiniai ir nestatiniai metodai
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)); ) )
Išvestis :
2 * 2 = 4 2 + 3 = 5
Ankstesnėje programoje mes deklaravome ne statinį metodą, o klasėje multiply()
- statinį .add()
StaticTest
Pagrindinės klasės viduje galime pamatyti, kad mes vadiname ne statinį metodą naudodami klasės objektą ( st.multiply(2, 2)
). Tačiau mes vadiname statinį metodą naudodami klasės pavadinimą ( StaticTest.add(2, 3)
).
Statiniai kintamieji
„Java“, kai mes kuriame klasės objektus, tada kiekvienas objektas turės savo visų klasės kintamųjų kopijas. Pavyzdžiui,
class Test ( // regular variable int age; ) class Main ( // create instances of Test Test test1 = new Test(); Test test2 = new Test(); )
Čia tiek objektai test1, tiek test2 turės atskiras kintamo amžiaus kopijas. Jie skiriasi vienas nuo kito.
Tačiau, jei skelbsime, kad kintamasis yra statinis, visi klasės objektai turi tą patį statinį kintamąjį. Taip yra todėl, kad kaip ir statiniai metodai, statiniai kintamieji taip pat yra susieti su klase. Ir mums nereikia kurti klasės objektų, kad galėtume pasiekti statinius kintamuosius. Pavyzdžiui,
class Test ( // static variable static int age; ) class Main ( // access the static variable Test.age = 20; )
Čia matome, kad prieiname prie kitos klasės statinio kintamojo naudodami klasės pavadinimą.
2 pavyzdys: „Java“ statiniai ir nestatiniai kintamieji
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)); ) )
Išvestis :
min + 1 = 6 maks. + 1 = 11
Pirmiau pateiktoje programoje mes klasėje „Test“ deklaravome nestatinį kintamąjį pavadinimu min ir statinį kintamąjį, pavadintą max.
Pagrindinės klasės viduje galime pamatyti, kad mes vadiname ne statinį kintamąjį naudodami klasės objektą ( obj.min + 1
). Tačiau mes vadiname statinį kintamąjį naudodami klasės pavadinimą ( Test.max + 1
).
Pastaba : „Java“ statiniai kintamieji naudojami retai. Vietoj to naudojamos statinės konstantos. Šios statinės konstantos apibrėžiamos pagal static final
raktinį žodį ir pateikiamos didžiosiomis raidėmis. Štai kodėl kai kurie žmonės nori naudoti didžiosios raidės ir statiniams kintamiesiems.
Prieiga prie statinių kintamųjų ir metodų klasėje
Prieiname prie statinio kintamojo iš kitos klasės. Taigi, norėdami jį pasiekti, naudojome klasės pavadinimą. Tačiau, jei norime pasiekti statinį narį iš klasės vidaus, jį galima pasiekti tiesiogiai. Pavyzdžiui,
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(); ) )
Išvestis :
Amžius yra 30 Statinis metodas
Čia mes galime tiesiogiai pasiekti statinį kintamąjį ir metodą nenaudodami klasės pavadinimo. Taip yra todėl, kad statiniai kintamieji ir metodai pagal nutylėjimą yra vieši. Kadangi prieiname iš tos pačios klasės, neturime nurodyti klasės pavadinimo.
Statiniai blokai
„Java“ programoje statiniai blokai naudojami statiniams kintamiesiems inicializuoti. Pavyzdžiui,
class Test ( // static variable static int age; // static block static ( age = 23; ) )
Čia galime pamatyti, kad naudojome statinį bloką su sintakse:
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
. - Galiausiai,
display()
vykdomi metodo spausdinimo teiginiai .
Lizdinė statinė klasė
„Java“ galime klasę paskelbti kitos klasės viduje. Tokios klasės yra žinomos kaip įdėtos klasės. Įdėtos klasės yra dviejų tipų:
- Statinės įdėtos klasės
- Nestatinės įdėtos klasės
Pavyzdžiui,
class OuterClass ( // static nested class static class NestedClass (… ) // non-static nested class class InnerClass (… ) )
Norėdami sužinoti daugiau, apsilankykite „Java Nested“ klasėje.