You are on page 1of 74

SCJP 6

Clase 0 Presentacin

Ezequiel Aranda
Sun Microsystems Campus
Ambassador

Disclaimer & Acknowledgments


>Even though Ezequiel Aranda is a full-time employee of Sun
Microsystems, the contents here are created as his own
personal endeavor and thus does not reflect any official
stance of Sun Microsystems.
>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
>http://creativecommons.org/licenses/by-nc-sa/3.0/

Certificarse, Para qu?


>Los ttulos universitarios no prueban nuestras capacidades en
tecnologas utilizadas en aplicaciones del mundo real.
>Los cursos de institutos brindan certificaciones a todos, por lo
que no pueden ser utilizados para medir nuestros
conocimientos.
>La industria necesita una forma de conocer nuestros
conocimientos en las tecnologas que utilizan para construir
sus aplicaciones.
>Para probar nuestras credenciales en el mercado global.

Certificarse, Para qu? (II)


>Los puestos de trabajo en IT estn entre los 10 ms difciles
de llenar, de acuerdo a una encuesta de Manpower de abril
de 2008.
>Cerca del 25% de los empleadores tienen problemas para
contratar personal debido a falta de capacidad.
>Mltiples estudios sugieren que habr una amplia brecha
entre la demanda de puestos de IT y la oferta de trabajadores
con las habilidades necesarias en los prximos 5 a 10 aos.

Valor de una certificacin


> El verdadero valor yace en la capacidad de verificar que una persona
posee las habilidades que son importantes para el empleador.
> Las compaas de software consiguen ms contratos o cobran mayores
tarifas cuando sus empleados son certificados.
> Prueban efectivamente que una persona con un titulo universitario posee
adicionalmente conocimientos sobre tecnologas del mundo real.
> Los empleadores buscan candidatos con este tipo de conocimientos, que
mejor para conseguir un primer trabajo que obtener una credencial
reconocida por la industria?
> Ayuda a obtener conocimientos profundos sobre una tecnologa.

SCJP

Esta certificacin de base est dirigida a


programadores interesados en
demostrar su competencia en los
fundamentos del lenguaje de
programacin Java.

Certification Path

SCJP
>Tipo de examen: Multiple choice y drag and
drop
>Nmero de preguntas: 72
>Condicin de Aprobacin: 65%(47 de 72
preguntas)
>Tiempo: 210 minutos
>Prerrequisito: Ninguno
>Valor: US$ 40

Declaraciones, inicializaciones y
mbitos

>Clases (incluyendo abstractas y todas las


formas de clases anidadas), interfaces, y
enums.
>JavaBeans, estndares de nomenclatura.
>Lista de argumentos de longitud variable.
>Valores de retorno legales, incluyendo
covariantes.

Control de Flujo
>Switch.
>Loops e iteradores.
>Assertions.
>Exceptions y clusulas para su manejo (try,
catch, finally).
>Entender cuales son arrojadas por la mquina
virtual.

API
>Wrappers de tipos primitivos y/o autoboxing & unboxing.
>Diferencias entre String, StringBuilder, and StringBuffer.
>Leer de archivos, escribir a archivos, interactuar con el
usuario, desarrollar soluciones correctas utilizando:
BufferedReader, BufferedWriter, File, FileReader, FileWriter,
PrintWriter, y Console.
>Serializacin y de-serializacin de objetos.
>Utilizar el paquete java.text para formatear y parsear fechas,
nmeros y divisas.
>Describir el propsito y uso de java.util.Locale.
>Utilizar java.util.regex para formatear o parsear cadenas de
caracteres.

Concurrencia
>Escribir cdigo para definir, instanciar e
inicializar threads utilizando Java.lang.Thread
y java.lang.Runnable.
>Estados de los Threads.
>Bloqueo de objetos para proteger variables
estaticas o de instancia de problemas de
acceso concurrente.
>Dado un escenario, escribir cdigo que haga
uso apropiado de wait, notify, o notifyAll.

Conceptos de OO
>Encapsulamiento, bajo acoplamiento y alta cohesin
entre clases.
>Uso de polimorfismo. Determinar cuando ser
necesario realizar castings y reconocer errores de
compilacin vs. errores en tiempo de ejecucin.
>Declarar y/o invocar mtodos sobrecargados y
sobreescritos, y cdigo para invocar a la superclase
y/o constructores sobrecargados.
>Desarrollar cdigo que implemente relaciones esun o tiene-un.

Colecciones / Genricos
> Comparable.
> Sobrescribir hashCode() y equals().
> Escribir cdigo que use las versiones genricas de la API Collections.
> Reconocer las limitaciones de la API de Colecciones no genricas y como
refactorizar el cdigo para utilizar las versiones genricas.
> Escribir cdigo que use las interfaces NavigableSet y NavigableMap.
> Escribir mtodos genricos o mtodos que hagan uso de los tipos
comodines.
> Usar las interfaces java.util.Comparator y java.lang.Comparableinterfaces
para afectar el ordenamiento de listas y arreglos.
> Ordenamiento natural de wrappers de tipos primitivos y String.

Fundamentos
>Modificadores de acceso apropiados, declaracion de
paquetes y sentencias import.
>Un objeto se vuelve elegible para el garbage collector.
>Reconocer los comportamientos del mtodo Object.finalize().
>JARs, construir la estructura de directorios apropiada.
Classpath.
>Uso correcto de operadores.
>Escribir cdigo que determine la igualdad de dos objetos o
primitivos.

Diferencia entre los objetivos de los


examenes 1.5 (055) y 1.6 (065)
>java.io.Console,
>java.util.NavigableSet,
>java.util.NavigableMap.
>Sers evaluado en gran profundidad en:
manejo de exceptions, collections, assertions,
threads, y control de flujo.

Cmo prepararse para el


examen?

>Entender los objetivos perfectamente.


>Si no sabes Java, aprende Java primero.
>Referirse a la documentacin de la API y la
especificacin del lenguaje.
>Estudiar de un buen libro de preparacin para
la certificacin.
>Hacer tantas simulaciones de examen como
sea posible.

SCJP 6
Clase 0.5 Intro a Java

Qu es Java?
>Java es un lenguaje de programacin orientado a
objetos desarrollado a principios de los aos 90.
>El lenguaje en s mismo toma mucha de su
sintaxis de C y C++, pero tiene un modelo de
objetos ms simple y elimina herramientas de
bajo nivel.
>Es independiente de la plataforma. Las primeras
implementaciones de Java rezaban:write once,
run anywhere.
>Posee un sistema de administracin de memoria
automtico.

Un poco de historia

>Fue realizado por un equipo de 13


personas, dirigidas por James Gosling.
>Los objetivos de Gosling eran implementar
una mquina virtual y un lenguaje con una
estructura y sintaxis similar a C++.

Un poco de historia (II)

> Con esto en mente Gosling y su equipo


crearon el navegador WebRunner y
ralizarn un demo que mostraba una
molecula animada en una reunin de
profesionales de la industria del
entretenimiento e Internet.
> Todos sabemos como termina esta
historia.

Porqu JAVA?
>El lenguaje se denomin inicialmente Oak. Luego
pas a denominarse Green tras descubrir que Oak
era ya una marca comercial registrada.
>El trmino JAVA fue acuado en una cafetera
frecuentada por algunos de los miembros del equipo.
>No est claro si es un acrnimo o no, algunas
hipotesis indican que podra tratarse de las iniciales
de sus creadores: James Gosling, Arthur Van Hoff, y
Andy Bechtolsheim. Otras abogan por Just Another
Vague Acronym.
>La hiptesis que ms fuerza tiene es la que Java debe
su nombre a un tipo de caf disponible en la cafetera.

.java, . Class, JVM???

>En Java el cdigo fuente se escribe en un archivo de


texto plano con extensin .java.
>Luego, el cdigo es compilado a archivos .class. Un
archivo .class no contiene cdigo nativo a un tipo
de procesador, en cambio contiene bytecodes.
>Finalmente, la aplicacin es interpretada por la
maquina virtual de Java, transformando los
bytecodes en cdigo nativo en tiempo de ejecucin.

Bytecode
> El bytecode es lenguaje nativo de cualquier
implementacin de la maquina virtual de Java. De esta
forma se logra que un programa Java corra en cualquier
plataforma que disponga de una JVM.

La plataforma Java
>Una plataforma es el ambiente de software o hardware en
el que corre un programa.
>La plataforma Java consta de dos componentes
>La maquina virtual de Java
>La API de Java (Application Programming Interface)

>La API de Java es una vasta coleccin de componentes de


software que proveen un conjunto de funciones tiles.

Java en detalle:
Inicializacin de variables
>El lenguaje Java es fuertemente tipado, lo que
significa que todas las variables deben ser
declaradas antes de utilizarse.
int unaVariable = 1;

Java en detalle:
tipos primitivos
Identificador

Descripcin

Rango

Valor por defecto

byte

Entero con signo,


8 bits

-128 a 127

short

Entero con signo,


16 bits

-32.768 a 32.767

Int

Entero con signo,


32 bits

-2.147.483.648 a 2.147.483.647

long

Entero con signo,


64 bits

-9.223.372.036.854.775.808 a
9.223.372.036.854.775.807

tipos primitivos (II)


Identificador

Descripcin

Rango

Valor por defecto

float

Punto flotante,
precision simple

Ver 32-bit IEEE


754 floating
point

0.0

double

Punto flotante,
precision doble

Ver 64-bit IEEE


754 floating
point.

0.0

boolean

Valor booleano

true o false

false

char

Caracter simple,
16 bits

'\u0000 a
'\uffff'

'\u0000'

La clase String

Operadores, precedencia y
funcionalidad
Operadores

representacin

Postfix

expr++ expr--

Unarios

++expr --expr +expr -expr


~ !

Multiplicativos

* / %

Aditivos

+ -

Desplazamientos

<< >> >>>

Relacionales

< > <= >=

Igualdad

== !=

Operadores, precedencia y
funcionalidad (II)
Operadores

representacin

AND bit a bit

&

OR exclusivo bit a bit

OR inclusivo bit a bit

AND logico

&&

OR logico

||

Ternario

?:

Asignacin

= += -= *= /= %= &= ^= |= <<= >>=


>>>=

Ejemplo con operadores


aritmticos
int i=2+3; // i vale 5
i=i+1; //i vale 6
i=6*2; //i vale 12
i=2+5*2%8; //i vale4

Ejemplo con operadores postfix y


unarios
int i=5; // i vale 5
System.out.println(i); //Imprime:5
System.out.println(++i); //Imprime:6
System.out.println(i++); //Imprime:6
System.out.println(i); //Imprime:7

Sentencias de control: if
if(expr){
....
}
if(expr)
sentencia;

if(expr){
....
} else {
....
}

Sentencias de control: switch


Switch (num){
case num1:...break;
case num2:...break;
default:...break;
}

Sentencias de control: while y do-while

while (expr){
....
}

do {
....
}while(expr);

Sentencias de control: for


for (exprInic; condCorte;
pasoSig) {
....
}
for (int i=0; i<10; i++) {
System.out.println(i);
}//Imprime los nmeros del 0
al 9

Estructura de un programa Java


> La programacin orientada a objetos se basa en que cada
programa es una simulacin de un mundo real o virtual.
> Cada uno de estos mundos esta compuesto de objetos.
> Los objetos se comunican a travs de mensajes
> Por lo tanto, un programa orientado a objetos no es mas
que una configuracin de un conjunto de objetos y los
mensajes que se envan entre ellos.
> El molde que guarda la descripcin de todos los objetos
de un mismo tipo e lo que conocemos como clase.
> A su vez, las clases con propsitos similares pueden
agruparse en paquetes.
> La ejecucin de un programa comienza en el mtodo
main de una clase.

Ejemplo de paquete
Figuras
Figura
publicDouble
calcularArea()

Rectangulo

Circulo

doubleladoA
doubleladoB
doublecalcularArea()
Rectangulo(ladoA,ladoB)

doubleradio
doublecalcularArea()
Circulo(radio)

Reglas para la creacin de Clases y


paquetes
>Las clases Java se implementan en archivos
separados.
>Cada clase se debe encontrar dentro de un paquete.
>El nombre del archivo de la implementacin de clase
debe ser igual al nombre de la clase.
>La estructura de paquete debe corresponderse a la
estructura de directorio. Ej: edu.poo.Ejemplo seria
mapeado al archivo .../edu/poo/Ejemplo.java

Estructura de una clase

Modificadores de Acceso - Visibilidad


Clase

Paquete

Subclase

Otros

public

private

protected

Default (sin modificador)

SCJP 6
Clase 1 Declaracin y
Control de Acceso

Programacin orientada a Objetos


>Objeto
>Atributos (Variables de instancia)
>Comportamiento (mtodos)
>La clase es el molde del objeto.
>Los objetos son instancias de una clase.

Identificadores legales
>Comienzan con una letra, ($), ( _ ). No pueden
comenzar con un nmero.
>Son case-sensitive.
>No pueden utilizarse palabras clave de Java,
incluyendo enum, agregada en java 5.0.

Identificadores legales (II)


>Clases e interfaces, la primera letra debe ser mayscula. Por
Ej: Account, PrintWriter.
>En los mtodos, la primera letra debe ser minscula. Por Ej:
getBalance ,doCalculation.
>Para las variables, mismas reglas que para los mtodos.
>Constantes,
MAYUSCULAS_SEPARADAS_POR_CARACTER_DE_SUBRAYADO.

Declaracin de clases y modificadores


>Slo puede haber una clase pblica por archivo fuente.
>Si la clase pertenece a un paquete, la declaracin del mismo
debe estar en la primera lnea del archivo, antes de los
imports.
>Un archivo puede tener ms de una clase no pblica.
Modifiers class ClassName{
[class member]
}
ClassName: debe ser el mismo que el nombre del archivo (.java)

Acceso por defecto


>Puede pensarse como acceso a nivel
paquete, ya que una clase con este nivel de
acceso slo puede ser vista por clases dentro
del mismo paquete.
>Ausencia de palabra clave.

Acceso pblico
>Una declaracin de clase con la palabra clave
public da a todas las clases de todos los
paquetes acceso a dicha clase.
>Pero, si la clase pblica que ests intentando
usar se encuentra en otro paquete, debers
importarla.

Acceso privado
>No puede accederse desde ninguna clase que
no sea la clase donde fue declarado el
miembro privado.
>Palabra clave Private.

Acceso Protegido
>Similar al acceso por defecto. Un miembro
declarado Protected puede ser accedido
desde una subclase incluso si est en otro
paquete.
>El acceso por defecto y el protegido difieren
slo cuando hablamos de subclases.

Pregunta
>Compila?
package certification;
public class Parent {
protected int x = 9;
}
package other;
import certification.Parent;
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
>Abstract
>Transient
>Synchronized
>Static

Final
>La palabra clave Final previene que un
mtodo, clase o variable sea sobrescrita en
una subclase.
>Varios de los mtodos en las bibliotecas de
clases principales no pueden ser sobrescritos.

Abstract
>Un mtodo abstracto es un mtodo declarado pero
no implementado. Es decir, el mtodo no posee
cdigo funcional.
>Es ilegal tener incluso un nico mtodo abstracto en
una clase que no se declare explcitamente como
abstracta.
>Cualquier clase que extienda una clase abstracta
debe implementar todos los mtodos abstractos de
la superclase, o ser declarada abstracta tambin.

Preguntas
>Podramos tener una clase abstracta sin
mtodos abstractos?
>Si es as, Porqu no declaramos las clases
como abstractas siempre?
>Las clases abstractas, Pueden tener un
constructor?

Pregunta
public abstract class Vehicle {
private String type;
public abstract void goUpHill();
public String getType(){ return type; }
}
public abstract class Car extends Vehicle {
public abstract void goUpHill();
public abstract void goDownHill(int speed) { }
public void doCarThings() { } }
public class Mini extends Car { }

>Qe mtodos debera sobrescribir Mini?

Mtodos con listas de argumentos


variables (var-args)
>Desde la versin 5.0, Java permite crear
mtodos con un nmero variable de
argumentos.
>Cuando declaramos un parmetro var-arg
debemos especificar el tipo de los
argumentos que este parmetro podr recibir
(puede ser primitivo u objetos).

Var-args (II)
>La sintaxis bsica para declarar un mtodo usando
un parmetro var-arg es: nombreDelTipo
nombreDelArregloQueContendrLosParametros
>Puede haber otros parmetros en un mtodo que
posee un parmetro con var-args, siempre y cuando
solo uno sea variable, y el mismo sea el ltimo
declarado en la signatura del mtodo.

Var-args (III)
>Legal:
void doStuff(int... x) { } //0 a varios ints.
void doStuff2(char c, int... x) { } //primero un
char, luego entre 0 y varios ints.
void doStuff3(Animal... animal) { }

>Ilegal:
void doStuff4(intx...) { } // sintaxis incorrecta
void doStuff5(int... x, char... y) { } // demasiados
var-args.
void doStuff6(String... s, byte b) { } // var-arg
debe estar al final.

Pregunta
1.
2.
3.
4.
5.
6.
7.

class Voop {
public static void main(String [] args) {
doStuff(1);
doStuff(1,2);
}
// punto de insercin
}

>Cal de estas lneas compila al colocarla en la lnea 6?


> A. static void doStuff(int... doArgs) { }
> B. static void doStuff(int[] doArgs) { }
> C. static void doStuff(intdoArgs...) { }
> D. static void doStuff(int... doArgs, inty) { }
> E. static void doStuff(intx, int... doArgs) { }

Declaracin de constructores
>En Java, los objetos son construidos. Cada vez que
hacemos un nuevo objeto, al menos un
constructor es invocado.
>Cada clase tiene un constructor. Incluso si no
creamos uno, el compilador lo har por nosotros.
>Pueden recibir argumentos (incluido var-args), pero
no pueden tener un valor de retorno.
>La otra regla importante, es que los constructores
deben tener el mismo nombre que las clases en las
que son declarados.

Declaracin de variables
>Hay ocho tipos primitivos: char,
boolean, byte,short, int, long,
double, or float. Una vez declarado,
el tipo de un primitivo no puede ser
cambiado.
>Referencias: una variable de
referencia es usada para acceder al
lugar en memoria donde se
almacena un objeto. Array, Collection
y String, son variables de referencia.

Modificadores en variables,
mtodos y clases
Variables locales

Variables no
locales

Mtodos

Clases

final

final

final

public

public

public

final

protected

protected

abstract

private

private

strictfp

static

static

transient

abstract

volatile

synchronized
strictfp
native

Declaracin de Enums
>Una practica comn en programacin es
tener un conjunto finito de nombres
simblicos que representan los valores de un
atributo.
>Enum == Class.
>Ejemplo.
enumGrade{
A,B,C,D,F
}; // el punto y coma es opcional

Declaracin de Enums (II)


>Los enums pueden ser declarados como una clase
separada, o como miembro de una clase, pero no
pueden ser declarados dentro de un mtodo.
>Declarar un enum fuera de una clase:
enum CoffeeSize{
BIG, HUGE, OVERWHELMING
}
class Coffee {
CoffeeSizesize;
}

Declaracin de Enums (III)


>Declarar un enum dentro de una clase
class Coffee {
enumCoffeeSize{
BIG, HUGE, OVERWHELMING
}
CoffeeSize size;
}

Declaracin de Enums (IV)


>Lo que tendran que saber es:
enum Grade{
A,B,C,D,F
public static final Grade A = new Grade(A,0);
};

>Y hay que usarlo as:


public class Student{
private Grade grade= Grade.A;
}

Declaracin de Enums (V)


>Esto es ilegal:
public class CoffeeTest1 {
public static void main(String[] args{
enumCoffeeSize{ BIG, HUGE, OVERWHELMING }
//MAL!
//no pueden declararse enums dentro de mtodos.
Coffee drink = new Coffee(); drink.size =
CoffeeSize.BIG;
}
}

Declaracin de constructors, mtodos y


variables en un Enum
enum CoffeeSize{
BIG(8), HUGE(10), OVERWHELMING(16);
CoffeeSize(int ounces) {
this.ounces= ounces; // asigna el valor a
//una variable de instancia.
}
private int ounces; // una variable de
//instancia que tiene
//cada valor del enum.
public int getOunces() { return ounces; }
}

Declaracin de constructors, mtodos y


variables en un Enum (II)
Coffee drink1= new Coffee();
drink1.size = CoffeeSize.BIG;
Coffee drink2= new Coffee();
drink2.size = CoffeeSize.OVERWHELMING;
System.out.println(drink1.size.getOunces());
// imprime 8
System.out.println(drink2.size.getOunces() ());
// imprime 16

Declaracin de constructors, mtodos y


variables en un Enum (III)
Enum CoffeeSize{
BIG(8),HUGE(10),OVERWHELMING(16) {
public String getLidCode() { return "A"; }
}; // el punto y coma es obligatorio
CoffeeSize(int ounces){this.ounces = ounces; }
private int ounces;
public int getOunces() { return ounces; }
public String getLidCode(){
return "B"; // el valor por defecto
}
}

Pregunta
> 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 slo sacamos la lnea 1, compila.
C. Si slo sacamos la lnea 3, compila.
D. Si slo sacamos la lnea 5, compila.
E. Si sacamos las lneas 1 y 3, compila.
F. Si sacamos las lneas 1, 3 y 5, compila.

Preguntas

You might also like