oracle certified professional java se 6 programmer 1

40
México Distrito Federal a 27 de Febrero de 2014 Autor: Pablo Galeana Bailey Email: [email protected] 1. Objetivo de Certificación 1.3 - Identificadores Desarrollar código que declare, inicialice y use tipos primitivos, enumerados y objetos como estáticos, instancias y variables locales. Además, usar identificadores legales para el nombre de las variables. Un identificador es el nombre que reciben las clases, los métodos y las variables. Los identificadores legales deben estar formados solo por caracteres UNICODE, números, '$' y '_'. Utilice las siguientes reglas para asignar los identificadores: Deben empezar con letra (mayúscula o minúscula), '$' o '_'. No pueden empezar por un número. Después del primer carácter, los identificadores pueden contener cualquier letra, número, '$' o '_'. No hay límite en el número de caracteres que un identificador puede tener. No pueden contener signos de puntuación. No podemos usar "palabras claves" como identificador. Los identificadores en Java son "case sensitive" (distingue entre mayúscula y minúscula). Ejemplos de identificadores legales:

Upload: pablo-galeana-bailey

Post on 05-Dec-2014

515 views

Category:

Education


1 download

DESCRIPTION

SCJP , Curso SCJP

TRANSCRIPT

Page 1: Oracle certified professional  java se 6 programmer 1

México Distrito Federal a 27 de Febrero de 2014Autor: Pablo Galeana BaileyEmail: [email protected]

1. Objetivo de Certificación 1.3 - IdentificadoresDesarrollar código que declare, inicialice y use tipos primitivos, enumerados y objetos comoestáticos, instancias y variables locales. Además, usar identificadores legales para el nombrede las variables.

Un identificador es el nombre que reciben las clases, los métodos y las variables. Losidentificadores legales deben estar formados solo por caracteres UNICODE, números, '$' y '_'.Utilice las siguientes reglas para asignar los identificadores:

Deben empezar con letra (mayúscula o minúscula), '$' o '_'.No pueden empezar porun número.

Después del primer carácter, los identificadores pueden contener cualquier letra,número, '$' o '_'.

No hay límite en el número de caracteres que un identificador puede tener. No pueden contener signos de puntuación. No podemos usar "palabras claves" como identificador. Los identificadores en Java son "case sensitive" (distingue entre mayúscula y

minúscula).

Ejemplos de identificadores legales:

Page 2: Oracle certified professional  java se 6 programmer 1

Ejemplos de identificadores ilegales:

Son identificadores válidos todos aquellos que cumplan estas normas, y además queno sean “palabras clave o reservadas” del propio lenguaje Java. Ejemplo de unprograma con identificadores válidos:

1.1. Convenciones del código JavaClases e interfaces: Las clases deben ser sustantivos. Su primer carácter debe sermayúscula el resto puede ser mayúsculas y minúsculas. Por ejemplo: MiClaseLas interfaces suelen ser adjetivos. Por ejemplo: Serializable, Runnable, ...

Page 3: Oracle certified professional  java se 6 programmer 1

Métodos: Los nombres de métodos normalmente son verbos. Se escribe el primer carácteren minúscula y el resto minúsculas y mayúsculas intercaladas. Por ejemplo: getNombre(),calcular().

Variables: Para las variables es igual que para los métodos. Se recomiendan nombres cortose identificativos.*Constantes: Son variables "static" y "final". Se deben escribir todo en mayúsculas con elcarácter '_' para separar las palabras.

2. Objetivo de Certificación 1.4 - JavaBeansDesarrollar código que declare métodos estáticos y no estáticos y usar nombres para losmétodos que se ajusten al estándar de nombres de JavaBeans. Desarrollar código quedeclare y use una lista de argumentos variable.

2.1. Estándares JavaBeansLa especificación de JavaBeans intenta ayudar a los desarrolladores Java a crearcomponentes Java que pueden ser usados por otros desarrolladores de Java.En primer lugar, JavaBeans son clases Java que tiene propiedades de instancias de variableprivate. Así la única manera de acceder a dichas propiedades desde fuera de la clase es através de métodos de la clase.Los métodos que cambian el valor de las propiedades son métodosetter y los métodos pararecuperar el valor de las propiedades son getters.

Las normas de la nomenclatura de JavaBean que debemos saber para el examen son: Si la propiedad no es un booleano, el prefijo del método getter debe ser get. Por ejemplo,

para la propiedad size seria getSize(). Si la propiedad es un booleano, el prefijo del método getteresget o is. Por ejemplo:

getSttoped() o isSttoped() ambos son validos. El prefijo del método setter debe ser set. Por ejemplo: setSize() es válido para la propiedad

size. Para completar el nombre de un método getter o setter, cambiamos el primer carácter de

la propiedad a mayúscula y le ponemos el prefijo get, set o is respectivamente. Los métodos setter no devuelven nada (void) y tienen un argumento que representa el tipo

de la propiedad. Deben ser declarados public Los métodos getter no reciben argumentos y devuelven un tipo de la propiedad. Deben ser

declarados public

En segundo lugar, la especificación JavaBeans soporta eventos, que permiten a componentesnotificar a otros que algo ha sucedido, para el examen es necesario saber que los métodosque se utilizan para añadir o eliminar oyentes de un evento debe seguir la norma dedenominación de JavaBean, que pasamos a describir ahora: Los nombres de los métodos Listener, usados para "registrar" a un oyente en un evento,

deben usar el prefijo add seguido del tipo del oyente. Por ejemplo: addActionListener() esun nombre valido.

Page 4: Oracle certified professional  java se 6 programmer 1

Los nombres de los métodos Listener, usados para "eliminar" a un oyente en un evento,deben usar el prefijo remove seguido del tipo del oyente. Por ejemplo: addActionListener()es un nombre valido.

El tipo del oyente que será añadido o eliminado debe ser pasado como argumento almétodo.

Ejemplos de métodos JavaBeans válidos:

Ejemplos de métodos JavaBeans inválidos:

3. Objetivo de Certificación 1.1 - Declarar clasesDesarrollar código que declare clases (incluyendo abstractas y todos los demás tipos declases), interfaces y enumerados, y hacer un uso apropiado de las sentencias "package" e"import".

Normas asociadas con la declaración de clases, y el uso de sentencias import y package en elcódigo fuente. Cada fichero código fuente debe tener una sola clase pública. Los comentarios pueden aparecer en cualquier línea de código. Si hay una clase pública en un fichero, el nombre del fichero debe coincidir con el nombre

de la clase pública. Si la clase pertenece a un paquete, la sentencia "package" debe estar en la primera línea

de código, antes de cualquier sentencia "import" que haya. Si hay sentencias "import", deben estar entre la sentencia "package" (si hay) y la

declaración de la clase. No hay manera de declarar múltiples clases en un fichero y que tengan diferentes

paquetes, o usen diferentes sentencias "import". Un fichero puede tener más de una clase no pública. Un fichero que no tenga clase pública puede tener cualquier nombre, no debe coincidir con

el nombre de ninguna de las clases que contiene.

Page 5: Oracle certified professional  java se 6 programmer 1

3.1. Declaraciones y modificadores de Clases

El siguiente código es la declaración de una clase:

Este código compila bien, pero se le pueden añadir modificadores antes de la declaración dela clase. Los modificadores se dividen en dos categorías: Modificadores de acceso (public, protected y private):

El control de acceso de Java es un poco difícil porque hay cuatro niveles de acceso pero solotres modificadores de acceso. El cuarto nivel de acceso (por defecto) es cuando no utilizamosninguno de los tres modificadores de acceso. En otras palabras, que toda clase, método yvariable declarada tiene un control de acceso, indiques el tipo explícitamente o no. Aunquetodos los controles de acceso funcionan para la mayoría de métodos y declaraciones devariables, una clase solo puede ser declarada como pública o por defecto.

Acceso a clasesPara que una clase A tenga acceso a otra clase B, la clase A debe hacer una de las trestareas: Crear una instancia de la clase B Extender de la clase B Acceso seguro a métodos y variables de la clase B, dependiendo del control de acceso de

estos métodos o variables.

Page 6: Oracle certified professional  java se 6 programmer 1

En efecto, el acceso se conoce como visibilidad. Si la clase A no puede ver a la clase B, elnivel de acceso a los métodos y variables dentro de la clase B no tiene importancia; la clase Ano tiene ninguna manera de acceder a estos métodos y variables.

Acceso por defectoUna clase con acceso por defecto no tiene modificador precediéndola en la declaración. Elnivel de acceso por defecto es a nivel de paquete, es decir una clase con acceso por defectosolo es vista por las clases de su mismo paquete. Por ejemplo si la clase A y la clase B estánen diferentes paquetes, y la clase A tiene un nivel de acceso por defecto, la clase B no tienepermitido crear una instancia de la clase A, o incluso declarar una variable o devolver un tipode clase A. De hecho, la clase B tiene que fingir que la clase A no existe, o el compilador sequejara.

Ejemplo:

Ahora mira este siguiente código:

La superclase Aula1 está en un paquete diferente de la subclase. La sentencia import delfichero Aula1_Prueba está intentando importar la clase Aula1. El fichero Aula1 compila bien,pero cuando intentamos compilar la clase Aula1_Prueba obtendremos algo parecido a:

Page 7: Oracle certified professional  java se 6 programmer 1

La clase Aula1_Prueba no puede compilar porque su superclase, Aula1, tiene acceso pordefecto y está en un paquete diferente. Como solución a este problema podemos hacer doscosas:

Poner las clases en el mismo paquete Poner la clase Aula1 como public.

Page 8: Oracle certified professional  java se 6 programmer 1

Guía para el Examen:En una pregunta con lógica compleja, nos debemos asegurar de mirar primero losmodificadores de acceso. De esta forma, si encontramos una violación de acceso (porejemplo una clase del paquete A que intenta acceder a una por defecto del paquete B), sabrásque el código no compilara, así que no pierdas el tiempo en la lógica y elige la opción "fallo decompilación" y vete a la siguiente pregunta.

Acceso público "public"Todas las clases del universo Java tienen acceso a una clase pública. No olvides, que si unaclase publica que estas intentando usar se encuentra en un diferente paquete en el cual seencuentra la clase que estamos escribiendo, deberemos importar la clase pública.

En el ejemplo anterior, es posible que no quiera guardar la subclase en el mismo paquete quela superclase. Para hacer que el código funcione, necesitamos añadir la palabra clave publicen la declaración de la superclase.

Este cambio hace visible a la clase para todas las clases en todos los paquetes. La clasepuede ser ahora instanciada desde cualquier otra clase, y cualquier clase puede extender deella, a menos que también está marcada con el modificador de no_acceso "final".

Modificadores de no-acceso (incluyendo strictfp, final y abstract)

Podemos cambiar la declaración de una clase usando las palabras clave "final", "abstract" o"strictfp". Estos modificadores son adicionales a cualquier control de acceso de la clase. Porejemplo: declarar una clase como public y final. Pero no siempre podemos mezclarmodificadores de no acceso. Por ejemplo podemos usar una combinación de final y strictfp,pero nunca marcar una clase como final y abstract.Para el examen, solo necesitamos saber que "strictfp" es una palabra clave y puede ser usadapara modificar una clase o un método, pero nunca una variable.Marcando una clase como "strictfp" significa que cualquier código de método de la clase seráconforme a las estándar de normas IEEE 754 para puntos flotantes.

Clases FinalCuando usamos la palabra clave "final" en la declaración de una clase, ninguna clase puedeextender de la clase final, y cualquier intento de hacerlo le dará un error de compilación.Solo se debe marcar una clase como final si necesitamos total garantía de que ninguno de losmétodos de la clase será sobrescrito.Muchas clases en las librerías Java son finales. Por ejemplo, la clase String no puede serextendida por ninguna otra clase. Imagine que no pudiésemos garantizar como trabaja unobjeto String

Vamos a modificar nuestro ejemplo Aula2 para marcar la clase como final:

Page 9: Oracle certified professional  java se 6 programmer 1

Ahora, si intentamos compilar la subclase Aula2_Prueba al extender de Aula2

Nosotros obtendremos algo parecido a lo siguiente:

En la práctica, casi nunca vamos a crear una clase final. Una clase final elimina un beneficioclave de la programación orientada a objetos (extensibilidad, que otras clases extiendan deotra). Por lo tanto, al menos que necesitemos mucha seguridad, asume que algún día otroprogramador necesitara extender de tu clase.

Page 10: Oracle certified professional  java se 6 programmer 1

Clases AbstractasUna clase abstracta es una clase de la que no se puede crear objetos. La utilidad de estasclases estriba en que otras clases hereden de ésta, por lo que con ello conseguiremosreutilizar código. Para declarar una clase como abstracta utilizamos la palabra clave abstract.Algunas de las características de una clase abstracta son las siguientes:1. Los métodos para los que no aporte una implementación serán declarados a su vez

abstractos.2. Si una clase tiene un método abstract es obligatorio que la clase sea abstract.3. Todas las subclases que hereden de una clase abstracta tendrán que redefinir los

métodos abstractos dándoles una implementación.4. En el caso de que no implementen alguno de esos métodos la clase hija también será

abstracta y tendrá que declararse como tal (tanto la clase como los métodos que siguensiendo abstractos).

5. Un método abstract no pude ser static, ya que no podría ser redefinido por las subclases.

Una clase abstracta nunca será instanciada. Su único objetivo es ser extendida (que otraclase extienda de ella). (NOTA, sin embargo, tú puedes compilar y ejecutar una claseabstracta, siempre y cuando tú no intentes instanciarla).Por ejemplo, imagina que tienes una clase Car que tiene métodos comunes con todos losvehículos. Pero tú no quieres que nadie cree un objeto abstracto Car genérico. Lo quenecesitas es instanciar tipos de coche como BMWBoxster y Subaruoutback.Eche un vistazo a la siguiente clase abstracta:

Este código compilara bien.Al instanciar un Car en otro código, el compilador nos dará un error de compilación similar alsiguiente:

NOTA: Los métodos marcados abstractos acaban en ";" y no en llaves "{}".

Page 11: Oracle certified professional  java se 6 programmer 1

Recordar que siempre que haya un método abstracto en una clase, esa clase debe sermarcada como abstracta.Pero, sin embargo, podemos poner métodos no abstractos enuna clase abstracta. Por ejemplo: tu necesitarías tener métodos con implementaciones queno deberían cambiar de un tipo de Car a otro, tales como "getColor()" o "setPrice". Por ponermétodos abstractos en una clase abstracta, las subclases de la clase abstracta heredanmétodos implementados. La buena noticia es que las subclases heredan funcionalidad, ynecesitan implementar solo los métodos que definen el comportamiento específico de lasubclase.Codificando con tipos de clases abstractas permite obtener ventajas de polimorfismo y dar unmayor grado de flexibilidad y extensibilidad no podemos marcar una clase como abstractay final. Porque tienen significados opuestos, una clase abstracta debe ser extendida por otrasclases mientras que una final no tendrá clases que extiendan de ella. Si vemos unacombinación de estos modificadores, usados para la declaración de un método o clase, elcódigo no compilara.

Ejemplo:

Page 12: Oracle certified professional  java se 6 programmer 1

4. Objetivo de Certificación 1.2 - Declarar InterfacesDesarrollar código que declare una interfaz. Desarrollar código que implemente o extienda deuna o más interfaces. Desarrollar código que declare una clase abstracta. Desarrollar códigoque extienda de una clase abstracta.

4.1. Declaración de una interfazCuando creas una interfaz, estas definiendo un contrato de lo que la clase podrá hacer, sindecir nada sobre como lo hará.Las interfaces pueden ser implementadas por cualquier clase, desde cualquier árbol deherencia. Esto te permite tomar clases diferentes y darles una característica común. Porejemplo, la clase Balón y la clase Neumático tienen Rebotar como comportamiento, peroBalón y Neumático no comparten ninguna relación de herencia (Balón extiende de Juguete yNeumático de java.lang.Object). Pero haciendo que ambas clases implementen la interfazRebotable (del verbo Rebotar), estaremos diciendo que ambos pueden ser tratados como,"Cosas que pueden reRebotar", que en el lenguaje Java significa "Cosas que pueden invocarlos métodos reRebotar() y setReRebotarFactor()".

Una interfaz define métodos abstractos que toman la siguiente forma: abstractvoidbounce();

Una clase abstracta puede definir tanto métodos abstractos como no abstractos, unainterfaz solo puede tener métodos abstractos. Las siguientes normas son estrictas:

Todos los métodos de una interfaz son implícitamente públicos y abstractos. Todas las variables definidas en una interfaz deben ser públicas, estáticas y finales, en

otras palabras, las interfaces solo pueden declarar constantes, no instancias de variables. Los métodos de una interfaz no deben ser estáticos. Debido a que los métodos de una interfaz sin abstractos, no pueden ser marcados como

final, strictfp o nativo Una interfaz puede extender de una o más interfaces. Una interfaz no puede extender de cualquier cosa excepto de una interfaz. Una interfaz no puede implementar otra interfaz o clase. Una interfaz debe ser declarada con la palabra clave "interface". Los tipos de interfaz pueden ser usados polimórficamente .

Page 13: Oracle certified professional  java se 6 programmer 1

A continuación mostraremos una declaración legal de una interfaz:

Las interfaces son implícitamente abstractas, se considera redundante márcala comoabstracta. Solo debemos saber que las dos siguientes declaraciones son legales:

El modificador "public" es requerido si deseas que la interfaz sea pública y no tenga un nivelde acceso por defecto.A continuación mostramos como se declaran los métodos de una interfaz.

Marcar los métodos con los modificadores public y abstract es redundante, ya que todos losmétodos de una interfaz son implícitamente public y abstract. Veremos a continuación como elcódigo siguiente es equivalente al anterior:

Los siguientes cinco métodos declarados con una combinación de modificadores public,abstract o no modificadores son legales e idénticos.

Las siguientes declaraciones de métodos de una interfaz no pueden compilar:

Page 14: Oracle certified professional  java se 6 programmer 1

4.2. Declarando constantes de interfazTienes permitido poner constantes en una interfaz. Al hacerlo, garantizas que ninguna claseque implemente la interfaz tendrá acceso a la constante.Colocando las constantes de forma correcta en una interfaz, cualquier clase que implementela interfaz tendrá acceso directo a las constantes, como si la clase la heredara,recordar una regla clave para las constantes de interfaz siempre debe ser "publicstaticfinal".

NOTA:Puesto que las constantes de interfaz son definidas en una interfaz, no tienenque ser declaradas como public, static *o* final. Siempre son public, static *y* final.Cualquier variable definida en una interfaz implicitamente es una constante. Encontrar elproblema con el siguiente código (asume que están en ficheros separados):

Una vez que el valor haya sido asignado, el valor nunca puede ser modificado. Laasignación de la constante sucede en la propia interfaz (donde es declarada), así la clase queimplementa la interfaz puede acceder a ella y usarla, pero como solo lectura. La asignaciónBAR = 27 no compilara.

5. Declarar miembros de una claseUna clase puede usar dos de los cuatro niveles de control de acceso (por defecto y public), losmiembros pueden usar los cuatro:

public protected private default

La protección por defecto es cuando tú no indicas en la declaración del método ningún tipo demodificador de acceso. El control de acceso por defecto y protected tienen casi el mismocomportamiento, excepto una diferencia que comentaremos mas tarde.Es crucial entender los dos diferentes tipos de acceso:

Page 15: Oracle certified professional  java se 6 programmer 1

El primer tipo de acceso es cuando un método de una clase intenta acceder al método o ala variables de otra clase, usando el operador punto (.) para invocar una método orecuperar una variable. Por ejemplo:

El segundo tipo de acceso es cuando una clase hereda los miembros de otra clase. Paraeste caso debemos recordar, que si una clase hereda un miembro, la subclase tiene dichomiembro. Por ejemplo:

Muchos de los acceso de control se centran en mirar si las dos clases involucradas están enel mismo o en o diferente paquete. No olvidar, sin embargo, que si la clase A en si no puedeser accedida por la clase B, entonces no hay miembros de la clase A que puedan seraccedidos por la clase B.

Page 16: Oracle certified professional  java se 6 programmer 1

5.1. Miembros PublicCuando un miembro es declarado public significa que todas las clases, independientementedel paquete al que pertenezca, pueden acceder al miembro (asumiendo que la clase esvisible). Ejemplo:

Ahora mira las siguientes líneas:

Como podemos ver, Goo y Sludge se encuentran en diferentes paquetes. Sin embargo, Goopuede invocar al método testIt() en Sludge sin problemas debido a que la clase Sludge y elmétodo testIt() son públicos.

Desde una subclase, si un miembro de la superclase es declarado público, la subclase heredaesos miembros independientemente de si están o no en el mismo paquete las clases.

La clase Roo declara el miembro doRooThings() como público. Así que si nosotros creamosuna subclase de Roo, cualquier código de la subclase pueda llamar a su propio métododoRooThings() heredado.

Page 17: Oracle certified professional  java se 6 programmer 1

El código anterior como el método doRooThings() es invocado sin necesidad de tener unareferencia. Si existeun método invocado (o una variable accedida) sin el operador punto (.),sabrás que el método o la variable pertenecen a la clase dóndeestás viendo el código.También sabrás que el método o la variable están siendo implícitamente accedidos usando lareferencia this. Así que en el código anterior, la llamada a doRooThings() en la clase Cloopodría haberse escrito también como this.doRooThings(). La referencia this siempre se refiereal actual objeto en ejecución, en otras palabras, el código donde tú ves la referencia this.

Además de ser capaz de invocar al método doRooThings() por si misma, el código de algunaotra clase puede llamar a doRooThings() con una instancia de Cloo, como en el siguiente:

5.2. Miembros privadosLos miembros marcados como "private" no pueden ser accedidos por código desde cualquierclase distinta de la clase en la que el miembro es declarado. Vamos a hacer un pequeñocambio a la clase Roo de un ejemplo anterior:El método doRooThings() es ahora privado, asi que ninguna otra clase puede usarlo. Sinosotros intentamos invocar al método desde cualquier otra clase, tendremos problemas alejecutar:

Page 18: Oracle certified professional  java se 6 programmer 1

Intentar compilar UseARoo, genera un error de compilación:cannotfind symbolsymbol:methoddoRooThings()

Es como si el método no existiera. Un miembro privado es invisible a cualquier código fuerade los propios miembros de la clase.Cuando un miembro es declarado privado, una subclase no puede heredarlo.Para el examen, necesitamos reconocer que una subclase no puede ver o usar elmiembro privado de la superclase. Podemos sin embargo, declarar un método similar en lasubclase. Pero independientemente de cómo se vea, no es un método sobrescrito. Essimplemente un método que resulta tener el mismo nombre que un método privado de lasuperclase. Las reglas de sobrescritura no se aplican, así que puedes hacer con el método loque quieras.

El método doRooThings()está ahora fuera de límites para todas las subclase, incluso los queestán en el mismo paquete como la superclase:

Al compilar la subclase Cloo, el compilador mostrara algo parecido a lo siguiente:%javac Cloo.javaCloo.java:4: Undefinedmethod: doRooThings()System.out.println(doRooThings());1 error

Page 19: Oracle certified professional  java se 6 programmer 1

NOTA: Aunque tengamos permitido marcar instancias de variables como públicas, en lapráctica es mejor marcarlas como private o protected. Si las variables necesitan sercambiadas, o leídas, los programadores deberían usar métodos de acceso públicos paraacceder a ellas. Así que el código en cualquier otra clase tiene que llamar al get o set de lavariable, en lugar de acceder a ella directamente. Los métodos de acceso toman la forma get(para booleanos is) y set, y proporcionan un lugar donde verificar y validar antes de devolver omodificar el valor.

Un método privado no puede ser sobrescrito por una subclase. Desde la subclase, comohemos visto, no podemos heredar un método privado, por lo tanto no puede sobrescribir almétodo.

5.3. Miembros protected o defaultLos niveles de control de acceso protected y por defecto son casi idénticos, pero con unadiferencia. Un miembro con control de acceso por defecto debe ser accedido solo si la claseque esta accediendo esta dentro del mismo paquete, sin embargo un miembro protectedpuede ser accedido por una subclase aunque estén en diferentes paquetes.Mira las siguientes dos clases en diferentes ficheros:

El compilador devolverá algo parecido a:No methodmatchingtestIt() found in classcertification.OtherClass. o.testIt();

El comportamiento del control de acceso por defecto y el protected difiere solo cuandohablamos de subclases. Si la palabra protected es usada para definir un miembro, cualquiersubclase de la clase declarando el miembro puede acceder a él a través de la herencia. Nonos tenemos que fijar si las clases están en diferentes paquetes, el miembro protected de lasuperclase es visible a la subclase Hay una diferencia con el comportamiento que tendría si lodeclarásemos como por defecto, ya que no permite a una subclase acceder al miembro de

Page 20: Oracle certified professional  java se 6 programmer 1

una superclase a menos que la subclase este en el mismo paquete que la superclase.

NOTA: El acceso por defecto, es la restricción de paquetes y el tipo de acceso protected,piensa en las restricciones de paquetes e hijos.

Una clase con un miembro protected tiene marcado que el miembro tiene acceso a nivel depaquete para todas las clases del paquete, pero con una excepción para las subclases fueradel paquete que heredaría el método. Para una subclase un método protected significara lomismo que si fuese por defecto (o incluso private), cuando la subclase use una referencia a lasuperclase. La subclase puede ver al miembro protected solo a través de la herencia.

Detalles de protetedAnalizar la variable protected de una superclase.

El código anterior declara la variable x como protected. Esto hace a la variable accesible paratodas las otras clases dentro del mismo paquete, y también heredable para cualquier subclasefuera del paquete. Ahora vamos a crear una subclase en un paquete diferente intentaremosusar la variable x (que la subclase heredará):

El código compila bien. Vemos como la clase hijo esta accediendo a la variable protected através de la herencia. Recordar, que cuando hablamos de que una subclase tiene acceso almiembro de una superclase, nos referimos a que la subclase hereda el miembro, pero noaccediendo al miembro a través de una referencia mediante una instancia de la superclase. Acontinuación, mostraremos que sucedería en el caso de acceder a una variable protectedusando una referencia a la clase Parent:

Page 21: Oracle certified professional  java se 6 programmer 1

El compilador mostraria lo siguiente:%javac -d .other/Child.javaother/Child.java:9: x has protectedaccess in certification.ParentSystem.out.println("X in parentis " + p.x);^1 error

Detalles del acceso por defectoEl comportamiento del acceso por defecto de un miembro en una superclase. Nosotrosmodificaremos el miembro x de Parent para hacerlo por defecto.

Ahora intentaremos acceder al miembro con acceso por defecto desde la clase Child deantes:Al compilar obtenemos un error similar a este:Child.java:4: Undefined variable: xSystem.out.println("Variable x is " + x);1 error

El compilador da el mismo error que cuando el miembro es declarado private. La subclaseChild (en un paquete diferente del de la suoerclaseParent) no puede ver o usar el miembrocon acceso por defecto x de la superclase. ¿Que pasaría ahora si estuviesen en el mismopaquete?

Y en la segunda clase tú tienes lo siguiente:

Page 22: Oracle certified professional  java se 6 programmer 1

El código anterior compila bien, y la clase Child ejecutara y mostrara el valor de x. Recordarque un miembro con acceso por defecto es visible por una subclase solo si esta en el mismopaquete que la superclase.

5.5. Variables locales y Modificadores de accesoHay una variable local no se le puede aplicar modificadores de acceso, como por ejemplo seve en el siguiente código:

Una variable local declarada con un modificador de acceso no compilara. De hecho,solo el modificador final puede ser aplicado a una variable local. Tabla de combinaciones deacceso y visibilidad:Visibilidad Public Protected Default PrivateDesde la misma clase si si si siDesde cualquier clase en el mismo paquete si si si noDesde una subclase en el mismo paquete si si si no

Desde una clase fuera del paquete si si, a través deherencia no no

Desde cualquier clase no subclase fuera delpaquete si no no no

Page 23: Oracle certified professional  java se 6 programmer 1

5.6. Métodos finales

La palabra clave final previene a un método de ser sobrescrito en una subclase, y se hace amenudo para cumplir la funcionalidad del método. Por ejemplo, la clase Thread tiene unmétodo llamado isAlive() que comprueba si un hilo esta activo. Si tú extiendes la clase Thread,no hay forma de que tú puedas implementar ese método. Debemos tener cuidado a la hora deutilizarlo, ya que previenes que una subclase sobrescriba un método y con esto quitamosmuchos beneficios de la Orientación a Objetos como la extensibilidad. La declaración de unmétodo final típica es parecida a la siguiente:

Es legal extender extender a Superclass, ya que la clase no esta marca como final, pero nopodremos sobrescribir el método final showsample(), como el siguiente código intenta hacer.

Al compilar el código anterior, el compiladornosdaráalgoparecido a esto:%javac FinalTest.javaFinalTest.java:5: The method void showsample() declared in classSubclass cannot override the final method of the same signaturedeclared in class SuperClass.Final methods cannot be overridden.public void showSample() { }1 error

Argumentos finalLos argumentos de un método son las declaraciones de variables que aparecen entre losparéntesis en la declaración del método. Una declaración típica de método con múltiplesargumentos es parecido a lo siguiente:public Record getRecord(intfileNumber, intrecordNumber){}

Los argumentos de un método son esencialmente lo mismo que variables locales. En elejemplo anterior, ambas variables fileNumber y recordNumber siguen las reglas aplicadas alas variables locales. Esto significa que pueden también tener el modificador final:public Record getRecord(intfileNumber, finalintrecNumber) {}

En este ejemplo, la variable recordNumbre es declarada final, que significa que no podremos

Page 24: Oracle certified professional  java se 6 programmer 1

modificarla dentro del método. En este caso, "modificado" significa reasignarle un nuevo valora la variable. En otras palabras, un argumento final debe mantener el mismo valor que tuvocuando fue pasado al método.

5.7. Métodos abstractUn método abstracto es un método que está declarado pero no implementado. En otraspalabras, el método no contiene ningún código que realice alguna funcionalidad, ladeclaración de un método abstracto no lleva llaves ({}) donde va la implementación del códigosi no que termina con punto y coma (;). En otras palabras el método no tiene cuerpo.Túmarcas un método abstracto cuando quieres forzar a las subclases a que lo implementen.Por ejemplo, si tu escribes una clase abstracta Car con un método abstracto goUpHill(), debesquerer forzar a cada subtipo de Car a definir el comportamiento propio de goUpHill():publicabstractvoidshowSample();Fíjate como el método abstracto termina con punto y coma (;) y no con llaves ({}). Es ilegalincluso tener un solo método abstracto en una clase que no está declarada explícitamentecomo abstract. Mira la siguiente clase que es ilegal:

La clase anterior producirá el siguiente error si intentas compilarla:IllegalClass.java:1: classIllegalClassmust be declaredabstract.Itdoesnot define voiddoIt() fromclassIllegalClass.publicclassIllegalClass{1 error

Tu puedes, sin embargo, tener una clase abstracta sin ningún método abstracto. El siguienteejemplo compilaría bien:

En el ejemplo anterior, goodMethod() no es abstracto. A continuación veremos tres formasdiferentes de ver que un método no es abstracto:

El método no está marcado como abstract. La declaración del método incluye llaves, en vez de terminar con punto y coma (;). En

otras palabras, el método tiene cuerpo. El método tiene código.

Cualquier clase que extienda de una clase abstracta debe implementar todos los métodos

Page 25: Oracle certified professional  java se 6 programmer 1

abstractos de la superclase, a menos que la subclase sea también abstracta. La regla es lasiguiente:La primera subclase que no sea abstracta de una clase que si es abstracta debe implementartodos los métodos abstractos de la superclase.

El siguiente código nos muestra un árbol de herencia con dos clases abstractas y una que nolo es.

Como podemos ver la clase Mini tendrá tres métodos, los métodos heredados getType() ydoCarThings(), puesto que son públicos y no abstractos. Pero ya que goUpHill() es abstractoen la superclase Vehicle, y nunca es implementado en la clase Car, significa que la clase Mini(primera clas no abstracta despues de Vehicle) debe implementar el método goUpHill(). Enotras palabras, la clase Mini no puede pasar la implementación del método abstracto a lapróxima clase del árbol de herencia por debajo, pero la clase Car si puede porque esabstracta.

Las clases no abstractas que no proporciones implementación a los métodos abstractos de lasuperclase no compilarán como podemos ver en el siguiente código:

Page 26: Oracle certified professional  java se 6 programmer 1

La clase B no compilara porque no implementa el método abstracto heredado foo(). Aunque elmétodo foo(int I) en la clase aparenta ser una implementación del método abstracto de lasuperclase, es simplemente un método sobrecargado (un método usando el mismoidentificador, pero con diferentes argumentos), así que no cumple los requerimientos deimplementación del método abstracto de la superclase.Un método nunca puede, con los modificadores abstract y final, o abstract y prívate.

Los modificadores abstract y final son virtualmente opuestos y modificador abstractnunca puede ser combinado con el modificado static.Recordar que lo siguiente es illegal:abstractstaticvoiddoStuff();

El error que nos saldría sería algo parecido a lo siguiente:

5.9. MétodossyncronizedLa palabra clave syncronized indica que un método puede ser accedido por solo un hilo a lavez, el modificador syncronized puede ser aplicado solo en métodos y no en variables niclase. Una declaración típica de syncronized es la siguiente:

El modificador syncronized puede ser encontrado con los cuatro niveles de control de acceso(significa que puede ser emparejado con cualquiera de los tres modificadores de acceso).

5.10. Métodos NativeEl modificador native indica que un método esta implementado en otro lenguaje, el máscomún en C. No necesitas saber cómo usar métodos nativos para el examen, lo que debessaber es que es un modificador (por tanto palabra clave) y que native puede ser solo aplicadoen métodos no en clase ni variables. Otra cosa que deberíamos saber es que el cuerpo de losmétodos native debe ser un punto y coma (;) (Como los abstract), indicando que laimplementación sea omitida.

Page 27: Oracle certified professional  java se 6 programmer 1

5.11. Métodos con lista de argumentos variable (var-args)Java permite crear métodos que puedan tomar un número variable de argumentos. Nosotrosusaremos el término "var-args".A continuación usar los términos argumento y parámetro en el resto de la documentación: Argumentos Lo que declaramos entre los paréntesis cuando invocamos a un método:

Parámetros Lo que debe recibir el método cuando es invocado.

Nosotros trataremos los métodos que usan un número variable de argumentos, por ahoravamos a revisar las reglas de declaración de var-args: Tipo de var-arg Cuando declaramos un parámetro var-arg, debemos especificar el tipo de

argumento/s que podemos recibir (puede ser un tipo primitivo o un objeto). Sintaxis básica Al declarar un método usando un parámetro var-arg, continuaremos el tipo

con una elipsis (...), un espacio y entonces el nombre del array recibirá el parámetrorecibido.

Otros parámetros Es legal tener otros parámetros en un método que usa var-arg. Límites de var-args Debe ser el ultimo parámetro en la declaración del método, y puedes

tener un solo var_arg en el método.

Acontinuación alguna declaraciones legales e ilegales:Legales:

Ilegales:

5.13. Declaración de constructoresTodas las clases tienen un constructor, si tu no creas uno explícitamente, el compiladorconstruirá uno para ti. Reglas básicas de declaración. Ejemplo:

Lo primero que vemos es que los constructores son como métodos. Una diferencia clave esque un constructor nunca tiene un tipo return. Las declaraciones de constructores pueden

Page 28: Oracle certified professional  java se 6 programmer 1

tener todos los modificadores de acceso normal y pueden tomar argumentos (incluyendo var-args), como los métodos.La otra REGLA es que los constructores es que deben ser llamados como la clase en la queson declarados. Los constructores no pueden ser marcados como static (están asociados coninstanciaciones de objeto), nunca pueden ser marcados final o abstract (porque no pueden sersobrescritos). A continuación veremos declaraciones de constructores legales e ilegales:

Constructores legales

Constructores ilegales

5.13. Declaraciones de VariableHay dos tipos de variable en Java: Primitivas Un primitivo puede ser uno de los ocho tipos: char, boolean, byte, short, int,

long, double o float. Una vez el primitivo haya sido declarado, ese tipo primitivo nuncacambia, aunque en su mayoría de los casos cambia de valor.

Variables de referencia Una variable de referencia es usado para referirse (o acceder) a unobjeto. Una referencia está declarada para ser de un tipo especifico y nunca puedecambiar. Una referencia puede ser usada para referirse a cualquier tipo especifico, o de unsubtipo del tipo declarado (un tipo compatible).

5.14. Declarando primitivos y Rangos de primitivosLas variables primitivas pueden ser declaradas como variables de clase (estáticas), instanciasde variables, parámetros de métodos o variables locales. Puedes declarar uno o más

Page 29: Oracle certified professional  java se 6 programmer 1

primitivos, del mismo tipo de primitivo, en una sola línea. Ejemplo de declaraciones devariables:

Es importante entender que para los tipos entero la secuencia de menor a mayor es: byte,short, int, long y que doubles son mayor que floatsTambién necesitaras saber que los tipos de número son todos con signo y que les afecta susrangos.Todos los seis tipos en Java están hechos de un número de 8-bit bytes y son signo, significaque pueden ser negativos y positivos. El bit más significativo (bit más a la izquierda) es usadopara representar el signo, donde un 1 significa negativo y 0 positivo. El resto de los bitsrepresenta el valor, usando notación complemento a 2.

Tabla de los tipos primitivos con sus tamaños y rangos.Tipo Bits Bytes Minimo Maximobyte 8 1 -27 27-1short 16 2 -215 215-1int 32 4 -231 231-1long 64 8 -263 263-1float 32 4 n/a n/adouble 64 8 n/a n/a

Para los tipos booleanos no hay un rango, un booleano solo puede ser true o false.

El tipo char (un carácter) contiene un único carácter, 16bits Unicode. Los caracteres Unicodeson actualmente representados por enteros sin signo de 16 bits, que significa 216 valoresposibles, rango desde 0 a 65535 (216)-1. Pueden ser asignados a cualquier número losuficientemente largo hasta llegar a tener 65535. Aunque el char y el short son tipos de 16bits, recordar que un short usa 1 bit para representar al signo, así que pocos númerospositivos son aceptables en un short.

5.15. Declaración de Variables de ReferenciaLas variables de referencia pueden ser declaradas como variables estáticas, instancias devariables, parámetros de método o variables locales. Puedes declarar una o más referencias,del mismo tipo, en una sola línea.

Page 30: Oracle certified professional  java se 6 programmer 1

5.16. Variables de instanciaLas variables de instancia están definidas en la clase, pero fuera de cualquier método, y soninicializadas solo cuando la clase es instanciada. Las variables de instancia son los camposque pertenecen a cada objeto único. Por ejemplo, el siguiente código define campos(variables de instancia) para el nombre, título y manager de los objetos empleados:

La clase Empleado puede decir que cada instancia de empleado sabrá su propio nombre,título y manager. En otras palabras, cada instancia puede tener sus propios valores únicos delos tres campos. Para el examen, necesitamos saber que las variables de instancia:

Pueden usar cualquiera de los cuatro niveles de acceso (que significa que pueden sermarcados con cualquiera de los tres modificadores de acceso).

Pueden ser marcados con final. Pueden ser marcados con transient. No pueden ser marcados abstract. No pueden ser marcados syncronized. No pueden ser marcados strictfp. No pueden ser marcados native. No pueden ser marcados static, porque si no serian variables de clase.

Tenemos que abarcar los efectos de aplicación de controles de acceso a variables deinstancia (trabajan de la misma forma que para los métodos). La siguiente tabla compara lamanera en que los modificadores pueden ser aplicados a métodos vs variables.Variableslocales Variables no locales Métodos

final final public protected privatestatic transient volatile

final public protected private static abstractsynchronized strictfp native

5.17. Variables locales (Automática/Pila/Método)Las variables locales están declaradas dentro de un método. Esto significa que la variable noestá inicializada dentro del método. Ya que la variable local empieza su vida dentro delmétodo, es también destruida cuando el método sea completado. Las variables locales estánsiempre en la pila, no en la heap. Aunque el valor de la variable debe ser pasado a otrométodo entonces almacenara el valor en una variable de instancia, la variable por si sola vivesolo dentro del ámbito del método.No olvidar que la variable está en la pila, si la variable es un objeto referencia, el objeto aún

Page 31: Oracle certified professional  java se 6 programmer 1

será creado en la heap. Una variable local antes de poder ser usada, debe ser inicializada conun valor.

Normalmente inicializaremos una variable local en la misma línea en que la declaras, aunquepuede que aún sea necesario reinicializarla más tarde en el método. La clave es que unavariable local debe ser in inicializada antes de intentar usarla.El compilador rechazaracualquier código que intente usar una variable local que no tenga asignado un valor, porque adiferencia de las variables de instancia, las variables locales no obtienen valores por defecto.En el anterior código de ejemplo, sería imposible referenciar a la variable count desdecualquier otro lugar de la clase excepto dentro del ámbito del método logIn(). Como veremosen el siguiente código ilegal:

Es posible declarar una variable local con el mismo nombre que una variable deinstancia. Conocida como shadowing, como lo demuestra el siguiente código:

Page 32: Oracle certified professional  java se 6 programmer 1

El anterior código produce la siguiente salida:local variable countis 10instance variable countis 9

El siguiente código (incorrecto) está intentando cambiar el valor de la variable de instanciausando un parámetro:

Para resolver esto tenemos la palabra clave this. Con this siempre, siempre nos vamos areferir al objeto actualmente en ejecución. El siguiente código muestra this es acción:

5.18. Declaración de ArrayEn Java, los arrays son objetos que almacenan múltiples variables del mismo tipo, o variablesque son subclases del mismo tipo. Los Arrays pueden tener tanto primitivos como referenciasa objetos, pero el propio array siempre es un objeto en la heap, incluso si el array esdeclarado para tener elementos primitivos. En otras palabras,Para el examen tenemos tres cosas que sabernos: Como crear un array como variable de referencia (declarar). Como crear un objeto array (constructor). Como rellenar el array con elementos (inicializar).

Los arrays son declarados indicando el tipo de elementos que el arraycontendrá (objeto oprimitivo), seguido de corchetes a cada lado del identificador.

Declarando un array de primitivos

Page 33: Oracle certified professional  java se 6 programmer 1

El primer ejemplo es un array tridimensional y el segundo es bidimensional. Fíjate como en elsegundo ejemplo nosotros tenemos unos corchetes antes del nombre de la variable y otrosdespués. Esto es perfectamente legal para el compilador, demostrando una vez más que porque sea legal no significa que sea correcto.

Guía para el Examen:Es ilegal incluir el tamaño del array en su declaración. Si, nosotros sabemos que puedehacerse en otros lenguajes, que es la razón por la que puede ver una o dos preguntas queincluya código similar al siguiente:int[5] scores;

El código anterior no compilara. Recordar, la JVM no asigna el espacio hasta que se instanciaal objeto array. Que es cuando realmente importa su tamaño.

5.19. Variables FinalesDeclarando una variable con la palabra final haces que sea imposible reinicializar la variablesuna vez haya sido inicializada con un valor explicito (por defecto). Para los primitivos, estosignifica que una vez que la variable tiene asignado el valor, el valor no puede ser alterado.Por ejemplo, si tú asignas 10 a la variable de tipo entero, entonces la x va a permanecer a 10,siempre.

5.20. Variables TransientMarcar una instancia de variable como transient, tu le estás diciendo a la JVM que ignore esavariable cuando trate de serializar al objeto que lo contiene. La socialización es una de lascaracterísticasmás buenas de Java; permite guardar el valor de su variable instanciada en untipo especial de flujo de I/O. Con la socialización tu puedes guardar un objeto a un fichero .

5.21. Variables VolatilePara el examen, todo lo que necesitas saber sobre volatile es que, como con transient, puedeser solo aplicado a variables de instancia.

5.22. Variables y Métodos estáticosEl modificador static es usado para crear variables y métodos que existiránindependientemente de cualquier instancia creada por la clase. En otras palabras, los

Page 34: Oracle certified professional  java se 6 programmer 1

miembros static existen antes incluso de crear una nueva instancia de la clase y habrá solouna copia del miembro estático independientemente del número de instancias de la clase. Enotras palabras, todas las instancias de una clase tienen el mismo valor para una variableestática.Cosas que podemos marcar como static:

Métodos. Variables. Una clase anidada dentro de otra clase, pero no dentro de un Bloques de inicialización

Cosas que no podemos marcarlas static: Constructores (hacerlo no tiene sentido, un constructor es usado solo para crear

instancias). Clases (a menos que estén anidadas) Interfaces Métodos locales dentro de clases Métodos dentro de clases y variables de instancia. Variables locales.

5.23. Declarando enumerados (enum)A partir de Java 5.0, permite restringir a una variable a tener solo uno pocos valorespredefinidos, en otras palabras, un valor de una lista enumerada.Es común que ciertos dominios que se nos presentan a la hora de modelar tengan elementosdistinguidos. Imaginemos una baraja de cartas. Los naipes en cuatro clases: corazón, trébol,pica y diamante, y además numerados del dos al nueve, seguido de las figuras J (sota), Q(reina), K (rey) y A (as). Aquí tenemos dos ejemplos de enumeraciones, los cuatro palos y lasdiez cartas. El palo trébol es un elemento distinguido del conjunto de palos, del mismo modoque el número cinco, lo es del conjunto de la numeración de las cartas. Las enumeracionespermiten entonces definir un conjunto de elementos distinguidos. En las versiones anterioresde Java, este tipo de enumeraciones se definían utilizando constantes de tipo numérico o detipo String.

Page 35: Oracle certified professional  java se 6 programmer 1

La imagen nos muestra el diagrama que corresponde a una enumeración con el estilo anteriora las enumeraciones.El problema de este tipo de enumeraciones es que PICA no es de tipoPalo y por lo tanto en todos lados donde queramos usar un palo aparecerá el tipo String.Imaginen un método que está esperando un tipo Palo y se encarga de recibir la cadenadenominada “hola mundo!”, seguramente se encargaría de romper el programa.Es este sentido, sabemos que una solución para estos casos era utilizar realmente el tipoPalo y proceder a hacer que cada palo sea una instancia. Para asegurarse de que no secrean más palos que los determinados, se marca como privado el constructor.

Diagrama de una enumeración utilizando objetos que modelan correctamente elconcepto.Este tipo de construcciones representan una gran mejora frente a las otrasenumeraciones, yaque tenemos un tipo determinado para representar a los palos e instanciasde ese tipo. Lasenumeraciones modernas en Java son un artefacto sintáctico que produce elmismo resultado que la construcción anterior pero sin escribir tanto.El lenguaje ahora tiene el concepto de enumeración, no es algo que solamente esté en lamente del programador,para definir una enumeración en Java se consigue mediante el uso dela palabra clave enum en lugar de class.Luego en el cuerpo de la enumeración se definen loselementos distinguidos.Usando enumerados podemos ayudar a reducir los bugs en el código.Ejemplo:

La única manera de obtener un CoffeeSizeserá con una sentencia como la siguiente:

Page 36: Oracle certified professional  java se 6 programmer 1

No es necesario que las constantes enumeradas estén todas en mayúsculas, pero tomandoprestada las convenciones de código de Sun que las constantes van en mayúsculas, es unabuena idea.Los componentes básicos de un enumerado son constantes, aunque dentro depoco veras que puede haber muchas más cosas en un enumerado. Los enumerados puedenser declarados como una clase propia separada, o como una clase miembro, sin embargo nodeben ser declaradas dentro de un método.

Declarando un enumerado fuera de una clase

El código anterior puede ser partido en un solo fichero. (Recordar, el fichero debe ser llamadoCoffeeTest1.java ya que este es el nombre de la clase publica en el fichero. El punto clave arecordar es que los enumerados pueden ser declarados solo con los modificadores public odefault, al igual que una clase no interna. Aquí el ejemplo de un enumerado declarado dentrode una clase.

Los puntos claves a tomar de estos ejemplos son que los enumerados pueden ser declaradoscomo una clase propia o encerrados en otra clase, y que la sintaxis para acceder al miembrode un enumerado depende de donde el enumerado fue declarado.Lo siguiente no es legal:

Page 37: Oracle certified professional  java se 6 programmer 1

Para hacerlo todo más confuso, los diseñadores del lenguaje Java han puesto opcional ponerun punto y coma (;) al final de la declaración de un enumerado.

Lo más importante que debemos recordar es que los enumerados no son String ni ints. Cadatipo de los enumerados CoffeeSize son actualmente instancias de CoffeeSize. Enotraspalabras, BIG es de tipoCoffeeSize,//conceptual example of how you can think about enums

Cada uno de los valores de los enumerados son instancias del tipo CoffeeSize. Ellos estánrepresentados como static y final, que en el mundo Java, es como si fuera una constante.Fíjate también como cada valor del enumerado sabe su índice o posición, en otras palabras,el orden en el que los enumerados son declarados. Tu puedes pensar de los enumerados deCoffeeSize como si existieran en un array de tipo CoffeeSize.

Declarando constructores, métodos y variables en un EnumeradoUn enumerado realmente es un tipo especial de clase, puedes hacer algo más que la lista devalores constantes enumerados. Puedes añadir constructores, variables de instancia,

Page 38: Oracle certified professional  java se 6 programmer 1

métodos y algo realmente extraño como una constante especifica del cuerpo de la clase. Paraentender porque tú necesitas más en tu enumerado, imagínate este escenario: quieres saberel actual tamaño, en onzas, de cada una de las tres constantes CoffeeSize. Por ejemplo, tuquieres saber que BIG tiene 8 onzas, HUGE 10 onzas y OVERWHELMING 16 onzas.Podrías hacer algún tipo de tabla, usando alguna otra estructura de datos pero sería un maldiseño y duro mantenimiento. La forma más simple es tratar a los valores de los enumeradoscomo objetos que pueden tener cada uno sus propias variables de instancia. Entonces tupuedesasignar esos valores a la vez que inicializas los enumerados, pasándole un valor alconstructor del enumerado. Vamos a ver el siguiente código:

Los puntos claves a recordar sobre los constructores de enumerados son: Nunca puedes invocar directamente el constructor de un enumerado. El constructor de

un enumerado es invocado automáticamente, con los argumentos tu defines el valor dela constante.Por ejemplo BIG(8) invoca al constructor de CoffeeSize que toma un valorint, pasándole el valor 8.

Page 39: Oracle certified professional  java se 6 programmer 1

Puedes definir más de un argumento para el constructor y sobrecargar losconstructores de enumerados, al igual que puedes sobrecargar un constructor de unaclase normal.

Y finalmente, puedes definir algo realmente extraño en un enumerado que se ve comouna clase interna. Se conoce como una constante especifica del cuerpo de una clase yse usa cuando necesitas una constante particular para anular un método definido en elenumerado.

Parece extraño pero necesitas entender las reglas básicas de declaración:

1. Declaraciones y control de acceso

Guía para el Examén1.1Debemos tener claro la diferencia que existe entre lo que son identificadores legales y lasconvenciones de nombres "namingconventions". Es decir, usted debe ser capaz de reconocerun identificador que es legal aunque no se ajuste a las normas de nomenclatura. Si el examenpregunta sobre convenciones de nombres se mencionará explícitamente.

Guía para el Examén1.2Mira las siguientes declaraciones de una interfaz que definen todas unas constantes, pero sinnecesidad de usar explícitamente los modificadores requeridos:publicint x = 1;// Looks non-static and non-final, but isn't!int x = 1;// Looks default, non-final, non-static, but isn't!staticint x = 1;// Doesn't show final or publicfinalint x = 1;// Doesn't show static or publicpublicstaticint x = 1;// Doesn't show finalpublicfinalint x = 1;// Doesn't show static

Page 40: Oracle certified professional  java se 6 programmer 1

staticfinalint x = 1// Doesn't show publicpublicstaticfinalint x = 1;// what you get implicitly

Cualquier combinación de los modificadores requeridos (aún implícitos) es legal. En elexamen puedes encontrarte preguntas que tu no sepas contestar correctamente a menos quetu sepas, por ejemplo, que una variable en una interfaz es final y nunca puede tomar un valorasignado por la clase que implementa la interfaz ( o cualquier otra).

Lo siguiente es entrar a la consola y empezar a compilar nuestras clases java.

COMPILARPara compilar entramos a la consola y nos situamos dentro del directorio de nuestro proyectoy ocupamos el comando javac para compilar de la siguiente forma Ej:javac archivo1.java

Si el archivo se encuentra dentro de algún paquete escribimos algo como esto Ej:javac paquete\archivo.java

Si lo que necesitamos es compilar varias clases dentro de un proyecto escribimos algoparecido a esto Ej:javac fuente1.java paquete\fuente2.java paquete\subpaquete\fuente3.java

Lo que nos generara un los archivos .class

EJECUTAR UN ARCHIVO .classDe nuevo situados en la dirección del proyecto no en un subdirectorio y escribimos algo comoesto (nótese que se está separando el paquete del archivo por "." no por "\" y no se añade laextensión .class)Ej: java paquete.archivo1

CREACION DE UN ARCHIVO jarPara crear un archivo jar debemos de ejecutar el comando "jar" situados otra vez en eldirectorio del proyecto: jar cf proyecto.jar archivo1.class paqueteEsto mete dentro de proyecto.jar a archivo1.class y el directorio paquete completo con todo sucontenido (otros paquetes y clases);

Para ejecutar el archivo jar usamos el comando java apuntando a la clase que tenga la clasemain Ej: java -cp proyecto.jar archivo1

Ahora para ejecutar una clase o jar que depende de otras librerías lo que se debe de hacer esusar la opción -cp del comando java agregando las rutas de las librerías necesarias separadaspor ";"java -cp"%ClassPath%;C:\Folder1\Subfolder1\libreria1.jar;C:\Folder1\Subfolder2\libreria2.jar;."mx.com.paquete.clase1Espero poder seguir escribiendo algo de manera cotidiana aunque sean cosas elementalescomo esta, se agradecerán todos los comentarios.