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.
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:

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:

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
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:

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:

Por consola:
Area circulo de radio 10.3= 333.2915646193412
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:

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:

Por consola:
La raiz cuadrada de 100 es 10.0
La potencia de 2 elevado a 8 es 256.0