Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Java Programmer I
1Z0-808
Sebastián Araya R. Oracle Certified Professional
Java SE 8 Programmer I
2
Contenidos
3
Contenidos a Evaluar
▰ Java Basics
4
Contenidos a Evaluar
6
Contenidos a Evaluar
7
Contenidos a Evaluar
8
Contenidos a Evaluar
10
Contenidos a Evaluar
▰ Handling Exceptions
▻ Differentiate among checked exceptions, unchecked exceptions,
and Errors
▻ Create a try-catch block and determine how exceptions alter normal
program flow
▻ Describe the advantages of Exception handling
▻ Create and invoke a method that throws an exception
▻ Recognize common exception classes (such as
NullPointerException, ArithmeticException,
ArrayIndexOutOfBoundsException, ClassCastException)
11
Contenidos a Evaluar
12
Sobre el Examen
13
CONDICIONES
▰ 70 preguntas
15
RECOMENDACIONES: Modo de Resolución
16
RECOMENDACIONES: Modo de Resolución
17
RECOMENDACIONES: Preguntas
19
Planificación
2. OBJECT ORIENTATION
• Describe Encapsulation
• Implement Inheritance
• Use Polymorphism
• Use Overriding and Overloading
• Understand Casting
• Use Interfaces
• Understand and Use Return Types
• Develop Constructors
21
• Use static members
Planificación
3. ASSIGNMENTS
• Use Class Members
• Understand Primitive Casting
• Understand Variable Scope
• Differentiate Between Primitive Variables and Reference Variables
• Determine the Effects of Passing Variables into Methods
• Understand Object Lifecycle and Garbage Collection
22
Planificación
4. OPERATORS
• Using Java Operators
• Use Parentheses to Override Operator Precedence
• Test Equality Between Strings and Other Objects
• Using == and equals()
23
Planificación
State (instance variables) Each object (instance of a class) will have its own
unique set of instance variables as defined in the class.
Collectively, the values assigned to an object's instance
variables make up the object's state.
Behavior (methods)
When a programmer creates a class, she creates
methods for that class. Methods are where the class's
logic is stored and where the real work gets done. They
27
are where algorithms get executed and data gets
manipulated.
Conceptos fundamentales de orientación a objetos
Concepto Definición
Inheritance
Allows code defined in one class or interface
to be reused in other classes. In Java, you
can define a general (more abstract)
superclass and then extend it with more
specific subclasses.
28
Características y beneficios de Java
Característica Descripcion
Object Oriented OO design offers a natural way to think about how the
components in a system should be constructed and how
they should interact.
29
Características y beneficios de Java
Característica Descripción
cross-platform execution the Java code you write can run on many platforms
30
Características y beneficios de Java
Característica Descripción
Distributed computing The Java API provides several ways to simplify tasks
related to distributed computing. One such example is
serialization, a process in which a Java object is converted
to a portable form
31
Declaración de Variables
32
Nombres de variables (identificadores ) válidos y no validos
int _a;
int $c;
int :b;
int -d;
int .f;
int ______2_w;
int _$;
int this_is_a_very_detailed_name_for_an_identifier;
int e#;
int 7g;
33
int assert;
Palabras Reservadas
34
Sobre convenciones
El examen siempre intentará enredarlo con estructuras de código mal identadas, como la
siguiente:
class Batman{
private name=“”;
public void setName(String _name){
if( _name.length>0) System.out.println(“Batman”);
System.out.println(“I’m Batmaan”);
static public void main(String a[]){
new Batman().setName(“”);
}
}
35
Sobre convenciones
Clases e Interfaces: La primera letra en mayúscula y la primera letra de cada inicial de las
palabras que la componen en mayúscula
Constantes : todas las letras en mayúscula , cada palabra separada por guión bajo
36
Declaraciones de Archivos Fuente (Source Files)
Cuando se define un fichero fuente, existen reglas que se deben respetar respecto al orden
de las clases, los imports y los package:
Cat.java Cat.java
Cat.java
import java.time.LocalDate; import java.util.ArrayList;
package animals;
class Dog{} class Dog{}
import java.*;
class Bulldog extends Dog{} import java.util.function.*;
private class Cat{}
class Bulldog extends Dog{}
class Dog{}
38
Los comandos javac y java
▰ javac -help
▰ javac -version Foo.java Bar.java
▰ javac -version -help Foo.java
39
Los comandos javac y java
40
El método main
Sin embargo las siguientes construcciones también son válidas!! (y son las que salen en el
examen):
El método main también puede ser sobrecargado, sin embargo el único que tiene
superpoderes es el que recibe un arreglo de String, es público y estático
42
Formas de referenciar una Clase
Es posible crear clases que tengan el nombre de clases ya existentes en la API. Es decir,
perfectamente puedo hacer esto (y de seguro lo harán en el examen):
44
Imports estáticos (static imports)
Los static imports permiten utilizar los miembros estáticos existentes de una clase como si se trataran de
miembros existentes en la clase de origen:
Teniendo la siguiente clase, ambos resultados son equivalentes:
Antes Después
public class TestStatic { import static java.lang.System.out;
public static void main(String[] args) { import static java.lang.Integer.*;
System.out.println(Integer.MAX_VALUE); public class TestStaticImport {
System.out.println(Integer.toHexString(42)); public static void main(String[] args) {
out.println(MAX_VALUE);
} out.println(toHexString(42));
} }
}
45
Imports estáticos (static imports)
46
Modificadores
48
Modificadores de Acceso: default
Una clase con acceso default es visible solo por las clases que se encuentran dentro del
mismo package. Por lo cual:
package games;
class Player{ }
package sports;
import games.Player;
public class Football{
private Player ronaldo;
}
No compila!!!
49
Modificadores de Acceso: public
Una clase con acceso público es visible por todas las clases de todos los package (incluso las
sin package).
package games;
public class Player{ }
package sports;
Import games.Player;
public class Football{
private Player ronaldo;
}
50
Class Non – Access Modifiers
▰ final
▰ abstract
▰ strictfp
En java no existen las clases private!!!!
51
Class Non – Access Modifier : final
Adicionalmente a public y default (que son modificadores de acceso) una clase también puede
ser final, esto implica que la clase no es heredable (subclassed).
Al desarrollar: en casos muy puntuales se debería marcar una clase como final
En el exámen: Ojo con códigos como el siguiente
Una clase abstracta no puede ser instanciada, su único objetivo es ser parte de una herencia.
Una clase abstracta puede tener definición de métodos y solo declaración de métodos:
Las interfaces son estructuras 100% abstractas que permiten definir un contrato que una
clase que la implemente debe cumplir. Una interfaz puede incluir declaraciones de métodos,
constantes, métodos estáticos y métodos default
interface Bounceable {
public abstract void setBounceFactor(int bf);
public default void bounce(){
System.out.println(“Bouncing”);
}
}
A pesar de que el ejemplo lo incluye, no es necesario agregar public abstract a los métodos
de una interfaz. Por defecto lo son!!! 54
Interfaces: Reglas
▰ Todos los métodos de una interfaz son public y abstract a menos que sean default o static.
▰ Todas las variables en una interfaz son public static final . Una interfaz solo contiene
constantes
▰ Las interfaces pueden tener métodos static
▰ Los métodos de una interfaz no pueden ser marcados final, strictfp o native.
▰ Una interfaz puede extender a otra, en ese caso se usa extends NO IMPLEMENTS
▰ Una interfaz NO PUEDE HEREDAR NADA QUE NO SEA OTRA INTERFAZ
▰ Las interfaces son por defecto abstract, no es necesario usar la keyword
55
Interfaces: Métodos Default
Reglas:
▰ Los métodos default son definidos con la keyword default
▰ La keyword default puede ser usada solo en interfaces, no en clases (ni en clases abstractas)
▰ Los métodos default son públicos por definición
▰ Los métodos default NO pueden ser marcados private,protected, static, final ni abstract
56
Interfaces: Métodos Default
interface Motorizable{
Reglas:
interface Doctor{
int salary = 100000;
static void makeSurgery(){
System.out.println(“Working”);
}
}
class DoctorSon implements Doctor{
public void work(){
this.makeSurgery();
}
}
59
Interfaces: Métodos estáticos y default
interface Doctor{
int salary = 100000;
static void makeSurgery(){
System.out.println(“Working with salary ” + Doctor.salary);
}
}
class DoctorSon implements Doctor{
public void work(){
Doctor.makeSurgery();
}
}
60
Interfaces: Métodos estáticos y default
interface Doctor{
int salary = 100000;
default void makeSurgery(){
System.out.println(“Working with salary ” + Doctor.salary);
}
}
class DoctorSon implements Doctor{
public void makeSurgery(){
System.out.println(“Working free”);
}
}
61
Ejercicios
interface Doctor{
int salary = 100000;
void makeSurgery();
}
62
Ejercicios
interface Doctor{
int salary = 100000;
void makeSurgery();
}
interface Doctor{
int salary = 100000;
default void makeSurgery(){}
}
Interface PublicDoctor extends Doctor{
void sleep();
}
Interface PublicDoctor{
public default void sleep(){}
public void makeSurgery();
}
65
Ejercicios
66
Ejercicios
67
Ejercicios
import java.util.List;
68
Class Members:Modifiers
Los miembros (atributos y métodos) de una clase pueden utilizar los 4 modificadores de acceso
existentes:
▰ public : el miembro puede ser accedido desde cualquier clase de cualquier package (mientras
tenga una instancia de la clase)
▰ private: puede ser accedido solo dentro de la clase y no desde clases hijas
▰ protected: puede ser accedido desde dentro de la clase y desde las clases hijas que
extienden la clase original (herencia) o desde el mismo package
▰ default: solo puede ser accedido si la clase que está accediendo a el, está dentro del mismo
package
69
Ejercicios
class Grandpa{
protected int getYears(){ return 100;}
}
class Son extends Grandpa{
public int getYears(){return 60;}
}
class Family{
class Grandpa{
protected int getYears(){ return 100;}
}
class Son extends Grandpa{
int getYears(){return 60;}
}
class Family{
72
Métodos con Lista variable de argumentos (var-args)
Desde la versión 7 Java permite definir métodos que reciben una cantidad variable de
argumentos.
Reglas:
73
Métodos con Lista variable de argumentos (var-args)
class Test{
class A{
A(){
}
}
Reglas:
76
Declaración de Variables
77
Declaración de Referencias
Reglas:
• Pueden usar cualquiera de los 4 niveles de acceso
• Pueden ser marcadas final
• Pueden ser marcadas transient
• NO PUEDEN ser marcadas abstractas
• NO PUEDEN ser marcadas synchronized
• NO PUEDEN ser marcadas strictfp
• NO PUEDEN ser marcadas native
• NO PUEDEN ser marcadas static (bueno, si pero dejan de ser variables de
instancia)
78
Modificadores en variables locales y métodos
79
Declaración de Referencias
Reglas:
80
Arreglos
Declaración de un arreglo:
int[] foo;
int foo[];
String[][] bar;
String[] bar [];
81
Variables final
82
Variables transient
Cuando una variable de instancia es marcada transient quiere decir que ella no
es serializada (cuando se serializa el objeto que la contiene).
83
Variables volatile
84
Variables estáticas y métodos estáticos
• Métodos
• Variables
• Initialization blocks
• Constructores
• Clases
• Interfaces
• Variables locales 85
Enums**
Permiten generar valores constantes que pueden ser reutilizados con el fin de evitar bugs. Comúnmente se utilizan con el fin de
definir categorías:
Después, al utilizarlos, se comportan como el equivalente a crear instancias y son tratados como tipos:
CoffeeSize cs = CoffeeSize.BIG;
Los enum pueden ser definidos a nivel de archivo (fuera de una clase) o como miembro de una clase (al igual que un atributo):
class Coffee2 {
enum CoffeeSize {BIG, HUGE, OVERWHELMING }
CoffeeSize size;
}
86
Enums**
enum CoffeeSize {
BIG(8), HUGE(10), OVERWHELMING(16);
CoffeeSize(int ounces) { this.ounces = ounces; }
private int ounces;
public int getOunces() { return ounces; }
}
87
Enums**: Reglas
88