Java >> Java tutorial >  >> Tag >> static

Statisk nøgleord i Java

Sammenfletningen af ​​nøgleord med variabler i Java spiller en væsentlig rolle. I alt er der syvoghalvtreds nøgleord i Java . Blandt dem spiller det statiske nøgleord en afgørende rolle i hukommelseshåndtering. Programmører bruger det sammen med forskellige andre programmeringselementer. Denne artikel vil omtale det statiske søgeord i detaljer .

Hvad er statisk søgeord i Java?

I Java tilhører statiske medlemmer klassen i stedet for deres specifikke objekter. Det betyder, at du kan få adgang til eller bruge et hvilket som helst statisk erklæret programelement uden at oprette objekter. Programmører bruger det statiske nøgleord før metoden, variablen og klassenavnet.

Programmører bruger denne ikke-adgangsmodifikator til at dele den samme metode eller variabel i en given klasse. For at oprette et statisk medlem skal du gå foran erklæringen med det statiske nøgleord. En anden vigtig kendsgerning om statiske medlemmer er - når et medlem er erklæret statisk, kan programmører få adgang til disse medlemmer, før de opretter klassens objekt.

Eksempel

Her er et simpelt eksempel, der viser brugen af ​​det statiske søgeord.

import java.lang.System.*;
class Main 
{ 
    // This is a Static method 
    static void staticmeth() 
    { 
        System.out.println(" We can create the static method without creating the object of the class. "); 
    } 
    // This is a normal method
    public void NormalMeth() {
        System.out.println(" This public method needs to be invoked by creating the object of the class. ");
    }

    public static void main(String[] args) 
    { 
        staticmeth(); 
        Main o1 = new Main();
        o1.NormalMeth();     
    } 
}

Her har vi erklæret staticmeth() som statisk, hvori vi har placeret en besked. Nu inden for main() du kan bemærke, at du uden at oprette klasseobjektet har kaldt den statiske metode. staticmeth() metoden bruges, før objektet i Main-klassen oprettes.

Statiske variable

Statiske variabler er de variabler, der har en unik kopi og er globalt tilgængelige for ethvert objekt. Programmører erklærer de statiske variable ved at placere det statiske nøgleord efterfulgt af variabelnavnet. Alle klasseforekomster deler denne variabel, så dataene bliver delbare med alle klasserne. Vi kan kun oprette statiske variabler på klasseniveau.

Syntaks

static data_type variable_name;

Eksempel

Her er et kodestykke, der viser brugen af ​​statiske variable.

import java.lang.System.*;
class Main 
{ 
    // This is a Static method 
    static void staticmeth() 
    { 
        System.out.println(" We can create the static method without creating the object of the class. "); 
    } 
    // This is a normal method
    public void NormalMeth() {
        System.out.println(" This public method needs to be invoked by creating the object of the class. ");
    }

    public static void main(String[] args) 
    { 
        staticmeth(); 
        Main o1 = new Main();
        o1.NormalMeth();     
    } 
}

Inden for Stud klasse, har vi oprettet et statisk String-type variabelt institut. Vi har også en konstruktør, der henter elevnavn og rullenummer. Så udskriver vi institutværdien fra disp() metode. Bemærk, at når vi kalder disp() metode fra main() , forbliver institutværdien den samme hele vejen igennem.

Brug af statiske variabler i Java

  • Variabler, der er erklæret som statiske, er fælles for alle klasseforekomster.
  • Det giver os mulighed for at oprette en enkelt kopi af den anvendte variabel og delt med andre klasseforekomster.
  • Et Java-program initialiserer en statisk variabel før oprettelsen af ​​et klasseobjekt.
  • Vi kan bruge statiske variable, når vi vil have en variabel, der illustrerer noget om selve klassen.
  • Når vi har brug for en variabels værdi ens for alle klasseobjekter, erklærer vi en variabel statisk.

Statiske metoder

Vi kan kræve situationer, hvor vi skal udføre visse operationer, der ikke er afhængige af oprettelse af en klasseinstans. En sådan situation kræver at skabe en statisk metode. Et almindeligt eksempel på en statisk metode i Java er main() .

Syntaks

static method_name()

Enhver statisk metode tilhører en klasse og ikke objektet. Vi behøver heller ikke oprette klasseobjektet for at kalde den statiske metode. En statisk metode er i stand til at få adgang til det statiske datamedlem og samt ændre deres værdi.

Eksempel

Her er et kodestykke, der viser oprettelsen og brugen af ​​den statiske metode.

import java.lang.System.*;
import java.util.*;

class Main 
{ 
    // This is a Static method 
    static void staticmeth() 
    { 
        System.out.println(" This is a static method without creating the object of the class. "); 
    } 
    // This is a normal method
    public void NormalMeth() {
        System.out.println(" This is a public method which requires invoking by creating the object of the class. ");
    }

// main() started from here
    public static void main(String[] args) 
    { 
// static method invoked before the creation of object
        staticmeth(); 
        Main o1 = new Main();
        o1.NormalMeth();     
    } 
}

Her har vi erklæret staticmeth() som statisk, hvori vi har placeret et budskab i det. Nu fra main() programmører kan kalde den statiske metode uden at oprette klasseobjektet. staticmeth() metoden bruges, før du opretter hovedobjektet.

Brug af statisk metode i Java

  • Når vi vil indsætte en hvilken som helst kode eller operation, der ikke er afhængig af nogen objektoprettelse, skal programmører placere koden i den statiske variabel.
  • Vi erklærer en metode 'statisk' når vi ønsker at dele en bestemt kode med alle andre instansmetoder.
  • Når vi vil ændre eller tilsidesætte vores metodedefinition, bruger vi den statiske metode.
  • Hvis vi ønsker at skrive hjælpeklasser, hvis funktionalitet skal forblive den samme under hele programafviklingen, kommer den statiske metode til undsætning.

Statisk blok

For at bruge statiske variable i et program skal vi nogle gange initialisere dem. Programmører bruger den statiske blok til at initialisere statiske variable. Statiske blokke bliver udført i begyndelsen én gang, når programmet indlæser klassen.

Eksempel:

import java.lang.System.*;
import java.util.*;
class Main
{ 
    // declaring static variable 
    static int x = 10; 
    static int y;
      
    // creating static block 
    static { 
        System.out.println( " This is a static block. \n " ); 
        x = 12;
        y = x / 3; 
    } 
  
    public static void main(String[] args) 
    { 
        // instance of the class not created
       System.out.println(" This is executed from main. ");       
       // accessing the static variables from main()
       System.out.println(" Printing the value of x : "+ x); 
       System.out.println(" Printing the value of y : " + y); 
    } 
}

Vi har oprettet en klasse Main og erklærede den statiske heltalstypevariabel x . Så har vi lavet en statisk blok ved blot at placere det statiske nøgleord med de krøllede seler, hvor vi viste outputtet og udførte nogle operationer. Bemærk, at vi ikke behøver at oprette nogen klasseinstans i main() , stadig den statiske blok bliver udført i begyndelsen. Vi kan også få adgang til de statiske blokværdier fra hvor som helst i programmet, som vist ved at udskrive i main() .

Brug statisk blok i Java

  • Det hjælper med at initialisere det statiske datamedlem.
  • Hvis vi ønsker at udføre eller gemme en værdi i en variabel før udførelsen af ​​main() , dvs. på tidspunktet for klassens indlæsning, kommer den statiske blok til undsætning.

Statisk klasse

Java tillader programmører at definere en klasse inden for en anden klasse. Det kaldes indlejring af klasser. Det gør det muligt for programmører at gruppere logiske operationer i forskellige klasser under hensyntagen til brugen af ​​indkapsling. Indlejring af klasser giver også læsbarhed, og koden bliver nem at vedligeholde. De kaldes ikke-statiske indlejrede klasser eller indre klasser.

Ikke-statisk indlejret klassesyntaks

class Outer_Class
{
....
class Nested_Inner_Class
{
....
}
}

Programmører kan definere en statisk indlejret klasse ved at bruge det statiske nøgleord med den indlejrede klasse. Oprettelse af en statisk indlejret klasse gør det indre klasseobjekt fast forenet med det ydre klasseobjekt. En statisk indlejret klasse vil ikke være i stand til at nå noget ikke-statisk datamedlem eller metode. Kun ved at bruge det ydre klassenavn kan den statiske indlejrede klasse få adgang til de ikke-statiske klassemedlemmer.

Statisk indlejret klassesyntaks

class Outer_Class
{
....
static class Nested_Inner_Class
{
....
}
}

Eksempel på indlejret klasse (ikke-statisk)

import java.lang.System.*;
import java.util.*;
class Outer_Class {
   // inner class
   class Inner_Class {
      public void disp() {
         System.out.println(" The inner class is called ");
      }
   }  
   // Accessing the inner class
   void disp_InnerClass() {
      Inner_Class in = new Inner_Class();
      in.disp();
   }
}   
public class Main {
   public static void main(String args[]) {
      // Instantiating outer class for invoking
      Outer_Class out = new Outer_Class();
      out.disp_InnerClass();
   }
}

I dette program har vi oprettet to indlejrede klasser, der ikke er statiske af natur. For at få adgang til metoden eller ethvert medlem af den indre klasse, kan vi blot kalde den ved at bruge objektet for den ydre klasse som vist i disse to linjer

Outer_Class out = new Outer_Class();
out.disp_InnerClass();

Eksempel på statisk indlejret klasse

import java.lang.System.*;
import java.util.*;
// Outer class created
class Main 
    {  
    static int numb = 30;  
 
  // Inner class created with Static keyword
    static class InnerMain 
    {  
        void result() 
        {
            System.out.println(" Value is: " + numb);
        }  
    }  
  
  public static void main (String args[]) {  
  Main.InnerMain o1 = new Main.InnerMain();  
  o1.result();  
  }  
}

I dette program har vi lavet to indlejrede klasser, hvor den indre klasse er erklæret som statisk. Hvis du nu prøver at få adgang til result() metode eller ethvert medlem, der er erklæret inden for den indre klasse fra det ydre klasseobjekt, vil du få problemer med at få direkte adgang til det. For at få adgang til de statiske indlejrede klassemedlemmer skal du kalde dem ved at kalde den ydre klasse efterfulgt af periodeoperatoren og derefter den indre klasse og derefter oprette objektet som vist:

Main.InnerMain o1 = new Main.InnerMain();

Nu, ved at bruge dette objekt, kan du få adgang til medlemmerne af den statiske indlejrede klasse:o1.result();

Brug statisk klasse i Java

  • Vi kan instansiere en statisk klasse uden at instantiere andre klasseobjekter.
  • Programmører kan implementere klassemedlemssikkerhed ved hjælp af den statiske indlejrede klasseerklæring. Det er fordi du ikke kan oprette forekomsten af ​​en indre klasse uden at oprette forekomsten af ​​den ydre klasse.
  • Igen kan statiske indre klasser hjælpe med at gøre dit program kortfattet og overskueligt.
  • Hvis vi ønsker at bevare indkapslingen i vores program, er statiske klasser de bedste. Det er fordi de ikke kan få adgang til de ikke-statiske medlemmer.
  • Den statiske klasse hjælper med at gruppere klasser.

Forskellen mellem statisk og ikke-statisk indlejret klasse i Java

  • En statisk indlejret klasse kan direkte nå eller bruge de statiske medlemmer af den ydre klasse. Men for at bruge medlemmerne af den ydre klasse, er oprettelse af et ydre klasseobjekt et must.
  • En statisk indlejret klasse kræver ikke en reference til den ydre klasse, hvorimod en ikke-statisk indlejret klasse kræver en.
  • Den statiske indlejrede klasseerklæring kræver det statiske nøgleord i den indre klasse, hvorimod en ikke-statisk indlejret klasse ikke kræver nogen statisk erklæring.

Konklusion

Det statiske nøgleord spiller en væsentlig rolle i Java-programmeringsmiljøet. Programmører kan bruge det med variabler, metoder, blokke og klasser. Den statiske klasse hjælper med at få adgang til det primære medlem af den omsluttende klasse med en objektreference. Hvis du ved, hvordan du bruger det statiske søgeord korrekt med alle de forskellige programmeringselementer, kan du drage fordel af det.


Java tag