logo

Paraula clau estàtica en Java

El paraula clau estàtica en Java s'utilitza principalment per a la gestió de la memòria. La paraula clau estàtica a Java s'utilitza per compartir la mateixa variable o mètode d'una classe determinada. Els usuaris poden aplicar paraules clau estàtiques amb variables, mètodes, blocs i classes imbricades. La paraula clau estàtica pertany a la classe que una instància de la classe. La paraula clau estàtica s'utilitza per a una variable constant o un mètode que és el mateix per a cada instància d'una classe.

El estàtica La paraula clau és un modificador de no accés a Java que s'aplica per al següent:

  1. Blocs
  2. Les variables
  3. Mètodes
  4. Classes

Nota: Per crear un membre estàtic (bloc, variable, mètode, classe imbricada), precediu la seva declaració amb la paraula clau estàtica .



Característiques de la paraula clau estàtica:

Aquestes són algunes de les característiques de la paraula clau estàtica a Java:

    Assignació de memòria compartida: a les variables i mètodes estàtics se'ls assigna espai de memòria només una vegada durant l'execució del programa. Aquest espai de memòria es comparteix entre totes les instàncies de la classe, cosa que fa que els membres estàtics siguin útils per mantenir l'estat global o la funcionalitat compartida. Accessible sense la instanciació d'objectes: es pot accedir als membres estàtics sense necessitat de crear una instància de la classe. Això els fa útils per proporcionar funcions d'utilitat i constants que es poden utilitzar a tot el programa. Associat a la classe, no a objectes: els membres estàtics estan associats a la classe, no a objectes individuals. Això vol dir que els canvis en un membre estàtic es reflecteixen en totes les instàncies de la classe i que podeu accedir als membres estàtics utilitzant el nom de la classe en lloc d'una referència d'objecte. No es poden accedir als membres no estàtics: els mètodes i variables estàtiques no poden accedir als membres no estàtics d'una classe, ja que no estan associats a cap instància concreta de la classe. Es pot sobrecarregar, però no anul·lar: els mètodes estàtics es poden sobrecarregar, el que significa que podeu definir diversos mètodes amb el mateix nom però amb diferents paràmetres. Tanmateix, no es poden anul·lar, ja que s'associen a la classe en lloc d'una instància concreta de la classe.

Quan un membre es declara estàtic, s'hi pot accedir abans que es creï cap objecte de la seva classe, i sense fer referència a cap objecte. Per exemple, al programa Java següent, estem accedint al mètode estàtic m1() sense crear cap objecte del Prova classe.

Java




// 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();> >}> }>

>

>

Sortida

from m1>

Blocs estàtics

Si necessiteu fer el càlcul per inicialitzar el vostre variables estàtiques , podeu declarar un bloc estàtic que s'executa exactament una vegada, quan es carrega la classe per primera vegada.

Considereu el següent programa java que demostra l'ús de blocs estàtics.

Java




// 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);> >}> }>

>

>

Sortida

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

Per obtenir un article detallat sobre blocs estàtics, vegeu blocs estàtics

Variables estàtiques

Quan una variable es declara estàtica, es crea una còpia única de la variable i es comparteix entre tots els objectes a nivell de classe. Les variables estàtiques són, essencialment, variables globals. Totes les instàncies de la classe comparteixen la mateixa variable estàtica.

Punts importants per a variables estàtiques:

  • Podem crear variables estàtiques només a nivell de classe. Veure aquí
  • El bloc estàtic i les variables estàtiques s'executen en l'ordre en què estan presents en un programa.

A continuació es mostra el programa Java per demostrar que els blocs estàtics i les variables estàtiques s'executen en l'ordre en què estan presents en un programa.

Java




// 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'>);> >}> }>

>

>

Sortida

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

Mètodes estàtics

Quan es declara un mètode amb el estàtica paraula clau, es coneix com a mètode estàtic. L'exemple més comú de mètode estàtic és el principal ( ) mètode. Com s'ha comentat anteriorment, es pot accedir a qualsevol membre estàtic abans que es creï cap objecte de la seva classe i sense fer referència a cap objecte. Els mètodes declarats com a estàtics tenen diverses restriccions:

  • Només poden cridar directament altres mètodes estàtics.
  • Només poden accedir directament a dades estàtiques.
  • No poden fer referència això o súper de qualsevol manera.

A continuació es mostra el programa java per demostrar les restriccions dels mètodes estàtics.

Java




// 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> >}> }>

>

>

Sortida:

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>

Quan utilitzar variables i mètodes estàtics?

Utilitzeu la variable estàtica per a la propietat que és comuna a tots els objectes. Per exemple, a classe Student, tots els estudiants comparteixen el mateix nom de la universitat. Utilitzeu mètodes estàtics per canviar variables estàtiques.

Considereu el següent programa java, que il·lustra l'ús de estàtica paraules clau amb variables i mètodes.

Java


fitxer json



// 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();> >}> }>

>

>

Sortida

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

d

Classes estàtiques

Es pot fer una classe estàtica només si és una classe imbricada. No podem declarar una classe de nivell superior amb un modificador estàtic, però podem declarar classes imbricades com a estàtiques. Aquest tipus de classes s'anomenen classes estàtiques imbricades. La classe estàtica anidada no necessita una referència de la classe externa. En aquest cas, una classe estàtica no pot accedir als membres no estàtics de la classe Outer.

Nota: Per a la classe imbricada estàtica, vegeu a classe imbricada estàtica a Java

Implementació:

Java




// 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();> >}> }>

>

>

Sortida

techcodeview.com>

Aquí teniu un exemple de programa Java que demostra l'ús de la paraula clau estàtica:

Java




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();> >}> }>

>

>

Sortida

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

Avantatges:

    Eficàcia de la memòria: als membres estàtics se'ls assigna memòria només una vegada durant l'execució del programa, cosa que pot provocar un estalvi de memòria important per a programes grans. Rendiment millorat: com que els membres estàtics s'associen a la classe i no a instàncies individuals, es pot accedir a ells de manera més ràpida i eficient que els membres no estàtics. Accessibilitat global: es pot accedir als membres estàtics des de qualsevol lloc del programa, independentment de si s'ha creat una instància de la classe. Encapsulació de mètodes d'utilitat: els mètodes estàtics es poden utilitzar per encapsular funcions d'utilitat que no requereixen cap informació d'estat d'un objecte. Això pot millorar l'organització del codi i facilitar la reutilització de funcions d'utilitat en diverses classes. Constants: les variables finals estàtiques es poden utilitzar per definir constants que es comparteixen a tot el programa. Funcionalitat a nivell de classe: els mètodes estàtics es poden utilitzar per definir una funcionalitat a nivell de classe que no requereix cap informació d'estat d'un objecte, com ara mètodes de fàbrica o funcions auxiliars.

En general, la paraula clau estàtica és una eina poderosa que pot ajudar a millorar l'eficiència i l'organització dels vostres programes Java.