Comparación de palabra clave estática en C++ y Java

La palabra clave estática se usa casi con el mismo propósito tanto en C++ como en Java. Sin embargo, hay algunas diferencias. Esta publicación cubre las similitudes y diferencias de la palabra clave estática en C++ y Java. 

Similitudes entre C++ y Java para la palabra clave estática:

  • Los miembros de datos estáticos se pueden definir en ambos idiomas.
  • Las funciones miembro estáticas se pueden definir en ambos idiomas.
  • Es posible acceder fácilmente a los miembros estáticos, sin crear algunos objetos.

Diferencias entre C++ y Java para la palabra clave estática:

C++

Java

C++ no admite bloques estáticos. Java admite bloque estático (también llamado cláusula estática). Se utiliza para la inicialización estática de una clase.
Se pueden declarar variables locales estáticas. No se admiten variables locales estáticas.

Los puntos anteriores se discuten en detalle a continuación:

1. Miembros de datos estáticos: al igual que C++, los miembros de datos estáticos en Java son miembros de clase y se comparten entre todos los objetos. Por ejemplo, en el siguiente programa Java, la variable estática cuenta se usa para contar la cantidad de objetos creados.

Java

class Test {
    static int count = 0;
 
    Test() { count++; }
    public static void main(String arr[])
    {
        Test t1 = new Test();
        Test t2 = new Test();
        System.out.println("Total " + count
                           + " objects created");
    }
}
Producción

Total 2 objects created

2. Métodos de miembros estáticos: en C++ y Java, se pueden definir funciones de miembros estáticos. Los métodos declarados como estáticos son miembros de clase y tienen las siguientes restricciones:

A) Solo pueden llamar a otros métodos estáticos. Por ejemplo, el siguiente programa falla en la compilación. fun() no es estático y se llama en main() estático.

Java

class Main {
    public static void main(String args[])
    {
        System.out.println(fun());
    }
    int fun() { return 20; }
}

B) Solo deben acceder a datos estáticos.

C) No pueden acceder a este o súper . Por ejemplo, el siguiente programa falla en la compilación.

Java

class Base {
    static int x = 0;
}
 
class Derived extends Base {
    public static void fun()
    {
 
        // Compiler Error: non-static variable
        // cannot be referenced from a static context
        System.out.println(super.x);
    }
}

D) Al igual que C++, se puede acceder a miembros de datos estáticos y métodos estáticos sin crear un objeto. Se puede acceder a ellos utilizando los nombres de clase. Por ejemplo, en el siguiente programa, se accede al número de miembros de datos estáticos y al método estático fun() sin ningún objeto. 

Java

class Test {
    static int count = 0;
    public static void fun()
    {
        System.out.println("Static fun() called");
    }
}
 
class Main {
    public static void main(String arr[])
    {
        System.out.println("Test.count = " + Test.count);
        Test.fun();
    }
}
Producción

Test.count = 0
Static fun() called

3. Bloque estático: a diferencia de C++, Java admite un bloque especial, llamado bloque estático (también llamado cláusula estática) que se puede usar para la inicialización estática de una clase. Este código dentro del bloque estático se ejecuta solo una vez. Consulte Bloques estáticos en Java para obtener más información.

4. Variables locales estáticas: a diferencia de Java, C++ admite variables locales estáticas. Por ejemplo, el siguiente programa Java falla en la compilación. 

Java

class Test {
    public static void main(String args[])
    {
        System.out.println(fun());
    }
    static int fun()
    {
 
        // Compiler Error: Static local
        // variables are not allowed
        static int x = 10;
        return x--;
    }
}

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 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 *