logo

Palabra clave estática en Java

El palabra clave estática en Java se utiliza principalmente para la gestión de la memoria. La palabra clave estática en Java se utiliza para compartir la misma variable o método de una clase determinada. Los usuarios pueden aplicar palabras clave estáticas con variables, métodos, bloques y clases anidadas. La palabra clave estática pertenece a la clase que a una instancia de la clase. La palabra clave estática se utiliza para una variable constante o un método que es el mismo para cada instancia de una clase.

El estático La palabra clave es un modificador de no acceso en Java que se aplica a lo siguiente:

  1. Bloques
  2. variables
  3. Métodos
  4. Clases

Nota: Para crear un miembro estático (bloque, variable, método, clase anidada), preceda su declaración con la palabra clave estático .



Características de la palabra clave estática:

Estas son algunas características de la palabra clave estática en Java:

    Asignación de memoria compartida: a las variables y métodos estáticos se les asigna espacio de memoria solo una vez durante la ejecución del programa. Este espacio de memoria se comparte entre todas las instancias de la clase, lo que hace que los miembros estáticos sean útiles para mantener el estado global o la funcionalidad compartida. Accesible sin creación de instancias de objetos: se puede acceder a los miembros estáticos sin la necesidad de crear una instancia de la clase. Esto los hace útiles para proporcionar funciones de utilidad y constantes que se pueden utilizar en todo el programa. Asociados con la clase, no con objetos: los miembros estáticos están asociados con la clase, no con objetos individuales. Esto significa que los cambios realizados en un miembro estático se reflejan en todas las instancias de la clase y que puede acceder a los miembros estáticos utilizando el nombre de la clase en lugar de una referencia de objeto. No se puede acceder a miembros no estáticos: los métodos y variables estáticos no pueden acceder a miembros no estáticos de una clase, ya que no están asociados con ninguna instancia particular de la clase. Se puede sobrecargar, pero no anular: los métodos estáticos se pueden sobrecargar, lo que significa que puede definir varios métodos con el mismo nombre pero con diferentes parámetros. Sin embargo, no se pueden anular, ya que están asociados con la clase y no con una instancia particular de la clase.

Cuando un miembro se declara estático, se puede acceder a él antes de que se cree cualquier objeto de su clase y sin referencia a ningún objeto. Por ejemplo, en el siguiente programa Java, accedemos al método estático m1() sin crear ningún objeto del Prueba clase.

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

>

>

Producción

from m1>

Bloques estáticos

Si necesita hacer el cálculo para inicializar su variables estáticas , puede declarar un bloque estático que se ejecute exactamente una vez, cuando la clase se carga por primera vez.

Considere el siguiente programa Java que demuestra el uso de bloques estáticos.

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

>

>

Producción

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

Para obtener un artículo detallado sobre bloques estáticos, consulte bloques estáticos

Variables estáticas

Cuando una variable se declara como estática, se crea una única copia de la variable y se comparte entre todos los objetos a nivel de clase. Las variables estáticas son, esencialmente, variables globales. Todas las instancias de la clase comparten la misma variable estática.

Puntos importantes para variables estáticas:

  • Solo podemos crear variables estáticas a nivel de clase. Mira aquí
  • El bloque estático y las variables estáticas se ejecutan en el orden en que están presentes en un programa.

A continuación se muestra el programa Java para demostrar que el bloque estático y las variables estáticas se ejecutan en el orden en que están presentes 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'>);> >}> }>

>

>

Producción

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

Métodos estáticos

Cuando se declara un método con el estático palabra clave, se conoce como método estático. El ejemplo más común de un método estático es el principal( ) método. Como se analizó anteriormente, se puede acceder a cualquier miembro estático antes de que se cree cualquier objeto de su clase y sin hacer referencia a ningún objeto. Los métodos declarados como estáticos tienen varias restricciones:

  • Solo pueden llamar directamente a otros métodos estáticos.
  • Solo pueden acceder directamente a datos estáticos.
  • No pueden referirse a este o súper de cualquier manera.

A continuación se muestra el programa Java para demostrar las restricciones de los métodos estáticos.

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

>

>

Producción:

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>

¿Cuándo utilizar variables y métodos estáticos?

Utilice la variable estática para la propiedad que es común a todos los objetos. Por ejemplo, en la clase Estudiante, todos los estudiantes comparten el mismo nombre de universidad. Utilice métodos estáticos para cambiar variables estáticas.

Considere el siguiente programa java, que ilustra el uso de estático palabras clave con variables y métodos.

Java




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

>

>

Producción

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

d

Clases estáticas

Se puede hacer una clase estático sólo si es una clase anidada. No podemos declarar una clase de nivel superior con un modificador estático, pero podemos declarar clases anidadas como estáticas. Estos tipos de clases se denominan clases estáticas anidadas. La clase estática anidada no necesita una referencia de la clase externa. En este caso, una clase estática no puede acceder a miembros no estáticos de la clase Externa.

Nota: Para clases anidadas estáticas, consulte un clase anidada estática en java

Implementación:

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

>

>

Producción

techcodeview.com>

A continuación se muestra un programa Java de ejemplo que demuestra el uso de la palabra clave 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();> >}> }>

>

>

Producción

declaración de cambio de java
Instance ID: 1 Instance ID: 2 Instance ID: 3 Number of instances: 3>

Ventajas:

    Eficiencia de la memoria: a los miembros estáticos se les asigna memoria solo una vez durante la ejecución del programa, lo que puede generar ahorros significativos de memoria para programas grandes. Rendimiento mejorado: debido a que los miembros estáticos están asociados con la clase en lugar de con instancias individuales, se puede acceder a ellos de manera más rápida y eficiente que los miembros no estáticos. Accesibilidad global: se puede acceder a los miembros estáticos desde cualquier parte del programa, independientemente de si se ha creado una instancia de la clase. Encapsulación de métodos de utilidad: los métodos estáticos se pueden utilizar para encapsular funciones de utilidad que no requieren ninguna información de estado de un objeto. Esto puede mejorar la organización del código y facilitar la reutilización de funciones de utilidad en varias clases. Constantes: las variables finales estáticas se pueden utilizar para definir constantes que se comparten en todo el programa. Funcionalidad a nivel de clase: los métodos estáticos se pueden utilizar para definir la funcionalidad a nivel de clase que no requiere ninguna información de estado de un objeto, como métodos de fábrica o funciones auxiliares.

En general, la palabra clave estática es una herramienta poderosa que puede ayudar a mejorar la eficiencia y organización de sus programas Java.