La palabra clave estática se utiliza para construir métodos que existirán independientemente de si se generan o no instancias de la clase. Cualquier método que utilice la palabra clave estática se denomina método estático.
Características del método estático:
- Un método estático en Java es un método que es parte de una clase en lugar de una instancia de esa clase.
- Cada instancia de una clase tiene acceso al método.
- Los métodos estáticos tienen acceso a las variables de clase (variables estáticas) sin usar el objeto de la clase (instancia).
- Solo se puede acceder a los datos estáticos mediante un método estático. No puede acceder a datos que no sean estáticos (variables de instancia).
- Tanto en los métodos estáticos como en los no estáticos, se puede acceder directamente a los métodos estáticos.
Sintaxis para declarar el método estático:
Access_modifier static void methodName() { // Method body. }
El nombre de la clase se puede usar para invocar o acceder a métodos estáticos.
Sintaxis para llamar a un método estático:
className.methodName();
Ejemplo 1: el método estático no tiene acceso a la variable de instancia
La JVM ejecuta primero el método estático, seguido de la creación de instancias de clase. Porque no se puede acceder a ningún objeto cuando se usa el método estático. Un método estático no tiene acceso a las variables de instancia. Como resultado, un método estático no puede acceder a la variable de instancia de una clase.
Java
// Java program to demonstrate that // The static method does not have // access to the instance variable import java.io.*; public class GFG { // static variable static int a = 40; // instance variable int b = 50; void simpleDisplay() { System.out.println(a); System.out.println(b); } // Declaration of a static method. static void staticDisplay() { System.out.println(a); } // main method public static void main(String[] args) { GFG obj = new GFG(); obj.simpleDisplay(); // Calling static method. staticDisplay(); } }
40 50 40
Ejemplo 2: tanto en los métodos estáticos como en los no estáticos, se accede directamente a los métodos estáticos.
Java
// Java program to demonstrate that // In both static and non-static methods, // static methods are directly accessed. import java.io.*; public class StaticExample { static int num = 100; static String str = "GeeksForGeeks"; // This is Static method static void display() { System.out.println("static number is " + num); System.out.println("static string is " + str); } // non-static method void nonstatic() { // our static method can accessed // in non static method display(); } // main method public static void main(String args[]) { StaticExample obj = new StaticExample(); // This is object to call non static function obj.nonstatic(); // static method can called // directly without an object display(); } }
static number is 100 static string is GeeksForGeeks static number is 100 static string is GeeksForGeeks
¿Por qué usar métodos estáticos?
- Para acceder y cambiar variables estáticas y otros métodos estáticos no basados en objetos.
- Las clases de utilidad y asistencia emplean con frecuencia métodos estáticos.
Restricciones en métodos estáticos:
- Los métodos estáticos no pueden usar miembros de datos no estáticos o métodos no estáticos, y los métodos estáticos no pueden llamar directamente a métodos no estáticos.
- En un entorno estático, this y super no se pueden usar.
¿Por qué el método principal en Java es estático?
Es porque no se necesita llamar a un método estático del objeto. Si se tratara de una función no estática, JVM primero crearía un objeto antes de llamar al método main(), lo que generaría una dificultad de asignación de memoria adicional.
Diferencia entre el método estático y el método de instancia.
Métodos de instancia |
Métodos estáticos |
---|---|
Requiere un objeto de la clase. | No requiere un objeto de la clase. |
Puede acceder a todos los atributos de una clase. | Solo puede acceder al atributo estático de una clase. |
Solo se puede acceder a los métodos utilizando la referencia de objeto. | Solo se accede al método por nombre de clase. |
Sintaxis: Objref.nombremétodo() | Sintaxis: className.methodname() |
Es un ejemplo de programación de paso por valor. | Es un ejemplo de programación de paso por referencia. |
Publicación traducida automáticamente
Artículo escrito por sanketnagare y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA