Alcance de variables

El alcance de una variable indica la parte del programa donde puede utilizarse. En base al alcance, las variables se clasifican en:

Cada una de las variables anteriores puede ser estática o no. Durante el desarrollo del tema se irán viendo las características que definen a los diversos tipo de variables. Todos los códigos en c:\cursojava\tema2 o en jcreator_home\MyProjects\tema2 si se emplea JCreator.

Variables locales

Se declaran dentro de métodos o de instrucciones asociadas a bucles for, estructuras condicionales, etc. Su alcance se restringe al código del método o de la instrucción. No admiten modificadores de acceso salvo "final" y deben estar inicializadas antes de ser empleadas.

Ejemplo:

Código fuente

Variables de instancia

Se declaran después de la clase y fuera de cualquier método. Los valores que asumen para cada objeto constituyen el estado o conjunto de atributos del objeto.

Su alcance es global, es decir, las pueden utilizar directamente todos lo métodos no estáticos de la clase.

Para acceder desde el método main o desde cualquier otro método estático a una variable de instancia es necesario crear un objeto de la clase.

Al hecho de crear un objeto de una clase se le conoce también como instanciar la clase. Si no se inicializan explícitamente, asumen el valor nulo por defecto, una vez  instanciada la clase.

Ejemplo:

Código fuente

Variables de instancia

Por consola:

Jesus tiene 28 años

Sus ojos son azules

Jesus es mayor de edad

Tiene 28 años

---------------------

Rebeca tiene 27 años

Sus ojos son verdes

Rebeca es mayor de edad

Tiene 27 años

---------------------

FIN DEL PROGRAMA

NOTA: si las variables de instancia no se inicializan explícitamente bien mediante un objeto de la clase bien en la misma línea donde se declaran, qué ocurrirá?

Se mostrará el elemento nulo asociado a los valores iniciales de los diversos tipos de variables. Así, en las variables primitivas enteras (byte, short, int y long) dicho elemento nulo es 0, en las reales (float y double) es 0.0, en las booleanas es false y en las referenciadas (asociadas a objetos de clases) es null.

En este caso se tendría:

null tiene 0 años

Sus ojos son null

null es menor de edad

Tiene 0 años

---------------------

null tiene 0 años

Sus ojos son null

null es menor de edad

Tiene 0 años

---------------------

FIN DEL PROGRAMA

Variables estáticas o de clase

Son propias únicamente de la clase y no de los objetos que pueden crearse de la misma, por lo tanto, sus valores son compartidos por todos los objetos de la clase. Van precedidas del modificador static.

Para invocar a una variable estática no se necesita crear un objeto de la clase en la que se define:

Suelen emplearse para definir constantes comunes a todos los objetos de la clase.

Ejemplo 1:

Código fuente

Por consola:

Jesus tiene 28 años

Sus ojos son azules

Su planeta es la Tierra

Jesus es mayor de edad

Tiene 28 años

---------------------

Rebeca tiene 27 años

Sus ojos son verdes

Su planeta es la Tierra

Rebeca es mayor de edad

Tiene 27 años

---------------------

FIN DEL PROGRAMA

Ejemplo 2:

Código fuente

Por consola:

Area circulo de radio 10.3= 333.2915646193412

Métodos estáticos o de clase

Se cargan en memoria en tiempo de compilación y no a medida que se ejecutan las líneas de código del programa. Van precedidos del modificador static. Para invocar a un método estático no se necesita crear un objeto de la clase en la que se define:

Suelen emplearse para realizar operaciones comunes a todos los objetos de la clase. No afectan a los estados de los mismos (a los valores de sus variables de instancia). Por ejemplo, si se necesita un método para contabilizar el número de objetos creados de una clase, tiene sentido que sea estático ya que su función (aumentar el valor de una variable entera) se realizaría independientemente del objeto empleado para invocarle.

No conviene usar muchos métodos estáticos, pues si bien se aumenta la rapidez de ejecución, se pierde flexibilidad, no se hace un uso efectivo de la memoria y no se trabaja según los principios de la Programación Orientada a Objetos.

Ejemplo:

Código fuente

Por consola:

Ahorros=2500.0

Ahorros=4500.0

Numero de huchas=2

NOTA: muchas clases de la API disponen de métodos estáticos. Por ejemplo, la clase Math del paquete java.lang cuenta con multitud de ellos. Estos métodos se emplean para realizar operaciones matemáticas. La clase Thread, del mismo paquete, cuenta con varios: uno que se emplea para retardar la ejecución de código es “void sleep(long retardo)”. Consultar la API. Lo importante de estos métodos es que para su utilización no es necesario instanciar un objeto de las clases en las que se encuentran ya que son estáticos.

Ejemplo 2:

Código fuente

Por consola:

La raiz cuadrada de 100 es 10.0

La potencia de 2 elevado a 8 es 256.0