Comprender «estático» en «principal vacío estático público» en Java

Los siguientes puntos explican qué es «estático» en el método main(): 
 

  • Método main() : El método main(), en Java, es el punto de entrada de la JVM (Java Virtual Machine) al programa Java. JVM inicia el programa java invocando el método main(). 
     

  • Estática es una palabra clave . La función de agregar estática antes de cualquier entidad es hacer que esa entidad sea una entidad de clase. Significa que agregar métodos y variables estáticos antes de convertirlos en métodos de clase y variables de clase respectivamente, en lugar de métodos de instancia y variables de instancia. 
    Por lo tanto, se puede acceder directamente a los métodos y variables estáticos con la ayuda de Class, lo que significa que no es necesario crear objetos para acceder a métodos o variables estáticos. 
     
// Making a function as static
static void func()
{}

// Making a variable as static
static int var;



  • Métodos estáticos: cuando un método se declara con la palabra clave estática, se conoce como método estático. Como se discutió anteriormente, se puede acceder a cualquier miembro estático antes de que se cree cualquier objeto de su clase y sin referencia a ningún objeto. 
     
// Making a static function
class GfG
{
    static void func()
    {}
}

// Calling a static function
GfG.func();



  • Método main() estático: cuando se agrega la palabra clave estática en la definición de función del método main(), se conoce como método main() estático. 
     
class GfG
{
    // Making a static main function
    public static void main(String[] args)
    {}
}



Necesidad de static en el método main() : dado que el método main() es el punto de entrada de cualquier aplicación Java, por lo tanto, hacer que el método main() sea estático es obligatorio por las siguientes razones: 
 

  • El método estático main() deja muy claro que la JVM lo llame para iniciar la aplicación Java . De lo contrario, sería necesario especificar la función de entrada para cada compilación de aplicación Java, para que la JVM inicie la aplicación.
  • El método es estático porque, de lo contrario, habría ambigüedad sobre qué constructor se debe llamar. 
    Ejemplo, si la clase se ve así: 
     
public class GfG{
  protected GfG(int g){}
  public void main(String[] args){
  }
}



  • ¿La JVM ahora entra en un estado de ambigüedad y decide si debe llamar al nuevo GfG (int)? En caso afirmativo, ¿qué debería pasar por g? De lo contrario, ¿debería la JVM instanciar GfG sin ejecutar ningún método constructor? 
    Hay demasiados casos extremos y ambigüedades como esta para que tenga sentido que la JVM tenga que crear instancias de una clase antes de llamar al punto de entrada. Es por eso que main es estático.
  • El método main() es estático porque es conveniente para el JDK. Considere un escenario en el que no es obligatorio hacer que el método main() sea estático. Entonces, en este caso, eso solo dificulta que varios IDE detecten automáticamente las clases ‘ejecutables’ en un proyecto. Por lo tanto, es conveniente convertir en una convención el método de entrada ‘main()’ como ‘public static void main(String[] args)’.

¿Qué sucede si no escribimos «estático» antes del método principal? Si no escribimos «estático» antes del método principal, nuestro programa se compilará sin ningún error de compilación. Pero en el momento de la ejecución, la JVM busca el método principal que es público, estático, con un tipo de retorno y una array String como argumento. Si no se encuentra dicho método, se genera un error en el tiempo de ejecución.

Java

/*package whatever //do not write package name here */
 
import java.io.*;
 
class GFG {
    public void main (String[] args) {
        System.out.println("GFG!");
    }
}

Salida: Se mostrará un mensaje de error de la siguiente manera

Publicación traducida automáticamente

Artículo escrito por ShraddhaVarat y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *