¿Por qué no puedo realizar tareas fuera de un método?
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.
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);
}
}
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