Palabra clave estática de Java (con ejemplos)

En este tutorial, aprenderemos sobre la palabra clave estática de Java junto con métodos estáticos, variables estáticas y bloques estáticos con la ayuda de ejemplos.

¿Qué es una palabra clave estática en Java?

En Java, si queremos acceder a los miembros de la clase, primero debemos crear una instancia de la clase. Pero habrá situaciones en las que queramos acceder a los miembros de la clase sin crear ninguna variable.

En esas situaciones, podemos usar la staticpalabra clave en Java. Si queremos acceder a los miembros de la clase sin crear una instancia de la clase, debemos declarar los miembros de la clase estáticos.

La Mathclase en Java tiene casi todos sus miembros estáticos. Entonces, podemos acceder a sus miembros sin crear instancias de la clase Math. Por ejemplo,

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

Salida :

 Valor absoluto de -12 = 12 Valor de PI = 3,141592653589793 Valor de E = 2,718281828459045 2 2 = 4,0

En el ejemplo anterior, no hemos creado ninguna instancia de la Mathclase. Pero podemos acceder a sus métodos: abs()y pow()y variables: PIy E.

Es posible porque los métodos y variables de la Mathclase son estáticos.

Métodos estáticos

Los métodos estáticos también se denominan métodos de clase. Es porque un método estático pertenece a la clase y no al objeto de una clase.

Y podemos invocar métodos estáticos directamente usando el nombre de la clase. Por ejemplo,

 class Test ( // static method inside the Test class public static void method() (… ) ) class Main ( // invoking the static method Test.method(); )

Aquí, podemos ver que se puede acceder al método estático directamente desde otras clases usando el nombre de la clase.

En cada programa de Java, hemos declarado el mainmétodo static. Es porque para ejecutar el programa, la JVM debería poder invocar el método principal durante la fase inicial donde no existen objetos en la memoria.

Ejemplo 1: métodos Java estáticos y no estáticos

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

Salida :

 2 * 2 = 4 2 + 3 = 5

En el programa anterior, hemos declarado un método no estático con nombre multiply()y un método estático con nombre add()dentro de la clase StaticTest.

Dentro de la clase Main, podemos ver que estamos llamando al método no estático usando el objeto de la clase ( st.multiply(2, 2)). Sin embargo, estamos llamando al método estático usando el nombre de clase ( StaticTest.add(2, 3)).

Variables estáticas

En Java, cuando creamos objetos de una clase, cada objeto tendrá su propia copia de todas las variables de la clase. Por ejemplo,

 class Test ( // regular variable int age; ) class Main ( // create instances of Test Test test1 = new Test(); Test test2 = new Test(); )

Aquí, tanto los objetos test1 como test2 tendrán copias separadas de la variable age. Y son diferentes entre sí.

Sin embargo, si declaramos una variable estática, todos los objetos de la clase comparten la misma variable estática. Se debe a que, al igual que los métodos estáticos, las variables estáticas también están asociadas con la clase. Y no necesitamos crear objetos de la clase para acceder a las variables estáticas. Por ejemplo,

 class Test ( // static variable static int age; ) class Main ( // access the static variable Test.age = 20; )

Aquí, podemos ver que estamos accediendo a la variable estática de la otra clase usando el nombre de la clase.

Ejemplo 2: Variables estáticas y no estáticas de Java

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

Salida :

 mínimo + 1 = 6 máximo + 1 = 11

En el programa anterior, hemos declarado una variable no estática llamada min y una variable estática llamada max dentro de la clase Test.

Dentro de la clase Main, podemos ver que estamos llamando a la variable no estática usando el objeto de la clase ( obj.min + 1). Sin embargo, estamos llamando a la variable estática usando el nombre de la clase ( Test.max + 1).

Nota : Las variables estáticas rara vez se utilizan en Java. En su lugar, se utilizan las constantes estáticas. Estas constantes estáticas se definen mediante static finalpalabras clave y se representan en mayúsculas. Es por eso que algunas personas prefieren usar mayúsculas también para variables estáticas.

Acceder a variables y métodos estáticos dentro de la clase

Estamos accediendo a la variable estática desde otra clase. Por lo tanto, hemos utilizado el nombre de la clase para acceder a ella. Sin embargo, si queremos acceder al miembro estático desde dentro de la clase, se puede acceder directamente. Por ejemplo,

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

Salida :

 La edad es 30 Método estático

Aquí, podemos acceder a la variable estática y al método directamente sin usar el nombre de la clase. Es porque las variables estáticas y los métodos son públicos por defecto. Y, dado que estamos accediendo desde la misma clase, no tenemos que especificar el nombre de la clase.

Bloques estáticos

En Java, los bloques estáticos se utilizan para inicializar las variables estáticas. Por ejemplo,

 class Test ( // static variable static int age; // static block static ( age = 23; ) )

Aquí podemos ver que hemos utilizado un bloque estático con la sintaxis:

 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 to a * 4.
  • The second static block is executed. Hence, the string Second Static block is printed and the value of max is set to 30.
  • Y finalmente, display()se ejecutan las declaraciones de impresión dentro del método .

Clase estática anidada

En Java, podemos declarar una clase dentro de otra clase. Estas clases se conocen como clases anidadas. Las clases anidadas son de 2 tipos:

  • Clases anidadas estáticas
  • Clases anidadas no estáticas

Por ejemplo,

 class OuterClass ( // static nested class static class NestedClass (… ) // non-static nested class class InnerClass (… ) )

Para obtener más información, visite la clase anidada de Java.

Articulos interesantes...