¿Por qué no puedo realizar tareas fuera de un método?

Resuelto asked hace 12 años • 7 respuestas

Si intento asignar un valor a una variable en una clase, pero fuera de un método me sale un error.

class one{
 Integer b;
 b=Integer.valueOf(2);
}

pero si lo inicializo durante la creación, funciona.

class one{
 Integer b=Integer.valueOf(2);
}

Dentro de un método, funciona en ambos casos.

 avatar Aug 22 '12 03:08
Aceptado

necesitas hacer

class one{
 Integer b;
 {
    b=Integer.valueOf(2);
 }
}

ya que las declaraciones tienen que aparecer en un bloque de código.

En este caso, el bloque es un bloque inicializador que se agrega a cada constructor (o al constructor predeterminado en este caso). Se ejecuta después de cualquier llamada super()y antes del bloque principal de código en cualquier constructor.

Por cierto: puede tener un bloque inicializador estático al static { }que se llama cuando se inicializa la clase.

p.ej

class one{
 static final Integer b;

 static {
    b=Integer.valueOf(2);
 }
}
Peter Lawrey avatar Aug 21 '2012 20:08 Peter Lawrey

Debido a que las asignaciones son declaraciones y las declaraciones solo se permiten dentro de bloques de código (métodos, constructores, inicializadores estáticos, etc.)

Fuera de estos sólo se permiten declaraciones.

Este :

  class one{
        Integer b=Integer.valueOf(2);
  }

es una declaración con un inicializador. Por eso se acepta

Razvan avatar Aug 21 '2012 20:08 Razvan