oracle certified professional java se 6 programmer 4

14

Click here to load reader

Upload: pablo-galeana-bailey

Post on 13-Jun-2015

206 views

Category:

Education


2 download

DESCRIPTION

Oracle certified professional java se 6 programmer 4

TRANSCRIPT

Page 1: Oracle certified professional  java se 6 programmer 4

México Distrito Federal a 08 de Marzo de 2014

Autor: Pablo Galeana Bailey

Cualquier duda y/o comentario quedo a sus órdenes para alguna asesoría orecomendación para mejorar el presente material.

Email: [email protected]

Capítulo 4 - Operadores

1. Objetivo de Certificación 7.6 - Operadores JavaEscribir código que aplique correctamente los operadores incluyendo los deasignación (limitados a: =, += y -=), aritméticos (limitados a: +, -, *, /, %, ++ y --),relacionales (limitados a: <, <=, >, >=, == y !=), el operador instanceof, operadoreslógicos (limitados a: &, |, ^, !, && y ||) y el operador condicional (? :) para producirel resultado deseado. Escribe código que determina la igualdad de dos objetos odos tipos primitivos.

Los operadores Java producen nuevos valores a partir de uno o más operandos.El resultado suele ser un booleano o un valor numérico. Existen unos cuantosoperadores que viene sobrecargados:

Page 2: Oracle certified professional  java se 6 programmer 4

El operador + puede usarse para sumar dos números primitivos o para realizaruna concatenación si los operandos son String.

Los operadores &, | y ^ pueden usarse de dos formas, aunque para el examen,las capacidades de manejo de bits no se probarán.

Los Operadores suele ser la sección del examen donde los candidatosobtienen sus peores resultados. Además, los operadores y las asignacionesson parte de muchas preguntas en otros temas.

1.1. Operadores de AsignaciónPara resumir: Cuando asignamos un valor a un primitivo, el tamaño es importante. Debemos

asegurarnos de cuando ocurre un carting implícito, cuando es necesario unoexplícito y cuando podría ocurrir un truncamiento.

Recuerda que una variable de referencia no es un objeto sino una forma deobtener un objeto.

Cuando asignamos el valor a una variable de referencia, el tipo es importante.Recuerda las reglas para los supertipos, subtipos y arrays.

Operadores de Asignación CompuestosExisten 11 o más operadores de asignación compuestos, pero sólo los cuatro másusados (+=, -=, *=, and /=) los veremos en el examen.Ejemplos:

Las dos últimas asignaciones dan el mismo resultado que las primeras.

1.2. Operadores RelacionalesEl examen cubre seis operaciones relacionales (<, <= , >, >=, == , and !=). Estosoperadores siempre dan como resultado un valor booleano. Este valor sueleusarse en una sentencia 'if', tal y como se muestra a continuación:

Page 3: Oracle certified professional  java se 6 programmer 4

Pero el valor resultante puede asignarse directamente a un tipo primitivo booleano:

Algunas comparaciones legales:

En el código anterior, estamos usando una comparación entre caracteres. Estambién legal comparar un carácter con cualquier número (aunque no sea unabuena práctica). Si ejecutamos el código anterior obtendremos la siguiente salida:The animal is a gray elephant

Operadores de "Igualdad"Java también tiene dos operaciones relacionales que comparan dos "cosas"similares y devuelven un booleano que dice si dos cosas son iguales. Losoperadores son:== Igual a!= Distinto de

Cada comparación individual puede involucrar dos números (incluyendo 'char'),dos valores booleanos o dos referencias a objetos. No podemos comparar tiposincompatibles. Existen cuatro tipos diferentes de cosas que podemos probar:

Números Caracteres Booleanos Variables de Referencia a Objetos

Page 4: Oracle certified professional  java se 6 programmer 4

Igualdad para PrimitivosEl siguiente código muestra algunos tests de igualdad sobre variables deprimitivos:

El programa produce la siguiente salida:character 'a' == 'a'? truecharacter 'a' == 'b'? false5 != 6? true5.0 == 5L? truetrue == false? false

Normalmente si se compara un número punto flotante con un entero y los valoresson iguales, el operador == devuelve true.

Igualdad para Variables de ReferenciaDos variables de referencia pueden apuntar al mismo objeto, como muestra elsiguiente código:

Después de ejecutar este código, la variable 'a' y la variable 'b' apuntarán al mismoobjeto. Podemos comprobar si dos variables apuntan al mismo objeto mediante eloperador ==. Sin embargo, este operador comprueba los bits en la variable, por loque si ambas variables son iguales, es que apuntan al mismo objeto. Veamos elsiguiente código:

Page 5: Oracle certified professional  java se 6 programmer 4

El código crea tres variables de referencia. Las dos primeras, 'a' y 'b', son objetosJButton con la misma etiqueta. El tercero, 'c', se ha inicializado con el mismoobjeto al que apunta 'a'. Cuando se ejecuta el programa produce la siguientesalida:Is reference a == b? falseIs reference a == c? true

Esto nos muestra que 'a' y 'c' apuntan a la misma instancia y que el operador ==no comprueban si dos objetos son "equivalentes.

Igualdad para EnumeradosUna vez que hemos declarado un 'enum', no es ampliable. En tiempo de ejecuciónno hay forma de crear constantes enum adicionales. Por supuesto podemos tenertodas las variables que queramos para referirnos a una constante 'enum', por loque es importante tener la posibilidad de comparar dos variables de referencia deenum para ver si son iguales. Podemos usar tanto el operador == como el métodoequals() para determinar si dos variables están apuntando a la misma constanteenum:

El código anterior produce la siguiente salida:== dot equals

1.3. Comparación instanceofEl operador instanceof se usa sólo para variables de referencia a objetos ypodemos usarlo para comprobar si un objeto es de un tipo particular. Por tipo, nosreferimos a clase o interfaz -en otras palabras, si el objeto referenciado a laizquierda del operador para la prueba IS-A para la clase o interfaz situada en ellado derecho.Ejemplo :

Imprime: "s is a string"

Aun cuando el objeto que estamos comprobando no es una instanciación actual

Page 6: Oracle certified professional  java se 6 programmer 4

del tipo de clase en el lado derecho del operador, instanceof seguirá devolviendo'true' si el objeto que está siendo comparado es compatible con el tipo de laderecha.El siguiente ejemplo demuestra un uso común para instanceof: probar un objetopara ver si es una instancia de alguno de los subtipos antes de intentar undowncast:

El código anterior compila y produce la siguiente salida:'a' refers to a B

En ejemplos como este, el uso del operador instanceof protege el programa deintentos ilegales de downcast.Podemos probar una referencia de objeto contra su propio tipo de clase ocualquiera de sus superclases. Esto significa que cualquier referencia a objetoevaluará a true si usamos el operador instanceof con el tipo Object, tal y como semuestra a continuación:

Que imprime: "b is definitely an Object"Además, es legal probar si la referencia 'null' es una instancia de una clase. Estosiempre devuelve 'false', por supuesto. Por ejemplo:

Imprime: false falseError de Compilación de instanceof

Page 7: Oracle certified professional  java se 6 programmer 4

No podemos usar el operador instanceof para probar dos jerarquías de clasesdiferentes. Por ejemplo, el siguiente códifo NO compilará:

La compilación falla, no hay forma de que 'd' podría hacer referencia a Cat o unsubtipo de Cat.Dado lo siguiente:

La siguiente tabla resume el uso del operador instanceofPrimer Operando(la referenciaque se está evaluando)

Segundo Operando (tipo con elque estamos comparando) Resultado

null Any class or interface type falseFoo instance Foo, Bar, Face, Object trueBar instance Bar, Face, Object trueBar instance Foo falseFoo[] Foo, Bar, Face falseFoo[] Object trueFoo[1] Foo, Bar, Face, Object true

1.4. Operadores AritméticosEstos operadores pueden usarse de forma estándar:

Operador Resto (%)El operador resto divide el operando izquierdo entre el derecho y coge el resto.Veamos un código de ejemplo:

Page 8: Oracle certified professional  java se 6 programmer 4

Si ejecutamos la clase MathTest el resultado es el siguiente:The result of 15 % 4 is the remainder of 15 divided by 4. The remainder is 3

Importante: Las expresiones son evaluadas de izquierda a derecha por defecto.Podemos cambiar esta secuencia o precedencia añadiendo paréntesis. Tambiénhay que destacar que los operadores *, / y % tienen más prioridad que + y -.

Operador de Concatenación de StringEl signo más (+) también puede usarse para concatenar dos cadenas, tal y comose muestra a continuación:

La concatenación de String toma interés cuando combinamos números concadenas:

Los valores enteros son tratados como caracteres y unidos a la derecha de lacadena dando el segundo resultado: "String37".

El código anterior podría leerse: "Empieza con una cadena a y le añadimos elcaracter 3 (el valor de b) para producir String3, lueego añade el caracter 7 (valorde c) para producir String37." Podemos cambiar este comportamiento medianteparéntesis:

Y obtendremos: "Stringl0". Al usar paréntesis haremos que se evalúe primero (b +c) y el operador + actuará como operador de asignación puesto que ambosoperandos son valores enteros. El punto clave es que el operando de la izquierdadel operador no es una cadena (String). Si lo fuera, el operador + actuaría comoconcatenación de String. La regla a recordar es:"Si algunos de los operandos es un String, el operador + se convierte en unoperador de concatenación de cadenas. Si ambos operandos son números,

Page 9: Oracle certified professional  java se 6 programmer 4

el operador actúa como operador suma."

En el examen no será siempre tan obvio. Veamos el siguiente código:

No podemos saber cómo se utilizará el operador + hasta que sepamos quédevuelve el método foo(). Si devuelve un String, entonces concatenará 7 a lacadena devuelta. Pero si devuelve un número, entonces el operador se usará parasumar 7 al número devuelto. Por último, necesitamos saber que es legal mezclarel operador de adición compuesto (+=) y los Strings, como se muestra acontinuación:

Puesto que las dos veces que se ha usado el operador += el operando de laizquierda era un String, ambas operaciones fueron concatenaciones, resultandoen: 1234567

Operadores de Incremento y DecrementoEl operador se coloca antes (prefijo) o después (sufijo) de una variable paracambiar su valor. Si el operador se coloca antes o después del operando, puedecambiar el resultado de una expresión. Veamos lo siguiente:

La ejecución de este programa genera la siguiente salida:%java MathTestplayers online: 0The value of players is 1The value of players is now 2

Observa que cuando la variable es impresa, el primer valor es 0. Esto es porquehemos usado el post-incremento, que sólo ocurre hasta que la variable se usa enla sentencia 'print'. La línea 5 no incrementa la variable, simplemente imprime elvalor que hemos incrementado antes. La línea 6 aplica el pre-incremento, lo queindica que el incremento se realice antes de que se use la variable, por lo que lasalida es 2.

Page 10: Oracle certified professional  java se 6 programmer 4

En el examen veremos preguntas mezclando los operadores de incremento ydecremento con otros operadores como en el siguiente ejemplo:

El código anterior imprime: x = 3 y = 4

Podemos leer la sentencia 'if' como: "Si 3 es igual a 2 o 3 < 4".Como pasaba con la concatenación de Strings, los operadores de incremento ydecremento se usan a lo largo de todo el examen, aún cuando las preguntas novan de ese tema.

1.5. Operador CondicionalEl operador condicional es un operador ternario (de tres operandos) y se usa paraevaluar expresiones booleanas de forma parecida a la sentencia 'if', pero en lugarde ejecutar un bloque de código si la expresión devuelve true, el operadorcondicional asignará un valor a una variable. En otras palabras, el propósito deeste operador es decidir cuál de los dos valores asignar a una variable. Eloperador se construye mediante un signo de interrogación (?) y dos puntos (:). Losparéntesis son opcionales.

La estructura es: x = (expresión booleana) ? valor a asignar si es true : valor a asignar si es falseVeamos un ejemplo de un operador condicional:

Podemos leer el código anterior como:"Pon numofPets a 3. Luego vamos a asignar una cadena a la variable 'status'. SinumofPets es menor que 4 asigna 'Pet limit not exceeded', en cualquier otro casoasigna 'too many pets'."

Podemos anidar operaciones condicionales en una sentencia:

Page 11: Oracle certified professional  java se 6 programmer 4

1.6. Operadores LógicosLos objetivos del examen especifican seis operadores lógicos (&, |, ^, !, && y ||).Alguna documentación de Sun usa otra terminología para dichos operadores, peropara nuestros propósitos del examen los llamaremos así.

Operadores Lógicos de Evaluación PerezosaTenemos cinco operadores lógicos en el examen que se usarán para evaluarsentencias que contienen más de una expresión booleana. Los más usados de loscinco son los dos operadores lógicos de evaluación perezosa. Estos son:

&& Evaluación Perezona de AND|| Evaluación Perezona de OR

Se usan para enlazar expresiones booleanas para formar grandes expresionesbooleanas. Estos operadores sólo evalúan valores booleanas. Para que AND (&&)resulte true, ambos operandos deben ser true. Por ejemplo:

El código anterior evalúa a true puesto que ambos operandos evalúan a true.La evaluación perezosa del operador && hace que primero se evalúe el ladoizquierdo (primer operando) y se devuelve false, no se evalúa el segundooperando puesto que ya se sabe que la expresión no puede ser true.

Cuando ejecutamos el código anterior obtenemos:%java Logicalboolean b = false

Page 12: Oracle certified professional  java se 6 programmer 4

El operador || es similar al operador &&, excepto que se evalúa a true si ALGUNOde los operandos es true. En este comando, la evaluación perezosa hace que si elprimer operando es true, la expresión devuelva true sin evaluar el segundooperando. Sin embargo, si el primer operando devuelve false, se debe evaluar elsegundo. Pon atención en el siguiente ejemplo, veremos varias preguntasparecidas en el examen:

El resultado es:% java TestORi < 5Result is truei >= 5i >= 5

Veamos que pasó cuando se ejecutó el método main():1. Línea 3: El primer operando se evalúa2. Se invoca el método isItSmall(3), imprime "i < 5" y devuelve true.3. Puesto que el primer operando en la línea 3 es true, el operador || no evlaúa elsegundo operando. Nunca veremos "i >= 5".4. Línea 6: Se evalúa el primer operando.5. Se llama al métdo isItSmall(6), imprimiendo "i >= 5" y devolviendo false.6. Como el primer operando es false, se evlaúa el segundo operando.7. Se invoca al método isItSmall(9), imprimiendo "i >= 5".8. El método isItSmall(9) devuelve false, por lo que la expresión de la línea 6 esfalse y nunca se ejecuta la lína 7.

Page 13: Oracle certified professional  java se 6 programmer 4

Operadores Lógicos (Sin Evaluación Perezosa)Tenemos dos operadores lógicos sin evaluación perezosa:& No Evaluación Perezona de AND| No Evaluación Perezona de OR

Estos operadores se usan en expresiones lógicas como && y ||, pero siempreevalúan los dos lados de la expresión. Son ineficientes.Encontraremos muchas preguntas en el examen que utilizan los operadoreslógicos de evaluación perezosa y sin evaluación perezosa. Tenemos quesaber perfectamente cuando se evalúan los operandos y cuando no, puesto que elresultado puede variar en función de si se evalúa el segundo operando. Porejemplo:

Operadores Lógicos ^y !Los dos últimos operadores lógicos son:^ Exclusive Or (XOR)! Negación

El operador ^ evalúa sólo valores booleanos. Este operador está relacionado conlos operadores sin evaluación perezosa en el sentido de que siempre evalúaambos operandos en una expresión. Para que este operador devuelva true,EXACTAMENTE un operando debe ser true. Por ejemplo:

Produce la salida: "xor false".

La expresión anterior se evalúa a false porque AMBOS operandos se evalúan atrue.El operador negación (!) devuelve el opuesto del valor actual de un boolean:

Puede ser leído como "si no es true la expresión 7 == 5".La sentencia produce la siguiente salida: "not equal".Veamos otro ejemplo que usa booleanos:

Page 14: Oracle certified professional  java se 6 programmer 4

Produce la salida: "! true false".En el ejemplo anterior, observa que la condición & pasa (imprime true) y que elvalor de la variable no cambia, por lo que imprime false.