Cómo administrar el alcance variable en Java
El alcance se refiere al área de accesibilidad de una variable. Determina dónde se puede utilizar una variable declarada. Intentar usar una variable fuera de su alcance le dará un error en tiempo de compilación.
Como regla general, siempre debe usar el principio de privilegio mínimo al determinar el alcance para dar una variable. De acuerdo con este principio, una variable debe tener solo la visibilidad que necesita para hacer su trabajo y nada más.
Reglas de alcance
Hay cuatro reglas básicas que rigen el alcance de las declaraciones.
Regla 1
Cuando declaras un parámetro, su alcance está dentro del cuerpo de la función.
String withdraw (int amount){
// this is the scope of the parameter "amount" ie from the left brace ,{, to the the right one, }
}
Regla 2
El alcance de una variable declarada en una función es desde la parte donde se declara hasta el final del cuerpo de la función. Este tipo de variable declarada dentro del cuerpo de una función se llama variable local. Por tanto, esta variable tiene alcance local.
String withdraw (int amount){
String currency;
int transaction_fee = 2; // this is a local variable and it's scope begins from here till the right brace, }
}
Regla 3
Una variable declarada en el encabezado de una instrucción for también tiene alcance local.
for ( int y=11;y <20; y++){
// variable y has local scope
}
En este punto, es importante mencionar que obtendrá un error en tiempo de compilación si su método tiene dos variables locales con el mismo nombre.
Regla 4
El alcance de un método o el campo de una clase es todo el cuerpo de la clase. Esto permite que los métodos de instancia de una clase puedan utilizar los métodos o campos de la clase.
Mira el ejemplo de abajo. Es una implementación de código completamente funcional de las reglas anteriores. Puede compilarlo y ejecutarlo en su PC.
class Account {
int y = 2; // class field
static void withdraw(int amount){
String z;
for(int y=1; y<=3; y++){ // line 7
System.out.println("
Remember to hide your PIN.");}
}
public static void main(String args[]){
withdraw(50); }
}
Observe el campo de clase y el código en la línea 7. Si declara un parámetro o variable local usando un nombre similar al usado por uno de los campos de clase, la ejecución continuará normalmente y sin errores. Esto se conoce como sombreado.
En el ejemplo anterior, la variable y se declara dos veces y, sin embargo, el compilador no marca ningún error. El compilador primero "oculta" los campos de la clase hasta que se ejecuta el bloque.
A veces, es posible que deba acceder a un campo sombreado en el bloque. Esto se puede hacer de dos maneras:
a) Puede usar la palabra clave this si está tratando con una variable de instancia. Vea el ejemplo a continuación:
esto.x : x es una variable de instancia
b) Si la variable a la que está intentando acceder es una variable de clase estática , utilice la siguiente sintaxis para acceder a ella:
ClassName.x // x is a static variable
Alcance de la clase
Normalmente, cada objeto tiene sus propias variables de instancia. Hay escenarios en los que necesita la misma copia de la variable compartida con todas las instancias. En este caso, deberá hacerlos estáticos.
Los miembros de clase definidos con la palabra clave static tienen ámbito de clase. Por tanto, las variables estáticas tienen ámbito de clase. Se puede acceder a ellos mediante todos los métodos de la clase. Para acceder a las variables estáticas públicas de una clase, use:
ClassName.variable_name
Por otro lado, solo se puede acceder a las variables estáticas privadas de una clase mediante los métodos de la clase.
Obtenga clases y constructores en su ámbito
A veces, es posible que necesite una variable que, cuando se accede después de la inicialización, no se modifica. En caso de que tenga la necesidad de hacerlo, use la palabra clave final . Simplemente colóquelo antes de la variable que está declarando para poder usarlo.
final double PI = 3.14159;
Intentar modificar una variable declarada como final producirá un error en tiempo de compilación. También es importante que sepa que debe inicializar inmediatamente una variable final . No puede optar por inicializarlo más adelante.
En este punto, debería estar buscando aprender constructores y clases en Java.