Saltar al contenido

Valores predeterminados e inicialización en Java

Necesitamos tu apoyo para extender nuestros artículos en referencia a las ciencias de la computación.

Solución:

En el primer ejemplo de código, a es un main variable local del método. Las variables locales del método deben inicializarse antes de usarlas.

En el segundo ejemplo de código, a es una variable miembro de la clase, por lo que se inicializará con el valor predeterminado.

Lea su referencia con más cuidado:

Valores predeterminados

No siempre es necesario asignar un valor cuando un campo se declara.
Campos que se declaran pero no se inicializan se establecerán en un valor predeterminado razonable por el compilador. En términos generales, este valor predeterminado será cero o null, dependiendo del tipo de datos. Sin embargo, confiar en tales valores predeterminados generalmente se considera un mal estilo de programación.

El siguiente gráfico resume los valores predeterminados para los tipos de datos anteriores.

. . .

Las variables locales son ligeramente diferentes; el compilador nunca asigna un valor predeterminado a una variable local no inicializada. Si no puede inicializar su variable local donde está declarada, asegúrese de asignarle un valor antes de intentar usarla. Acceder a una variable local no inicializada dará como resultado un error en tiempo de compilación.

Estos son los principales factores involucrados:

  1. variable miembro (OK por defecto)
  2. static variable (predeterminado OK)
  3. variable miembro final (no inicializada, debe establecerse en el constructor)
  4. final static variable (no inicializada, debe establecerse en un static cuadra )
  5. variable local (no inicializada)

Nota 1: debe inicializar las variables miembro finales en cada constructor implementado!

Nota 2: debe inicializar las variables miembro finales dentro del bloque del propio constructor, sin llamar a otro método que las inicialice. Por ejemplo, esto es no válido:

private final int memberVar;

public Foo() 
    // Invalid initialization of a final member
    init();


private void init() 
    memberVar = 10;

Nota 3: las matrices son objetos en Java, incluso si almacenan primitivas.

Nota 4: cuando inicializa un array, todos sus elementos están configurados por defecto, independientemente de ser miembro o local. array.

Adjunto un ejemplo de código, presentando los casos antes mencionados:

public class Foo 
    // Static and member variables are initialized to default values

    // Primitives
    private int a; // Default 0
    private static int b; // Default 0

    // Objects
    private Object c; // Default NULL
    private static Object d; // Default NULL

    // Arrays (note: they are objects too, even if they store primitives)
    private int[] e; // Default NULL
    private static int[] f; // Default NULL

    // What if declared as final?

    // Primitives
    private final int g; // Not initialized. MUST set in the constructor
    private final static int h; // Not initialized. MUST set in a static 

    // Objects
    private final Object i; // Not initialized. MUST set in constructor
    private final static Object j; // Not initialized. MUST set in a static 

    // Arrays
    private final int[] k; // Not initialized. MUST set in constructor
    private final static int[] l; // Not initialized. MUST set in a static 

    // Initialize final statics
    static 
        h = 5;
        j = new Object();
        l = new int[5]; // Elements of l are initialized to 0
    

    // Initialize final member variables
    public Foo() 
        g = 10;
        i = new Object();
        k = new int[10]; // Elements of k are initialized to 0
    

    // A second example constructor
    // You have to initialize final member variables to every constructor!
    public Foo(boolean aBoolean) 
        g = 15;
        i = new Object();
        k = new int[15]; // Elements of k are initialized to 0
    

    public static void main(String[] args) 
        // Local variables are not initialized
        int m; // Not initialized
        Object n; // Not initialized
        int[] o; // Not initialized

        // We must initialize them before use
        m = 20;
        n = new Object();
        o = new int[20]; // Elements of o are initialized to 0
    

Aquí puedes ver las reseñas y valoraciones de los usuarios

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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