logo

statické klíčové slovo v Javě

The statické klíčové slovo v Javě se používá hlavně pro správu paměti. Klíčové slovo static v Javě se používá ke sdílení stejné proměnné nebo metody dané třídy. Uživatelé mohou použít statická klíčová slova s ​​proměnnými, metodami, bloky a vnořenými třídami. Klíčové slovo static patří do třídy než instance třídy. Klíčové slovo static se používá pro konstantní proměnnou nebo metodu, která je stejná pro každou instanci třídy.

The statický klíčové slovo je nepřístupový modifikátor v Javě, který je použitelný pro následující:



  1. Bloky
  2. Proměnné
  3. Metody
  4. Třídy

Poznámka: Chcete-li vytvořit statický člen (blok, proměnná, metoda, vnořená třída), před jeho deklaraci uveďte klíčové slovo statický .

Charakteristika statického klíčového slova:

Zde jsou některé charakteristiky statického klíčového slova v Javě:

    Alokace sdílené paměti : Statickým proměnným a metodám je během provádění programu přidělen paměťový prostor pouze jednou. Tento paměťový prostor je sdílen mezi všemi instancemi třídy, díky čemuž jsou statické členy užitečné pro udržování globálního stavu nebo sdílené funkce. Přístupné bez vytváření instance objektu: Ke statickým členům lze přistupovat bez nutnosti vytvářet instanci třídy. Díky tomu jsou užitečné pro poskytování pomocných funkcí a konstant, které lze použít v celém programu. Přidružené ke třídě, nikoli k objektům: Statické členy jsou přidruženy ke třídě, nikoli k jednotlivým objektům. To znamená, že změny statického člena se projeví ve všech instancích třídy a že ke statickým členům můžete přistupovat pomocí názvu třídy, nikoli odkazu na objekt. Nemají přístup k nestatickým členům: Statické metody a proměnné nemají přístup k nestatickým členům třídy, protože nejsou přidruženy k žádné konkrétní instanci třídy. Může být přetíženo, ale ne přepsáno : Statické metody mohou být přetíženy, což znamená, že můžete definovat více metod se stejným názvem, ale různými parametry. Nelze je však přepsat, protože jsou spojeny spíše s třídou než s konkrétní instancí třídy.

Když je člen deklarován jako statický, lze k němu přistupovat před vytvořením jakýchkoli objektů jeho třídy a bez odkazu na jakýkoli objekt. Například v níže uvedeném programu Java přistupujeme ke statické metodě m1() aniž byste vytvořili jakýkoli předmět Test třída.



Jáva






// Java program to demonstrate that a static member> // can be accessed before instantiating a class> class> Test> {> >// static method> >static> void> m1()> >{> >System.out.println(>'from m1'>);> >}> >public> static> void> main(String[] args)> >{> >// calling m1 without creating> >// any object of class Test> >m1();> >}> }>

c# seznam
>

>

Výstup

from m1>

Statické bloky

Pokud potřebujete provést výpočet, abyste mohli inicializovat svůj statické proměnné , můžete deklarovat statický blok, který se provede přesně jednou, když je třída poprvé načtena.

Zvažte následující java program demonstrující použití statických bloků.

Jáva




// Java program to demonstrate use of static blocks> class> Test> {> >// static variable> >static> int> a =>10>;> >static> int> b;> > >// static block> >static> {> >System.out.println(>'Static block initialized.'>);> >b = a *>4>;> >}> >public> static> void> main(String[] args)> >{> >System.out.println(>'from main'>);> >System.out.println(>'Value of a : '>+a);> >System.out.println(>'Value of b : '>+b);> >}> }>

unixový top příkaz

>

>

Výstup

Static block initialized. from main Value of a : 10 Value of b : 40>

Podrobný článek o statických blocích naleznete v tématu statické bloky

Statické proměnné

Když je proměnná deklarována jako statická, vytvoří se jediná kopie proměnné a bude sdílena mezi všemi objekty na úrovni třídy. Statické proměnné jsou v podstatě globální proměnné. Všechny instance třídy sdílejí stejnou statickou proměnnou.

Důležité body pro statické proměnné:

  • Statické proměnné můžeme vytvářet pouze na úrovni třídy. Viz zde
  • statický blok a statické proměnné jsou vykonávány v pořadí, v jakém jsou přítomny v programu.

Níže je uveden program Java, který demonstruje, že statický blok a statické proměnné jsou prováděny v pořadí, v jakém jsou přítomny v programu.

Jáva




// Java program to demonstrate execution> // of static blocks and variables> class> Test> {> >// static variable> >static> int> a = m1();> > >// static block> >static> {> >System.out.println(>'Inside static block'>);> >}> > >// static method> >static> int> m1() {> >System.out.println(>'from m1'>);> >return> 20>;> >}> > >// static method(main !!)> >public> static> void> main(String[] args)> >{> >System.out.println(>'Value of a : '>+a);> >System.out.println(>'from main'>);> >}> }>

>

>

seznam na java
Výstup

from m1 Inside static block Value of a : 20 from main>

Statické metody

Když je metoda deklarována s statický klíčové slovo, je známá jako statická metoda. Nejběžnějším příkladem statické metody je hlavní( ) metoda. Jak bylo uvedeno výše, ke každému statickému členu lze přistupovat před vytvořením jakéhokoli objektu jeho třídy a bez odkazu na jakýkoli objekt. Metody deklarované jako statické mají několik omezení:

  • Mohou pouze přímo volat jiné statické metody.
  • Mají přímý přístup pouze ke statickým datům.
  • Nemohou se odkazovat tento nebo super jakýmkoliv způsobem.

Níže je uveden java program, který demonstruje omezení statických metod.

Jáva




// Java program to demonstrate restriction on static methods> class> Test> {> >// static variable> >static> int> a =>10>;> > >// instance variable> >int> b =>20>;> > >// static method> >static> void> m1()> >{> >a =>20>;> >System.out.println(>'from m1'>);> > >// Cannot make a static reference to the non-static field b> >b =>10>;>// compilation error> > >// Cannot make a static reference to the> >// non-static method m2() from the type Test> >m2();>// compilation error> > >// Cannot use super in a static context> >System.out.println(>super>.a);>// compiler error> >}> > >// instance method> >void> m2()> >{> >System.out.println(>'from m2'>);> >}> > > > >public> static> void> main(String[] args)> >{> >// main method> >}> }>

>

>

Výstup:

prog.java:18: error: non-static variable b cannot be referenced from a static context b = 10; // compilation error ^ prog.java:22: error: non-static method m2() cannot be referenced from a static context m2(); // compilation error ^ prog.java:25: error: non-static variable super cannot be referenced from a static context System.out.println(super.a); // compiler error ^ prog.java:25: error: cannot find symbol System.out.println(super.a); // compiler error ^ symbol: variable a 4 errors>

Kdy použít statické proměnné a metody?

Použijte statickou proměnnou pro vlastnost, která je společná pro všechny objekty. Například ve třídě Student mají všichni studenti stejný název vysoké školy. Pro změnu statických proměnných použijte statické metody.

Zvažte následující java program, který ilustruje použití statický klíčová slova s ​​proměnnými a metodami.

Jáva




převod řetězce na datum

// A java program to demonstrate use of> // static keyword with methods and variables> // Student class> class> Student {> >String name;> >int> rollNo;> >// static variable> >static> String cllgName;> >// static counter to set unique roll no> >static> int> counter =>0>;> >public> Student(String name)> >{> >this>.name = name;> >this>.rollNo = setRollNo();> >}> >// getting unique rollNo> >// through static variable(counter)> >static> int> setRollNo()> >{> >counter++;> >return> counter;> >}> >// static method> >static> void> setCllg(String name) { cllgName = name; }> >// instance method> >void> getStudentInfo()> >{> >System.out.println(>'name : '> +>this>.name);> >System.out.println(>'rollNo : '> +>this>.rollNo);> >// accessing static variable> >System.out.println(>'cllgName : '> + cllgName);> >}> }> // Driver class> public> class> StaticDemo {> >public> static> void> main(String[] args)> >{> >// calling static method> >// without instantiating Student class> >Student.setCllg(>'XYZ'>);> >Student s1 =>new> Student(>'Alice'>);> >Student s2 =>new> Student(>'Bob'>);> >s1.getStudentInfo();> >s2.getStudentInfo();> >}> }>

>

>

Výstup

name : Alice rollNo : 1 cllgName : XYZ name : Bob rollNo : 2 cllgName : XYZ>

d

Statické třídy

Lze vytvořit třídu statický pouze pokud se jedná o vnořenou třídu. Nemůžeme deklarovat třídu nejvyšší úrovně se statickým modifikátorem, ale můžeme deklarovat vnořené třídy jako statické. Takové typy tříd se nazývají vnořené statické třídy. Vnořená statická třída nepotřebuje odkaz na vnější třídu. V tomto případě statická třída nemůže získat přístup k nestatickým členům třídy Outer.

Poznámka: Pro statickou vnořenou třídu viz a statická vnořená třída v jazyce Java

Implementace:

Jáva




// A java program to demonstrate use> // of static keyword with Classes> import> java.io.*;> public> class> GFG {> >private> static> String str =>'techcodeview.com'>;> >// Static class> >static> class> MyNestedClass {> > >// non-static method> >public> void> disp(){> >System.out.println(str);> >}> >}> > >public> static> void> main(String args[])> >{> >GFG.MyNestedClass obj> >=>new> GFG.MyNestedClass();> >obj.disp();> >}> }>

>

>

trojitá zima
Výstup

techcodeview.com>

Zde je příklad programu Java, který demonstruje použití statického klíčového slova:

Jáva




public> class> ExampleClass {> >public> static> int> count =>0>;> >public> int> id;> >public> ExampleClass() {> >count++;> >id = count;> >}> >public> static> void> printCount() {> >System.out.println(>'Number of instances: '> + count);> >}> >public> void> printId() {> >System.out.println(>'Instance ID: '> + id);> >}> >public> static> void> main(String[] args) {> >ExampleClass e1 =>new> ExampleClass();> >ExampleClass e2 =>new> ExampleClass();> >ExampleClass e3 =>new> ExampleClass();> >e1.printId();> >e2.printId();> >e3.printId();> >ExampleClass.printCount();> >}> }>

>

>

Výstup

Instance ID: 1 Instance ID: 2 Instance ID: 3 Number of instances: 3>

výhody:

    Efektivita paměti: Statickým členům je během provádění programu přidělena paměť pouze jednou, což může u velkých programů vést k výrazné úspoře paměti. Vylepšený výkon: Protože jsou statické členy přidruženy ke třídě spíše než k jednotlivým instancím, lze k nim přistupovat rychleji a efektivněji než k nestatickým členům. Globální přístupnost: Ke statickým členům lze přistupovat odkudkoli v programu, bez ohledu na to, zda byla vytvořena instance třídy. Zapouzdření obslužných metod: Statické metody lze použít k zapouzdření obslužných funkcí, které nevyžadují od objektu žádné informace o stavu. To může zlepšit organizaci kódu a usnadnit opětovné použití pomocných funkcí ve více třídách. Konstanty: Statické konečné proměnné lze použít k definování konstant, které jsou sdíleny v celém programu. Funkčnost na úrovni třídy: Statické metody lze použít k definování funkčnosti na úrovni třídy, která nevyžaduje žádné informace o stavu z objektu, jako jsou tovární metody nebo pomocné funkce.

Celkově je klíčové slovo static mocným nástrojem, který může pomoci zlepšit efektivitu a organizaci vašich programů Java.