Slides de la primera clase del curso de Java SCJP dictado en la Universidad Nacional de Centro de La Provincia de Buenos Aires.
Contenido:
1. Introducción a SCJP
2. Introducción a Java
3. Unidad 1: Declaración y Control de Acceso
2. 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/
3. Certificarse, ¿Para qué?
> Los títulos universitarios no prueban nuestras capacidades en
tecnologías 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 tecnologías que utilizan para construir
sus aplicaciones.
> Para probar nuestras credenciales en el mercado global.
4. Certificarse, ¿Para qué? (II)
> Los puestos de trabajo en IT están entre los 10 más difíciles
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.
> Múltiples 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 próximos 5 a 10 años.
5. Valor de una certificación
> 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
tarifas cuando sus empleados son certificados.
> Prueban efectivamente que una persona con un titulo universitario posee
adicionalmente conocimientos sobre tecnologías 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 tecnología.
6. SCJP
Esta certificación de base está dirigida a
programadores interesados en
demostrar su competencia en los
fundamentos del lenguaje de
programación Java.
8. SCJP
> ipo de examen: Multiple choice y drag and
T
drop
> úmero de preguntas: 72
N
> ondición de Aprobación: 65%(47 de 72
C
preguntas)
> iempo: 210 minutos
T
> rerrequisito: Ninguno
P
> alor: US$ 40
V
9. Declaraciones, inicializaciones y
ámbitos
> lases (incluyendo abstractas y todas las
C
formas de clases anidadas), interfaces, y
enums.
> avaBeans, estándares de nomenclatura.
J
> ista de argumentos de longitud variable.
L
> alores de retorno legales, incluyendo
V
covariantes.
10. Control de Flujo
> witch.
S
> oops e iteradores.
L
> ssertions.
A
> xceptions y cláusulas para su manejo (try,
E
catch, finally).
> ntender cuales son arrojadas por la máquina
E
virtual.
11. 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.
> Serialización y de-serialización de objetos.
> Utilizar el paquete java.text para formatear y parsear fechas,
números y divisas.
> Describir el propósito y uso de java.util.Locale.
> Utilizar java.util.regex para formatear o parsear cadenas de
caracteres.
12. Concurrencia
> scribir código para definir, instanciar e
E
inicializar threads utilizando Java.lang.Thread
y java.lang.Runnable.
> stados de los Threads.
E
> loqueo de objetos para proteger variables
B
estaticas o de instancia de problemas de
acceso concurrente.
> ado un escenario, escribir código que haga
D
uso apropiado de wait, notify, o notifyAll.
13. Conceptos de OO
> Encapsulamiento, bajo acoplamiento y alta cohesión
entre clases.
> Uso de polimorfismo. Determinar cuando será
necesario realizar castings y reconocer errores de
compilación vs. errores en tiempo de ejecución.
> Declarar y/o invocar métodos sobrecargados y
sobreescritos, y código para invocar a la superclase
y/o constructores sobrecargados.
> Desarrollar código que implemente relaciones “es-
un” o “tiene-un”.
14. Colecciones / Genéricos
> Comparable.
> Sobrescribir hashCode() y equals().
> Escribir código que use las versiones genéricas de la API Collections.
> Reconocer las limitaciones de la API de Colecciones no genéricas y como
refactorizar el código para utilizar las versiones genéricas.
> Escribir código que use las interfaces NavigableSet y NavigableMap.
> Escribir métodos genéricos o métodos 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.
15. Fundamentos
> Modificadores de acceso apropiados, declaracion de
paquetes y sentencias import.
> Un objeto se vuelve elegible para el garbage collector.
> Reconocer los comportamientos del método Object.finalize().
> JARs, construir la estructura de directorios apropiada.
Classpath.
> Uso correcto de operadores.
> Escribir código que determine la igualdad de dos objetos o
primitivos.
16. Diferencia entre los objetivos de los
examenes 1.5 (055) y 1.6 (065)
> ava.io.Console,
j
> ava.util.NavigableSet,
j
> ava.util.NavigableMap.
j
> erás evaluado en gran profundidad en:
S
manejo de exceptions, collections, assertions,
threads, y control de flujo.
17. ¿Cómo prepararse para el
examen?
> ntender los objetivos perfectamente.
E
> i no sabes Java, aprende Java primero.
S
> eferirse a la documentación de la API y la
R
especificación del lenguaje.
> studiar de un buen libro de preparación para
E
la certificación.
> acer tantas simulaciones de examen como
H
sea posible.
19. ¿Qué es Java?
> 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
implementaciones de Java rezaban:“write once,
run anywhere”.
> Posee un sistema de administración de memoria
automático.
20. Un poco de historia
> Fue realizado por un equipo de 13
personas, dirigidas por James Gosling.
> Los objetivos de Gosling eran implementar
una máquina virtual y un lenguaje con una
estructura y sintaxis similar a C++.
21. Un poco de historia (II)
> Con esto en mente Gosling y su equipo
crearon el navegador WebRunner y
ralizarón un demo que mostraba una
molecula animada en una reunión de
profesionales de la industria del
entretenimiento e Internet.
> Todos sabemos como termina esta
historia….
22. ¿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
de sus creadores: James Gosling, Arthur Van Hoff, y
Andy Bechtolsheim. Otras abogan por “Just Another
Vague Acronym”.
> La hipótesis que más fuerza tiene es la que Java debe
su nombre a un tipo de café disponible en la cafetería.
23. .java, . Class, 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.
24. 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.
25. 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 colección de componentes de
software que proveen un conjunto de funciones útiles.
26. Java en detalle:
Inicialización de variables
> l lenguaje Java es fuertemente tipado, lo que
E
significa que todas las variables deben ser
declaradas antes de utilizarse.
int unaVariable = 1;
27. Java en detalle:
tipos primitivos
Identificador Descripción Rango Valor por defecto
Entero con signo,
byte -128 a 127 0
8 bits
Entero con signo,
short -32.768 a 32.767 0
16 bits
Entero con signo,
Int -2.147.483.648 a 2.147.483.647 0
32 bits
Entero con signo, -9.223.372.036.854.775.808 a
long 0
64 bits 9.223.372.036.854.775.807
28. tipos primitivos (II)
Identificador Descripción Rango Valor por defecto
float Punto flotante, Ver 32-bit IEEE 0.0
precision simple 754 floating
point
double Punto flotante, Ver 64-bit IEEE 0.0
precision doble 754 floating
point.
boolean Valor booleano true o false false
char Caracter simple, 'u0000’ a 'u0000'
16 bits 'uffff'
31. Operadores, precedencia y
funcionalidad (II)
Operadores representación
AND bit a bit &
OR exclusivo bit a bit ^
OR inclusivo bit a bit |
AND logico &&
OR logico ||
Ternario ?:
Asignación = += -= *= /= %= &= ^= |= <<= >>=
>>>=
32. Ejemplo con operadores
aritméticos
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
33. 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
34. Sentencias de control: if
if(expr){
if(expr){
....
....
}
} else {
....
if(expr)
}
sentencia;
35. Sentencias de control: switch
Switch (num){
case num1:...break;
case num2:...break;
default:...break;
}
37. Sentencias de control: for
for (exprInic; condCorte;
pasoSig) {
....
}
for (int i=0; i<10; i++) {
System.out.println(i);
}//Imprime los números del 0
al 9
38. Estructura de un programa Java
> La programación orientada a objetos se basa en que cada
programa es una simulación de un mundo real o virtual.
> 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
de un mismo tipo e lo que conocemos como clase.
> A su vez, las clases con propósitos similares pueden
agruparse en paquetes.
> La ejecución de un programa comienza en el método
“main” de una clase.
39. Ejemplo de paquete
Figuras
Figura
public Double
calcularArea()
Rectangulo Circulo
double ladoA double radio
double ladoB double calcularArea()
double calcularArea() Circulo(radio)
Rectangulo(ladoA, ladoB)
40. Reglas para la creación 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 implementación 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
44. Programación orientada a Objetos
> bjeto
O
> tributos (Variables de instancia)
A
> omportamiento (métodos)
C
> a clase es el molde del objeto.
L
> os objetos son instancias de una clase.
L
45. Identificadores legales
> omienzan con una letra, ($), ( _ ). No pueden
C
comenzar con un número.
> on case-sensitive.
S
> o pueden utilizarse palabras clave de Java,
N
incluyendo “enum”, agregada en java 5.0.
46. Identificadores legales (II)
> Clases e interfaces, la primera letra debe ser mayúscula. Por
Ej: Account, PrintWriter.
> En los métodos, la primera letra debe ser minúscula. Por Ej:
getBalance ,doCalculation.
> Para las variables, mismas reglas que para los métodos.
> Constantes,
MAYUSCULAS_SEPARADAS_POR_CARACTER_DE_SUBRAYADO.
47. Declaración de clases y modificadores
> Sólo puede haber una clase pública por archivo fuente.
> Si la clase pertenece a un paquete, la declaración del mismo
debe estar en la primera línea del archivo, antes de los
imports.
> Un archivo puede tener más de una clase no pública.
Modifiers class ClassName{
[class member]
}
ClassName: debe ser el mismo que el nombre del archivo (.java)
48. Acceso por defecto
> uede pensarse como “acceso a nivel
P
paquete”, ya que una clase con este nivel de
acceso sólo puede ser vista por clases dentro
del mismo paquete.
> usencia de palabra clave.
A
49. Acceso público
> na declaración de clase con la palabra clave
U
“public” da a todas las clases de todos los
paquetes acceso a dicha clase.
> ero, si la clase pública que estás intentando
P
usar se encuentra en otro paquete, deberás
importarla.
50. Acceso privado
> o puede accederse desde ninguna clase que
N
no sea la clase donde fue declarado el
miembro privado.
> alabra clave “Private”.
P
51. Acceso Protegido
> imilar al acceso por defecto. Un miembro
S
declarado “Protected” puede ser accedido
desde una subclase incluso si está en otro
paquete.
> l acceso por defecto y el protegido difieren
E
sólo cuando hablamos de subclases.
52. 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(quot;x is quot; + x);
Parent p = new Parent();
System.out.println(quot;X in parent is quot; + p.x);
}
}
54. Final
> a palabra clave “Final” previene que un
L
método, clase o variable sea sobrescrita en
una subclase.
> arios de los métodos en las bibliotecas de
V
clases principales no pueden ser sobrescritos.
55. Abstract
> Un método abstracto es un método declarado pero
no implementado. Es decir, el método no posee
código funcional.
> Es ilegal tener incluso un único método abstracto en
una clase que no se declare explícitamente como
abstracta.
> Cualquier clase que extienda una clase abstracta
debe implementar todos los métodos abstractos de
la superclase, o ser declarada abstracta también.
56. Preguntas
> Podríamos tener una clase abstracta sin
¿
métodos abstractos?
> i es así, ¿Porqué no declaramos las clases
S
como abstractas siempre?
> as clases abstractas, ¿Pueden tener un
L
constructor?
57. 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 { … }
> ¿Qúe métodos debería sobrescribir Mini?
58. Métodos con listas de argumentos
variables (var-args)
> esde la versión 5.0, Java permite crear
D
métodos con un número variable de
argumentos.
> uando declaramos un parámetro var-arg
C
debemos especificar el tipo de los
argumentos que este parámetro podrá recibir
(puede ser primitivo u objetos).
59. Var-args (II)
> La sintaxis básica para declarar un método usando
un parámetro var-arg es: nombreDelTipo…
nombreDelArregloQueContendráLosParametros
> Puede haber otros parámetros en un método que
posee un parámetro con var-args, siempre y cuando
solo uno sea variable, y el mismo sea el último
declarado en la signatura del método.
60. Var-args (III)
> egal:
L
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) { }
> legal:
I
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.
61. Pregunta
1. class Voop {
2. public static void main(String [] args) {
3. doStuff(1);
4. doStuff(1,2);
5. }
6. // punto de inserción
7. }
> ¿Cúal de estas líneas compila al colocarla en la línea 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) { }
62. Declaración 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.
63. Declaración 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.
64. Modificadores en variables,
métodos y clases
Variables locales Variables no Métodos Clases
locales
final final final public
public public final
protected protected abstract
private private strictfp
static static
transient abstract
volatile synchronized
strictfp
native
65. Declaración de Enums
> na practica común en programación es
U
tener un conjunto finito de nombres
simbólicos que representan los valores de un
atributo.
> num == Class.
E
> jemplo.
E
enumGrade{
A,B,C,D,F
}; // el punto y coma es opcional
66. Declaración 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 método.
> Declarar un enum fuera de una clase:
enum CoffeeSize{
BIG, HUGE, OVERWHELMING
}
class Coffee {
CoffeeSizesize;
}
67. Declaración de Enums (III)
> eclarar un enum dentro de una clase
D
class Coffee {
enumCoffeeSize{
BIG, HUGE, OVERWHELMING
}
CoffeeSize size;
}
68. Declaración de Enums (IV)
> Lo que tendrían 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;
}
69. Declaración de Enums (V)
> sto es ilegal:
E
public class CoffeeTest1 {
public static void main(String[] args{
enumCoffeeSize{ BIG, HUGE, OVERWHELMING }
//¡MAL!
//no pueden declararse enums dentro de métodos.
Coffee drink = new Coffee(); drink.size =
CoffeeSize.BIG;
}
}
70. Declaración de constructors, métodos 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; }
}
71. Declaración de constructors, métodos 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
72. Declaración de constructors, métodos y
variables en un Enum (III)
Enum CoffeeSize{
BIG(8),HUGE(10),OVERWHELMING(16) {
public String getLidCode() { return quot;Aquot;; }
}; // el punto y coma es obligatorio
CoffeeSize(int ounces){this.ounces = ounces; }
private int ounces;
public int getOunces() { return ounces; }
public String getLidCode(){
return quot;Bquot;; // el valor por defecto
}
}
73. 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 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.