Sie sind auf Seite 1von 13

Disclaimer & Acknowledgments

>!Even though Ezequiel Aranda is a full-time employee of Sun


Microsystems, the contents here are created as his own
SCJP 6 personal endeavor and thus does not reflect any official
stance of Sun Microsystems.
Clase 0 – Presentación
>!Sun Microsystems is not responsible for any inaccuracies in
the contents.
>!Acknowledgments – The slides of this presentation are made
from “SCJP Unit 1” by Warit Wanwithu and Thanisa
Kruawaisayawan and SCJP Workshop by P. Srikanth.
>!This slides are Licensed under a Creative Commons
Attribution – Noncommercial – Share Alike 3.0
Ezequiel Aranda >!http://creativecommons.org/licenses/by-nc-sa/3.0/
Sun Microsystems Campus
Ambassador
Certificarse, ¿Para qué? Certificarse, ¿Para qué? (II)
>!Los títulos universitarios no prueban nuestras capacidades en >!Los puestos de trabajo en IT están entre los 10 más difíciles
tecnologías utilizadas en aplicaciones del mundo real. de llenar, de acuerdo a una encuesta de Manpower de abril
de 2008.
>!Los cursos de institutos brindan certificaciones a todos, por lo
que no pueden ser utilizados para medir nuestros >!Cerca del 25% de los empleadores tienen problemas para
conocimientos. contratar personal debido a falta de capacidad.
>!La industria necesita una forma de conocer nuestros >!Múltiples estudios sugieren que habrá una amplia brecha
conocimientos en las tecnologías que utilizan para construir entre la demanda de puestos de IT y la oferta de trabajadores
sus aplicaciones. con las habilidades necesarias en los próximos 5 a 10 años.
>!Para probar nuestras credenciales en el mercado global.
Valor de una certificación SCJP
>! El verdadero valor yace en la capacidad de verificar que una persona
posee las habilidades que son importantes para el empleador.
>! Las compañías de software consiguen más contratos o cobran mayores
Esta certificación de base está dirigida a
tarifas cuando sus empleados son certificados. programadores interesados en
>! Prueban efectivamente que una persona con un titulo universitario posee demostrar su competencia en los
adicionalmente conocimientos sobre tecnologías del mundo real.
fundamentos del lenguaje de
>! Los empleadores buscan candidatos con este tipo de conocimientos, ¿que programación Java.
mejor para conseguir un primer trabajo que obtener una credencial
reconocida por la industria?
>! Ayuda a obtener conocimientos profundos sobre una tecnología.
Certification Path SCJP
>!Tipo de examen: Multiple choice y drag and
drop
>!Número de preguntas: 72
>!Condición de Aprobación: 65%(47 de 72
preguntas)
>!Tiempo: 210 minutos
>!Prerrequisito: Ninguno
>!Valor: US$ 40
Declaraciones, inicializaciones y Control de Flujo
ámbitos
>!Clases (incluyendo abstractas y todas las >!Switch.
formas de clases anidadas), interfaces, y >!Loops e iteradores.
enums. >!Assertions.
>!JavaBeans, estándares de nomenclatura. >!Exceptions y cláusulas para su manejo (try,
>!Lista de argumentos de longitud variable. catch, finally).
>!Valores de retorno legales, incluyendo >!Entender cuales son arrojadas por la máquina
covariantes. virtual.
API Concurrencia
>!Wrappers de tipos primitivos y/o autoboxing & unboxing. >!Escribir código para definir, instanciar e
>!Diferencias entre String, StringBuilder, and StringBuffer. inicializar threads utilizando Java.lang.Thread
>!Leer de archivos, escribir a archivos, interactuar con el
usuario, desarrollar soluciones correctas utilizando:
y java.lang.Runnable.
BufferedReader, BufferedWriter, File, FileReader, FileWriter, >!Estados de los Threads.
PrintWriter, y Console.
>!Serialización y de-serialización de objetos.
>!Bloqueo de objetos para proteger variables
>!Utilizar el paquete java.text para formatear y parsear fechas, estaticas o de instancia de problemas de
números y divisas. acceso concurrente.
>!Describir el propósito y uso de java.util.Locale. >!Dado un escenario, escribir código que haga
>!Utilizar java.util.regex para formatear o parsear cadenas de
caracteres.
uso apropiado de wait, notify, o notifyAll.
Conceptos de OO Colecciones / Genéricos
>!Encapsulamiento, bajo acoplamiento y alta cohesión >! Comparable.
>! Sobrescribir hashCode() y equals().
entre clases.
>! Escribir código que use las versiones genéricas de la API Collections.
>!Uso de polimorfismo. Determinar cuando será >! Reconocer las limitaciones de la API de Colecciones no genéricas y como
necesario realizar castings y reconocer errores de refactorizar el código para utilizar las versiones genéricas.
>! Escribir código que use las interfaces NavigableSet y NavigableMap.
compilación vs. errores en tiempo de ejecución.
>! Escribir métodos genéricos o métodos que hagan uso de los tipos
>!Declarar y/o invocar métodos sobrecargados y comodines.
sobreescritos, y código para invocar a la superclase >! Usar las interfaces java.util.Comparator y java.lang.Comparableinterfaces
para afectar el ordenamiento de listas y arreglos.
y/o constructores sobrecargados.
>! Ordenamiento natural de wrappers de tipos primitivos y String.
>!Desarrollar código que implemente relaciones “es-
un” o “tiene-un”.
Fundamentos Diferencia entre los objetivos de los
examenes 1.5 (055) y 1.6 (065)
>!Modificadores de acceso apropiados, declaracion de >!java.io.Console,
paquetes y sentencias import.
>!Un objeto se vuelve elegible para el garbage collector. >!java.util.NavigableSet,
>!Reconocer los comportamientos del método Object.finalize(). >!java.util.NavigableMap.
>!JARs, construir la estructura de directorios apropiada.
Classpath.
>!Serás evaluado en gran profundidad en:
>!Uso correcto de operadores. manejo de exceptions, collections, assertions,
>!Escribir código que determine la igualdad de dos objetos o threads, y control de flujo.
primitivos.
¿Cómo prepararse para el
examen?
>!Entender los objetivos perfectamente.
>!Si no sabes Java, aprende Java primero. SCJP 6
>!Referirse a la documentación de la API y la Clase 0.5 – Intro a Java
especificación del lenguaje.
>!Estudiar de un buen libro de preparación para
la certificación.
>!Hacer tantas simulaciones de examen como
sea posible.
¿Qué es Java? Un poco de historia
>!Java es un lenguaje de programación orientado a
objetos desarrollado a principios de los años 90.
>!El lenguaje en sí mismo toma mucha de su
sintaxis de C y C++, pero tiene un modelo de
objetos más simple y elimina herramientas de
bajo nivel.
>!Es independiente de la plataforma. Las primeras >!Fue realizado por un equipo de 13
implementaciones de Java rezaban:“write once, personas, dirigidas por James Gosling.
run anywhere”. >!Los objetivos de Gosling eran implementar
>!Posee un sistema de administración de memoria una máquina virtual y un lenguaje con una
automático. estructura y sintaxis similar a C++.
Un poco de historia (II) ¿Porqué JAVA?
>!El lenguaje se denominó inicialmente “Oak”. Luego
pasó a denominarse “Green” tras descubrir que Oak
era ya una marca comercial registrada.
>!El término “JAVA” fue acuñado en una cafetería
frecuentada por algunos de los miembros del equipo.
>!No está claro si es un acrónimo o no, algunas
hipotesis indican que podría tratarse de las iniciales
>! Con esto en mente Gosling y su equipo
crearon el navegador WebRunner y
de sus creadores: James Gosling, Arthur Van Hoff, y
ralizarón un demo que mostraba una Andy Bechtolsheim. Otras abogan por “Just Another
molecula animada en una reunión de Vague Acronym”.
profesionales de la industria del
entretenimiento e Internet. >!La hipótesis que más fuerza tiene es la que Java debe
>! Todos sabemos como termina esta
historia…. su nombre a un tipo de café disponible en la cafetería.
.java, . Class, JVM??? Bytecode
>! El bytecode es lenguaje nativo de cualquier
implementación de la maquina virtual de Java. De esta
forma se logra que un programa Java corra en cualquier
plataforma que disponga de una JVM.
>!En Java el código fuente se escribe en un archivo de
texto plano con extensión .java.
>!Luego, el código es compilado a archivos .class. Un
archivo .class no contiene código nativo a un tipo
de procesador, en cambio contiene bytecodes.
>!Finalmente, la aplicación es interpretada por la
maquina virtual de Java, transformando los
bytecodes en código nativo en tiempo de ejecución.
La plataforma Java Java en detalle:
Inicialización de variables
>!Una plataforma es el ambiente de software o hardware en >!El lenguaje Java es fuertemente tipado, lo que
el que corre un programa.
>!La plataforma Java consta de dos componentes significa que todas las variables deben ser
>!La maquina virtual de Java declaradas antes de utilizarse.
>!La API de Java (Application Programming Interface)
int unaVariable = 1;
>!La API de Java es una vasta colección de componentes de
software que proveen un conjunto de funciones útiles.
Java en detalle: tipos primitivos (II)
tipos primitivos
Identificador Descripción Rango Valor por defecto
Identificador Descripción Rango Valor por defecto
Entero con signo, float Punto flotante, Ver 32-bit IEEE 0.0
byte -128 a 127 0
8 bits precision simple 754 floating
point
Entero con signo,
short -32.768 a 32.767 0
16 bits double Punto flotante, Ver 64-bit IEEE 0.0
Entero con signo, precision doble 754 floating
Int -2.147.483.648 a 2.147.483.647 0 point.
32 bits
Entero con signo, -9.223.372.036.854.775.808 a boolean Valor booleano true o false false
long 0
64 bits 9.223.372.036.854.775.807
char Caracter simple, '\u0000’ a '\u0000'
16 bits '\uffff'
La clase String Operadores, precedencia y
funcionalidad
Operadores representación
Postfix expr++ expr--
Unarios ++expr --expr +expr -expr
~ !
Multiplicativos * / %
Aditivos + -
Desplazamientos << >> >>>
Relacionales < > <= >=
Igualdad == !=
Operadores, precedencia y Ejemplo con operadores
funcionalidad (II) aritméticos
Operadores representación
int i=2+3; // i vale 5
AND bit a bit &
OR exclusivo bit a bit ^
i=i+1; //i vale 6
OR inclusivo bit a bit |
i=6*2; //i vale 12
AND logico &&
OR logico ||
i=2+5*2%8; //i vale4
Ternario ?:
Asignación = += -= *= /= %= &= ^= |= <<= >>=
>>>=
Ejemplo con operadores postfix y Sentencias de control: if
unarios
int i=5; // i vale 5 if(expr){
if(expr){
System.out.println(i); //Imprime:5 ....
....
System.out.println(++i); //Imprime:6 }
} else {
System.out.println(i++); //Imprime:6
if(expr) ....
System.out.println(i); //Imprime:7
sentencia; }
Sentencias de control: switch Sentencias de control: while y do-while
Switch (num){
case num1:...break;
case num2:...break; while (expr){ do {
.... ....
default:...break;
} }while(expr);
}
Sentencias de control: for Estructura de un programa Java
for (exprInic; condCorte; >! La programación orientada a objetos se basa en que cada
programa es una simulación de un mundo real o virtual.
pasoSig) { >! Cada uno de estos mundos esta compuesto de objetos.
>! Los objetos se comunican a través de mensajes
.... >! Por lo tanto, un programa orientado a objetos no es mas
que una configuración de un conjunto de objetos y los
} mensajes que se envían entre ellos.
>! El “molde” que guarda la descripción de todos los objetos
for (int i=0; i<10; i++) { de un mismo tipo e lo que conocemos como clase.
>! A su vez, las clases con propósitos similares pueden
System.out.println(i); agruparse en paquetes.
}//Imprime los números del 0 >! La ejecución de un programa comienza en el método
“main” de una clase.
al 9
Ejemplo de paquete Reglas para la creación de Clases y
paquetes
6"3%#,7(
>!Las clases Java se implementan en archivos
!"#$%&'
separados.
($)*"+',-$)*.' >!Cada clase se debe encontrar dentro de un paquete.
+&*+$*&%/%.&01'
>!El nombre del archivo de la implementación de clase
debe ser igual al nombre de la clase.
>!La estructura de paquete debe corresponderse a la
0+$1,23%&'( !"#$%&'(
)'%*&+(&,)'-( )'%*&+(#,)"'( estructura de directorio. Ej: edu.poo.Ejemplo seria
)'%*&+(&,)'4( )'%*&+($,&$%&,#-#+,./( mapeado al archivo .../edu/poo/Ejemplo.java
)'%*&+($,&$%&,#-#+,./( !"#$%&'.#,)"'/(
0+$1,23%&'.&,)'-5(&,)'41'
Estructura de una clase Modificadores de Acceso - Visibilidad
Clase Paquete Subclase Otros
public ! ! ! !
private ! " " "
protected ! ! ! "
Default (sin modificador) ! ! " "
Programación orientada a Objetos
>!Objeto
SCJP 6 >!Atributos (Variables de instancia)
Clase 1 – Declaración y >!Comportamiento (métodos)
Control de Acceso
>!La clase es el molde del objeto.
>!Los objetos son instancias de una clase.
Identificadores legales Identificadores legales (II)
>!Comienzan con una letra, ($), ( _ ). No pueden >!Clases e interfaces, la primera letra debe ser mayúscula. Por
Ej: Account, PrintWriter.
comenzar con un número.
>!En los métodos, la primera letra debe ser minúscula. Por Ej:
>!Son case-sensitive. getBalance ,doCalculation.
>!Para las variables, mismas reglas que para los métodos.
>!No pueden utilizarse palabras clave de Java,
incluyendo “enum”, agregada en java 5.0. >!Constantes,
MAYUSCULAS_SEPARADAS_POR_CARACTER_DE_SUBRAYADO.
Declaración de clases y modificadores Acceso por defecto
>!Sólo puede haber una clase pública por archivo fuente. >!Puede pensarse como “acceso a nivel
>!Si la clase pertenece a un paquete, la declaración del mismo paquete”, ya que una clase con este nivel de
debe estar en la primera línea del archivo, antes de los
imports. acceso sólo puede ser vista por clases dentro
>!Un archivo puede tener más de una clase no pública. del mismo paquete.
>!Ausencia de palabra clave.
Modifiers class ClassName{
[class member]
}
ClassName: debe ser el mismo que el nombre del archivo (.java)
Acceso público Acceso privado
>!Una declaración de clase con la palabra clave >!No puede accederse desde ninguna clase que
“public” da a todas las clases de todos los no sea la clase donde fue declarado el
paquetes acceso a dicha clase. miembro privado.
>!Palabra clave “Private”.
>!Pero, si la clase pública que estás intentando
usar se encuentra en otro paquete, deberás
importarla.
Acceso Protegido Pregunta
>!Similar al acceso por defecto. Un miembro >!¿Compila?
package certification;
declarado “Protected” puede ser accedido public class Parent {
desde una subclase incluso si está en otro protected int x = 9;
paquete. }
package other;
>!El acceso por defecto y el protegido difieren import certification.Parent;
sólo cuando hablamos de subclases. class Child extends Parent {
public void testIt() {
System.out.println("x is " + x);
Parent p = new Parent();
System.out.println("X in parent is " + p.x);
}
}
Modificadores Adicionales Final
>!Final >!La palabra clave “Final” previene que un
método, clase o variable sea sobrescrita en
>!Abstract
una subclase.
>!Transient
>!Synchronized >!Varios de los métodos en las bibliotecas de
>!Static clases principales no pueden ser sobrescritos.
Abstract Preguntas
>!Un método abstracto es un método declarado pero >!¿Podríamos tener una clase abstracta sin
no implementado. Es decir, el método no posee métodos abstractos?
código funcional.
>!Es ilegal tener incluso un único método abstracto en
una clase que no se declare explícitamente como >!Si es así, ¿Porqué no declaramos las clases
abstracta. como abstractas siempre?
>!Cualquier clase que extienda una clase abstracta
debe implementar todos los métodos abstractos de
>!Las clases abstractas, ¿Pueden tener un
la superclase, o ser declarada abstracta también.
constructor?
Pregunta Métodos con listas de argumentos
variables (var-args)
public abstract class Vehicle {
private String type;
>!Desde la versión 5.0, Java permite crear
public abstract void goUpHill(); métodos con un número variable de
public String getType(){ return type; }
}
argumentos.
>!Cuando declaramos un parámetro var-arg
public abstract class Car extends Vehicle {
public abstract void goUpHill(); debemos especificar el tipo de los
public abstract void goDownHill(int speed) { } argumentos que este parámetro podrá recibir
public void doCarThings() { } }
(puede ser primitivo u objetos).
public class Mini extends Car { … }
>!¿Qúe métodos debería sobrescribir Mini?
Var-args (II) Var-args (III)
>!La sintaxis básica para declarar un método usando >!Legal:
un parámetro var-arg es: nombreDelTipo… void doStuff(int... x) { } //0 a varios ints.
void doStuff2(char c, int... x) { } //primero un
nombreDelArregloQueContendráLosParametros char, luego entre 0 y varios ints.
void doStuff3(Animal... animal) { }
>!Puede haber otros parámetros en un método que
posee un parámetro con var-args, siempre y cuando >!Ilegal:
void doStuff4(intx...) { } // sintaxis incorrecta
solo uno sea variable, y el mismo sea el último void doStuff5(int... x, char... y) { } // demasiados
declarado en la signatura del método. var-args.
void doStuff6(String... s, byte b) { } // var-arg
debe estar al final.
Pregunta Declaración de constructores
1. class Voop {
>!En Java, los objetos son construidos. Cada vez que
2. public static void main(String [] args) {
3. doStuff(1); “hacemos” un nuevo objeto, al menos un
4. doStuff(1,2); constructor es invocado.
5. }
6. // punto de inserción
>!Cada clase tiene un constructor. Incluso si no
7. } creamos uno, el compilador lo hará por nosotros.
>!¿Cúal de estas líneas compila al colocarla en la línea 6? >!Pueden recibir argumentos (incluido var-args), pero
>! A. static void doStuff(int... doArgs) { } no pueden tener un valor de retorno.
>! B. static void doStuff(int[] doArgs) { }
>! C. static void doStuff(intdoArgs...) { } >!La otra regla importante, es que los constructores
>! D. static void doStuff(int... doArgs, inty) { } deben tener el mismo nombre que las clases en las
>! E. static void doStuff(intx, int... doArgs) { }
que son declarados.
Declaración de variables Modificadores en variables,
métodos y clases
>!Hay ocho tipos primitivos: char, Variables locales Variables no Métodos Clases
boolean, byte,short, int, long, locales
double, or float. Una vez declarado, final final final public
el tipo de un primitivo no puede ser public public final
cambiado. protected protected abstract
>!Referencias: una variable de private private strictfp
referencia es usada para acceder al static static
lugar en memoria donde se transient abstract
almacena un objeto. Array, Collection volatile synchronized
y String, son variables de referencia. strictfp
native
Declaración de Enums Declaración de Enums (II)
>!Una practica común en programación es >!Los enums pueden ser declarados como una clase
tener un conjunto finito de nombres separada, o como miembro de una clase, pero no
simbólicos que representan los valores de un pueden ser declarados dentro de un método.
atributo. >!Declarar un enum fuera de una clase:
>!Enum == Class. enum CoffeeSize{
>!Ejemplo. BIG, HUGE, OVERWHELMING
}
enumGrade{ class Coffee {
A,B,C,D,F CoffeeSizesize;
}
}; // el punto y coma es opcional
Declaración de Enums (III) Declaración de Enums (IV)
>!Declarar un enum dentro de una clase >!Lo que tendrían que saber es:
enum Grade{
class Coffee { A,B,C,D,F
public static final Grade A = new Grade(“A”,0);
enumCoffeeSize{ };
BIG, HUGE, OVERWHELMING
>!Y hay que usarlo así:
} public class Student{
private Grade grade= Grade.A;
CoffeeSize size;
}
}
Declaración de Enums (V) Declaración de constructors, métodos y
variables en un Enum
enum CoffeeSize{
>!Esto es ilegal:
BIG(8), HUGE(10), OVERWHELMING(16);
public class CoffeeTest1 { CoffeeSize(int ounces) {
public static void main(String[] args{ this.ounces= ounces; // asigna el valor a
enumCoffeeSize{ BIG, HUGE, OVERWHELMING } //una variable de instancia.
//¡MAL! }
//no pueden declararse enums dentro de métodos.
Coffee drink = new Coffee(); drink.size = private int ounces; // una variable de
CoffeeSize.BIG; //instancia que tiene
} //cada valor del enum.
}
public int getOunces() { return ounces; }
}
Declaración de constructors, métodos y Declaración de constructors, métodos y
variables en un Enum (II) variables en un Enum (III)
Coffee drink1= new Coffee(); Enum CoffeeSize{
BIG(8),HUGE(10),OVERWHELMING(16) {
drink1.size = CoffeeSize.BIG; public String getLidCode() { return "A"; }
}; // el punto y coma es obligatorio
Coffee drink2= new Coffee();
CoffeeSize(int ounces){this.ounces = ounces; }
drink2.size = CoffeeSize.OVERWHELMING;
private int ounces;
System.out.println(drink1.size.getOunces()); public int getOunces() { return ounces; }
// imprime 8
public String getLidCode(){
System.out.println(drink2.size.getOunces() ()); return "B"; // el valor por defecto
// imprime 16 }
}
Pregunta Preguntas
>! Dado:
1. enumA { A }
2. class E2 {
3. enumB { B }
4. void C() {
5. enumD { D }
6. } }
>! ¿Cuales de las siguientes afirmaciones son ciertas?
>! A. compila.
>! B. Si sólo sacamos la línea 1, compila.
>! C. Si sólo sacamos la línea 3, compila.
>! D. Si sólo sacamos la línea 5, compila.
>! E. Si sacamos las líneas 1 y 3, compila.
>! F. Si sacamos las líneas 1, 3 y 5, compila.

Das könnte Ihnen auch gefallen