Al diseñar sus primeros programas en Java, pudo notar que todo gira alrededor de instancias de Objetos que son manipuladas a través de referencias:
Lampara candil = new Lampara(); candil.prender(); |
Al utilizar referencias en Java estas pueden ser inicializadas sin que pertenezcan a ninguna instancia de Objeto:
String let; |
La declaración anterior genera una referencia, sin embargo, esta no es asociada con ninguna instancia de Objeto, para llevar acabo este proceso es necesario utilizar el vocablo new
.
String let = new String("Algo sencillo") |
La declaración anterior no solo genera una instancia nueva de la Clase String
, sino le asigna un valor inicial ("Algo sencillo"
) el cual es asignado a la referencia let
; este mecanismo de agregar valores al generar una instancia es llevada acabo a través de métodos denominados constructores los cuales serán descritos posteriormente.
El hecho de generar instancias de objetos es un proceso involucrado ( hablando en términos computacionales mas no en sintaxis ) , es por esto que Java ofrece un mecanismo simplístico para definir estructuras de datos como alternativa a utilizar Clases/Objetos, dichas estructuras son conocidas como primitivos.
Aunque estrictamente hablando un primitivo no es una clase a través de un primitivo se facilita el uso de valores comúnmente utilizados en lenguajes de programación, donde el generar una instancia de Clase resultaría en un proceso tardado y mecánico. En la siguiente tabla se describen los diversos primitivos disponibles en el lenguaje Java:
Tipo de Primitivo |
Tamaño |
Valor Mínimo |
Valor Máximo |
Valor Default |
"Wrapper" |
---|---|---|---|---|---|
boolean |
- |
- |
- |
false |
Boolean |
char |
16-bit |
Unicode 0 |
Unicode 216- 1 |
`\u0000' (null) |
Character |
byte |
8-bit |
-128 |
+127 |
(byte) 0 |
Byte |
short |
16-bit |
-215 |
+215-1 |
(short) 0 |
Short |
int |
32-bit |
-231 |
+231-1 |
0 |
Integer |
long |
64-bit |
-263 |
+263-1 |
0L |
Long |
float |
32-bit |
IEEE754 |
IEEE754 |
0.0f |
Float |
double |
64-bit |
IEEE754 |
IEEE754 |
0.0d |
Double |
void |
- |
- |
- |
- |
Void |
Nótese que estos primitivos inician con letra minúscula, en la tabla anterior se describen los rangos de dichos primitivos así como sus respectivos "Wrappers"
; estos "Wrappers"
son Clases utilizadas como contra parte de primitivos:
char c = 'x'; Character C = new Character(c); |
La primer linea genera un primitivo el cual es asignado a la variable c
, posteriormente se genera una instancia de la Clase Character
(Nótese el uso del vocablo new
); el uso de "Wrappers" (Objetos) para primitivos es empleado bajo ciertas circunstancias, sin embargo, vale mencionar que existen diversos mecanismos para convertir de Clases tipo Objeto ("Wrappers") a primitivos y viceversa, a continuación se describen los mecanismos para realizar este tipo de conversiones :
El uso práctico para emplear "Wrappers" y/o primitivos será explorado en una futura sección de este curso.
Cuando se define una Clase esta puede contener dos tipos de elementos: Campos ("Fields") o Métodos, los métodos ya fueron descritos en los ejemplos anteriores, sin embargo , un campo es un objeto o primitivo utilizado para guardar datos en cada instancia de un objeto :
En Java existen ciertos campos que son definidos como final, y aunque dicho calificativo puede ser empleado en métodos y Clases su uso más común es en campos, su significado puede ser descrito con las siguientes palabras: "No puede cambiar"; las razones por las que es utilizado final pueden ser: Eficiencia o Diseño.
Al utilizarse final en variables (primitivos) estas toman un valor constante al llevarse acabo la compilación, lo anterior permite mayor eficiencia al momento de ejecutarse un programa ("Run-Time"), ahora bien, cuando es utilizado final en referencias de Objetos se restringe que dicha referencia sea utilizada para apuntar hacia otro Objeto, esto permite realizar un diseño que prohibe a la referencia ser re-asignada, el uso del vocablo final será explorado en otra sección de este curso.
En ciertos métodos es utilizado el vocablo return
que permite indicar el valor de retorno para un método:
Un Constructor es un método especial en Java empleado para inicializar valores en Instancias de Objetos, a través de este tipo de métodos es posible generar diversos tipos de instancias para la Clase en cuestión; la principal característica de este tipo de métodos es que llevan el mismo nombre de la clase, a continuación se describen varios ejemplos utilizando constructores:
Cuando son utilizados Constructores puede surgir la necesidad de inicializar algún campo perteneciente a la Clase, esto trae consigo otro detalle en lo que concierne la asignación de valores dentro de un método, la razón se debe a que dentro de un método puede surgir el requerimiento de accesar campos definidos en la Clase, observe:
public Class Cableado { int longitud; String tipo; public Cableado(String tipo, int longitud) { this.tipo = tipo this.longitud = longitud; } .... .... } |
En el caso anterior, dentro del constructor se desea asignar valores a los campos de una Clase, sin embargo, dentro del constructor son utilizados como parámetros de entrada los mismos valores, para tener acceso a los campos de la Clase se utiliza el vocablo: this, al emplear esta sintaxis se esta haciendo alusión a los campos de la Clase.
Aunque sería posible emplear distintos nombres para los valores de entrada, evitando el uso del vocablo this
, la sintaxis con el vocablo this
es ampliamente utilizada en el caso de Constructores mencionado anteriormente, así como Java Beans, un concepto utilizado en Java para ambientes Web (JSP's/Servlets).
En muchos lenguajes el mantener documentación acerca de las Clases/Métodos escritos es una tarea que requiere un esfuerzo adicional, ya que por una parte debe mantenerse el código funcional mientras se debe generar documentación acerca de la funciones; en muchas ocasiones esta documentación ni existe, en Java la generación de Documentación es llevada en conjunción del código a través de comentarios.
A través de comentarios colocados en cada Clase/Método es posible generar documentación de una manera inmediata y concisa en formato de documentos HTML / XHTML , a continuación se describe un ejemplo :