0% found this document useful (0 votes)
7 views89 pages

Curso Java OCA

Uploaded by

Anacleto Agente
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
7 views89 pages

Curso Java OCA

Uploaded by

Anacleto Agente
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

ESCRIBIR NOMBRE DEL CURSO

Curso certificación OCA


Julio 2018

José María González


consultas@[Link]

w w w .avan te .e s avan te @ avan te .e s 902 117 902

[Link] avante@[Link] 902 117 902


ESCRIBIR NOMBRE DEL CURSO

ÍNDICE

• Introducción
• Tema 1 Construyendo código Java
• Tema 2 Operadores y sentencias
• Tema 3 APIs de JAVA
• Tema 4 Métodos y encapsulación
• Tema 5 Diseño de clases
• Tema 6 Excepciones

2
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

INTRODUCCIÓN

• Presentación
§ Presentación del profesor
§ Presentación de los alumnos
o Experiencia con JAVA
o Expectativas sobre el curso
o Expectativas sobre la certificación
• Sobre el curso
§ Presentación del temario
§ Dinámica de teoría y ejercicios
§ Descanso

3
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

INTRODUCCIÓN

• Sobre la certificación
• Presentación del learning path de JAVA
• Associate level certification (Java SE)
• Professional level certification (Java SE)

4
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

INTRODUCCIÓN

• Sobre el examen
§ Metodología de estudios
§ Crear un plan de estudio
§ Leer el libro
§ Escribir aplicaciones de prueba con eclipse
§ Resolver los ejercicios de prueba y comprobar las respuestas
§ Crear flashcards y probarse
§ Hacer varios exámenes de prueba en condiciones reales.
• Consejos generales
§ Identifica tus puntos débiles
§ Responde a todas las preguntas siempre
§ Controla el tiempo (minuto y medio por pregunta). Calcula después de varias preguntas para ver el progreso.
o 120 Minutes Remaining: Start exam.
o 90 Minutes Remaining: One third of the exam finished.
o 60 Minutes Remaining: Two thirds of the exam finished.
o 30 Minutes Remaining: First pass of all questions complete.
o 5 Minutes Remaining: Finished reviewing all questions marked for “Review.” Select answers to all questions left blank.
§ 65% de 70 preguntas para pasar, recomendamos un 80% en ejercicios para pasar
§ Ponerse un objetivo de fechas (al menos mes y medio para estudiar)
§ Escoger bien el idioma del examen

5
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

INTRODUCCIÓN

• Consideraciones para el examen


• Missing package and import statements: If sample code do not include
package or import statements, and the question does not explicitly refer
to these missing statements, then assume that all sample code is in the
same package, or import statements exist to support them.
• No file or directory path names for classes: If a question does not state the
file names or directory locations of classes, then assume one of the
following, whichever will enable the code to compile and run:
§ All classes are in one file
§ Each class is contained in a separate file, and all files are in one directory

6
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

INTRODUCCIÓN

• Unintended line breaks: Sample code might have unintended line breaks.
If you see a line of code that looks like it has wrapped, and this creates a
situation where the wrapping is significant (for example, a quoted String
literal has wrapped), assume that the wrapping is an extension of the
same line, and the line does not contain a hard carriage return that would
cause a compilation failure.
• Code fragments: A code fragment is a small section of source code that is
presented without its context. Assume that all necessary supporting code
exists and that the supporting environment fully supports the correct
compilation and execution of the code shown and its omitted
environment.
• Descriptive comments: Take descriptive comments, such as "setter and
getters go here," at face value. Assume that correct code exists, compiles,
and runs successfully to create the described effect.

7
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

INTRODUCCIÓN

• Creación del acceso de cuenta para los exámenes


• Objetivos del examen OCA
• Temario del libro y del curso
§ Construyendo código Java
§ Operadores y sentencias
§ APIs de JAVA
§ Métodos y encapsulación
§ Diseño de clases
§ Excepciones

8
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 1 CONSTRUYENDO CÓDIGO JAVA

• OCA exam objectives covered in this chapter:


• Java Basics
§ Define the scope of variables
§ Define the structure of a Java class
§ Create executable Java applications with a main method; run a Java program
from the command line; including console output
§ Import other Java packages to make them accessible in your code
§ Compare and contrast the features and components of Java such as platform
independence, object orientation, encapsulation, etc.
• Working with Java Data Types
§ Declare and initialize variables (including casting or primitive types)
§ Differentiate between object reference variables and primitive variables
§ Know how to read or write to object fields
§ Explain an Object's Lifecycle (creation, “dereference by reassignment” and
garbage collection

9
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 1 CONSTRUYENDO CÓDIGO JAVA

• Como es una clase en Java.


• Atributos (Fields) y métodos.
• Comentarios
• Un fichero java debe contener una clase con el mismo nombre. Solo puede
contener una clase pública pero puede tener otras clases.
• El método main
• Orden de elementos en una clase package->import->class
• Como funcionan los imports. Un import de clase explícito tiene precedencia
sobre uno de *. Los conflictos se resuelven en tiempo de compilación.
• ¡Ojo al formateo del código en el exámen! ¡Ojo a la numeración del código!
• Inicializadores de instancia
• Orden de inicialización (de momento) -> atributos e inicializadores de instancia
en el orden que aparezcan -> el constructor

10
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 1 CONSTRUYENDO CÓDIGO JAVA

• Tipos primitivos

11
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 1 CONSTRUYENDO CÓDIGO JAVA

- Un int va de -128 a 127.


- Octales binarios y hexadecimales

- Java permite usar _ para visualizar mejor las cifras

12
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 1 CONSTRUYENDO CÓDIGO JAVA

• Referencias a objetos (interesa siempre representarlos)

13
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 1 CONSTRUYENDO CÓDIGO JAVA

• Declaración múltiple de variables: ¡Siempre del mismo tipo! Se le asigna


un valor a cada una por separado.
• Identificadores: Solo hay tres reglas
§ Empiezan por una letra, $ o _
§ Después pueden contener números
§ No se pueden usar palabras reservadas

14
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 1 CONSTRUYENDO CÓDIGO JAVA

15
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 1 CONSTRUYENDO CÓDIGO JAVA

• Inicialización de variables locales. Vigilar si no compilan por no estar


inicializadas y vigilar el scope.
• Inicialización de variables de instancia y de clase (o estáticas).

16
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 1 CONSTRUYENDO CÓDIGO JAVA

• Orden de elementos en las clases

17
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 1 CONSTRUYENDO CÓDIGO JAVA

• El colector de basura.
§ Cuando el objeto no tiene referencias apuntándole
§ Cuando todas las referencias están fuera del scope de ejecución.
§ [Link]() pide a la JVM que borre los elementos en memoria que no se
usan. No se garantiza que se ejecute.
§ protected void finalize(){} se ejecuta si se ejecuta el garbage collector. Si el gc
falla por cualquier motivo no se ejecuta de nuevo
• Beneficios de Java (entra en el exámen)
§ Orientado a objetos
§ Permite encapsulación
§ Independiente de la plataforma “Write once, run everywhere.”
§ Robusto gracias a su gestión de la memoria
§ Simple
§ Seguro al ejecutarse en una máquina virtual que crea un sandbox de
ejecución.

18
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 2 OPERADORES Y SENTENCIAS

• Using Operators and Decision Constructs


§ Use Java operators; including parentheses to override operator precedence
§ Create if and if/else and ternary constructs
§ Use a switch statement
• Using Loop Constructs
§ Create and use while loops
§ Create and use for loops including the enhanced for loop
§ Create and use do/while loops
§ Compare loop constructs
§ Use break and continue

19
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 2 OPERADORES Y SENTENCIAS

• Operadores de Java
y precedencia

20
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 2 OPERADORES Y SENTENCIAS

• Operadores
§ Binarios: requieren dos operandos
§ Unarios: requieren solo uno
• Promoción de primitivas: las primitivas al operar entre ellas pueden ser
promocionar a valores mayores. Estas son las reglas
§ Si dos valores tienen datos diferentes java promociona al mayor
§ Si uno es un entero y el otro un real java promociona el entero a real
§ Los valores pequeños (byte, short y char) se promocionan a int siempre que se
use algún operador binario (+, *, -, …) incluso si ninguno es int.
§ El valor resultante al que se le asigna debe tener el mismo valor que el
promocionado.

21
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 2 OPERADORES Y SENTENCIAS

• Operadores unarios

22
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 2 OPERADORES Y SENTENCIAS

• Casting de primitivos. Cuidado con expresiones que no tienen casting y


pueden promocionar

• Con los operadores compuestos también debemos vigilar

• Operadores lógicos (también tenemos los de circuito corto && y || )

23
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 2 OPERADORES Y SENTENCIAS

• Operadores de igualdad (== y !=). Hay tres escenarios a contemplar


§ Hay promoción para tipos primitivos 4 == 4.0 es true ya que el 4 se
promociona a double.
§ Comparación de booleanos
§ Comparación de objetos, incluidos null y valores de String
• If statement. Es importante tener cuidado con {}

24
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 2 OPERADORES Y SENTENCIAS

• Operador ternario booleanExpression ? expression1 : expression2 (solo


evalúa la expresión que se ejecuta)
• Switch statement

25
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 2 OPERADORES Y SENTENCIAS

• Switch ahora soporta más tipos pero solo podemos usar valores resueltos
en tiempo de compilación o finales para las comparaciones en los case.

26
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 2 OPERADORES Y SENTENCIAS

• Un ejemplo de switch

27
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 2 OPERADORES Y SENTENCIAS

• While statement

• do-while statement

28
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 2 OPERADORES Y SENTENCIAS

• for statement

29
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 2 OPERADORES Y SENTENCIAS

• Para el examen debemos tener varias cosas en cuenta para un bucle for
§ Se pueden crear bucles infinitos for( ; ; )
§ Se pueden añadir múltiples términos. for(long y = 0, z = 4; x < 5 && y < 10;
x++, y++)
§ Debemos tener cuidado de no redeclarar variables en la inicialización.
§ Hay que vigilar tipos incompatibles en la inicialización.
§ Hay que vigilar no usar variables declaradas en el for fuera del mismo.
• for each statement. Es una adaptación del for para arrays y objetos que
implementen la interfaz Collection

30
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 2 OPERADORES Y SENTENCIAS

• Para trabajar con colecciones en el for each solo tenemos que conocer List
y ArrayList.
• Para el examen es importante estar familiarizado con los bucles anidados
con varios elementos
§ break
§ continue
§ se pueden crear etiquetas para los bucles que pueden ser referenciadas por
break y continue

31
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 2 OPERADORES Y SENTENCIAS

32
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 2 OPERADORES Y SENTENCIAS

33
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 3 APIS DE JAVA

• Using Operators and Decision Constructs


§ Test equality between Strings and other objects using == and equals()
• Creating and Using Arrays
§ Declare, instantiate, initialize and use a one-dimensional array
§ Declare, instantiate, initialize and use a multi-dimensional array
• Working with Selected classes from the Java API
§ Creating and manipulating Strings
§ Manipulate data using the StringBuilder class and its methods
§ Declare and use an ArrayList of a given type
§ Create and manipulate calendar data using classes from
[Link], [Link], [Link],
[Link], [Link]
• Working with Java Data Types
§ Develop code that uses wrapper classes such as Boolean, Double, and Integer.

34
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 3 APIS DE JAVA

• Es muy importante para el examen estar familiarizado con el manejo de


cadenas String.
• Para la concatenación es muy importante el orden siempre aplicado de
izquierda a derecha.
• Es importante tener claro la inmutabilidad de las cadenas. Una vez que
generamos una cadena esta no cambia gracias al pool de strings, aunque
solo las que se generan con de manera String cadena = “una cadena”;

35
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 3 APIS DE JAVA

• Métodos importantes de String para el exámen:


§ length()
§ charAt()
§ indexOf()
§ substring(), también con parámetros. int substring(int beginIndex, int
endIndex) el end index no se incluye y puede llegar a la longitud total de la
cadena. Es importante vigilar los StringIndexOutOfBoundsException
§ toLowerCase() y toUpperCase()
§ equals() y equalsIgnoreCase()
§ startsWith() y endsWith()
§ contains()
§ String replace(char oldChar, char newChar) y String replace(CharSequence
oldChar, CharSequence newChar)
§ trim(), no solo quita los espacios del inicio y final de la cadena, también
elimina los \t (tabulador), \n (nueva línea) y \r (retorno de carro)

36
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 3 APIS DE JAVA

• StringBuilder nos permite crear cadenas mutables fácilmente. Debemos


conocer los siguientes métodos
§ charAt(), indexOf(), length(), y substring() funcionan igual que los de String
§ append()
§ insert(int offset, String str) offset es a partir de cuando queremos insertar

§ StringBuilder delete(int start, int end) y StringBuilder deleteCharAt(int index) el end


es no se incluye en el borrado.
§ reverse()
§ toString()

37
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 3 APIS DE JAVA

• StringBuffer hace lo mismo pero es un poco más lento porque es seguro


en hilos de ejecución, aunque esto no es necesario saberlo. Normalmente
sólo habrá preguntas sobre StringBuilder.
• Es importante tener muy claro como funcionan los operadores de
igualdad. Sobre todo para las cadenas que se generan en el pool de
strings. Es importante recordar que debe usarse .equals() en nuestro
código.
• Creación de arrays

38
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 3 APIS DE JAVA

• También podemos crear arrays especificando los elementos


§ int[] numbers2 = new int[] {42, 55, 99};
§ int[] numbers2 = {42, 55, 99};
• Java deja indicar que es un array delante o detrás del nombre de la variable.
• Para la declaración múltiple int ids[], types; crea dos arrays.
• Al hacer un toString() de un array tenemos resultados de este tipo
[[Link];@160bc7c0
• Podemos imprimir con [Link](miArray) pero no entra en el
exámen
• Los arrays atributos de una clase se inicializan a null, es importante vigilar en
el exámen.
• También se pueden utilizar en castings (String[]) aunque debemos tener
cuidado de no almacenar objetos que no concuerden con el array.
• Hay que vigilar los ArrayIndexOutOfBoundsException siempre que veamos
arrays

39
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 3 APIS DE JAVA

• [Link](miArray); permite ordenar un array.


• [Link](miArray, elementoABuscar) permite hacer una
búsqueda en un array. Para ello debe estar previamente ordenado. El array
que no esté ordenado dará un resultado imprevisible. Si el elemento no
está en el array indica en que posición debería insertarse.
• Los varargs son tratados como arrays public static void main(String… args)
// varargs
• Hay que dominar para el exámen los arrays multidimensionales
§ int[][] vars1; // 2D array
§ int vars2 [][]; // 2D array
§ int[] vars3[]; // 2D array
§ int[] vars4 [], space [][]; // a 2D AND a 3D array
§ String [][] rectangle = new String[3][2];
§ int[][] differentSize = {{1, 4}, {3}, {9,8,7}};

40
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 3 APIS DE JAVA

• ArrayList también es muy popular en el exámen.


§ ArrayList list1 = new ArrayList();
§ ArrayList<String> list4 = new ArrayList<String>();
§ Es importante recordar que ArrayList implementa List, pero que no podemos
instanciar List directamente.
§ add()
§ remove()
§ set()
§ isEmpty() y size()
§ clear()
§ contains()
§ equals()

41
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 3 APIS DE JAVA

• Wrappers

42
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 3 APIS DE JAVA

• Conversiones a string

43
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 3 APIS DE JAVA

• Java permite convertir cualquier valor primitivo en su wrapper


automáticamente. Es un proceso llamado autoboxing. Debemos vigilar con
los NullPointerException ya que es válido la asignación de nulos a un
wrapper pero al intentar hacer el autoboxing fallará en tiempo de
ejecución.
• Conversiones entre listas y arrays
§ Object[] objectArray = [Link]();
§ También podemos especificar el tipo al que convierte String[] stringArray =
[Link](new String[0]);
§ También hay un método a la inversa en [Link]. List<String> list =
[Link](array);
• Ordenación de ArrayList a través de un método [Link](miLista);

44
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 3 APIS DE JAVA

• Java 8 incluye un nuevo manejo de fechas más natural. El uso de Date ya


no entra en el exámen. Para el exámen debemos conocer el paquete
[Link].*
§ Hay tres tipos de creación de fechas
o LocalDate: solo una fecha, sin hora y sin timezone
o LocalTime: solo una hora, sin fecha y sin timezone
o LocalDateTime: fecha y hora sin timezone.
§ Debemos conocer que el formato de fecha en EEUU es mm/dd/yyyy
§ Veamos una comparativa

45
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 3 APIS DE JAVA

46
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 3 APIS DE JAVA

• Veamos que métodos podemos llamar en cada clase

47
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 3 APIS DE JAVA

• Y por último como


manipular fechas

48
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 3 APIS DE JAVA

• También podemos trabajar con periodos de tiempo con la clase Period.


Hay que vigilar las concatenaciones

• Se pueden crear de diversas maneras

49
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 3 APIS DE JAVA

• Period es para períodos a partir de un día. Para menores escalas de


tiempo tenemos Duration que es para días o menos.
• Period no puede usarse con LocalTime (recordad que solo indicaba una
hora) y si encadenamos periodos solo se tiene en cuenta el último.
• Para formatear fechas disponemos de DateTimeFormatter de los que solo
necesitamos conocer los SHORT y MEDIUM

50
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 3 APIS DE JAVA

• También podemos generar uno personalizado DateTimeFormatter f =


[Link]("MMMM dd, yyyy, hh:mm");
• Para parsear fechas debemos conocer el método parse

51
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 4 MÉTODOS Y ENCAPSULACIÓN

• Working with Methods and Encapsulation


§ Create methods with arguments and return values; including overloaded
methods
§ Apply the static keyword to methods and fields
§ Create and overload constructors; include impact on default constructors
§ Apply access modifiers
§ Apply encapsulation principles to a class
§ Determine the effect upon object references and primitive values when they
are passed into methods that change the values
• Working with Selected classes from the Java API
§ Write a simple Lambda expression that consumes a Lambda Predicate
expression

52
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 4 MÉTODOS Y ENCAPSULACIÓN

• Elementos de un método

53
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 4 MÉTODOS Y ENCAPSULACIÓN

54
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 4 MÉTODOS Y ENCAPSULACIÓN

• Java tiene 4 modificadores de acceso:


§ public: el método puede ser llamado desde cualquier clase
§ private: el método solo se puede llamar desde la misma clase
§ protected: el método solo se puede llamar desde clases del mismo paquete o
subclases
§ default (sin modificador): el método solo se puede llamar desde clases del
mismo paquete
• Otros especificadores opcionales
§ static para métodos de clases
§ abstract Usado cuando no se provee un cuerpo del método
§ final usado cuando no se puede extender en subclases
§ synchronized No es necesario para el exámen.
§ native no es necesario para el exámen
§ Strictfp no es necesario para el exámen

55
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 4 MÉTODOS Y ENCAPSULACIÓN

• Es muy importante el orden de los especificadores. Sobre todo tener en


cuenta que el tipo de retorno debe ir junto al nombre del método y es
obligatorio.
• El nombre del método sigue la misma convención que los nombres de
clases aunque suelen empezar por minúscula por convención
• Los parámetros aparecen separados por coma así como la lista de
excepciones.
• Los varargs deben estar al final y solo puede haber uno.

56
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 4 MÉTODOS Y ENCAPSULACIÓN

• Revisemos los modificadores de acceso

57
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 4 MÉTODOS Y ENCAPSULACIÓN

• Los métodos estáticos no requieren una instancia para utilizarlos. Es


importante vigilar que antes de dar una excepción por nulo que la variable
no sea estática.
• Hay que vigilar también que los métodos estáticos no pueden llamar a
métodos no estáticos sin una instancia de por medio
• Debemos tener esta tabla clara y validar siempre cuando haya métodos
estáticos

58
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 4 MÉTODOS Y ENCAPSULACIÓN

• Para declarar constantes podemos usar esta nomenclatura private static


final int NUM_BUCKETS = 45;
• Podemos usar import estáticos para hacer referencias a métodos para
usarlos sin el identificador de clase. Por ejemplo import static
[Link]; o import static [Link].*; Para los estáticos
sólo podemos referenciar métodos, no podemos hacer referencia a la
clase o al * de paquete.
• Java pasa parámetros por valor. Se hace una copia del valor y se pasa. Con
primitivas y objetos inmutables nunca cambia el valor.

59
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 4 MÉTODOS Y ENCAPSULACIÓN

• Con una referencia cambia un poco la cosa

60
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 4 MÉTODOS Y ENCAPSULACIÓN

• La sobreescritura de métodos la llevamos viendo desde el principio del


curso. Hay algunas reglas que conviene recordar
§ Hay que vigilar arrays y varargs ya que Java trata los varargs como un array
§ Los parámetros pueden variar
§ Java no compila con los mismos parámetros y distinto tipo retornado
§ Tampoco es válido si tienen los mismos parámetros y uno es estático y el otro
no.
§ Al hacer autoboxing java es capaz de determinar si es un primitivo o un
wrapper o si encaja en una clase de la que herede.
§ Con las primitivas también se hace promoción cuando sea necesario
§ Un pequeño resumen

61
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 4 MÉTODOS Y ENCAPSULACIÓN

62
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 4 MÉTODOS Y ENCAPSULACIÓN

• Los constructores deben llamarse exactamente igual que la clase y no devuelven tipo
alguno. Se instancian con new. Debemos vigilar que no intenten pasar un método como
constructor y o bien devuelva algo o no tenga exactamente el nombre de la clase.
• Es importante recordar que por defecto se llama a super()
• Los constructores tienen modificadores de acceso. ¿Para qué podríamos necesitar un
constructor privado?
• También se pueden sobrecargar los constructores con reglas similares a los métodos.
• Con sobrecarga podemos usar this() para referenciar a otros constructores.
• El orden de inicializaciones se expande un poco
§ Si hay una super clase se inicializa primero (una llamada a super por ejemplo)
§ Variables e inicializadores estáticos en el orden que aparezcan.
§ Variables e inicializadores de instancia en el orden que aparezcan.
§ El constructor.
• La encapsulación es un mecanismo de Java muy importante para el desarrollo y una de
las características principales de Java. Hay unas convenciones de nombres a seguir

63
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 4 MÉTODOS Y ENCAPSULACIÓN

64
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 4 MÉTODOS Y ENCAPSULACIÓN

• Hemos hablado de clases inmutables. Para crearlas simplemente no


generamos setters para que solo se puedan definir en la construcción.
• Las lambdas son un añadido de la versión 8 que permite utilizar
programación funcional en Java. Para la OCA solamente debemos saber
eso y como utilizarlas de una manera sencilla.
§ La idea de programación funcional es poder pasar a funciones bloques de
código en lugar de tan solo variables o constantes. Esto permite reducir
nuestro código evitandonos construir métodos repetitivos que solo tienen
pequeñas diferencias.
§ Para usar lambdas usaremos la siguiente notación sencilla y completa

65
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 4 MÉTODOS Y ENCAPSULACIÓN

66
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 4 MÉTODOS Y ENCAPSULACIÓN

• Veamos algunos ejemplos de uso

• Veamos algunas mal formadas

• si nos fijamos el primero no tiene paréntesis alrededor de las variables, el


segundo no tienen return y el tercero le falta el punto y coma.

67
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 4 MÉTODOS Y ENCAPSULACIÓN

• Las lambdas tienen un método Predicate contra el que probar las


expresiones funcionales. Realmente para el exámen no debemos tener un
conocimiento muy profundo, pero básicamente el predicado nos permite
chequear nuestra expresión.

68
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 5 DISEÑO DE CLASES

• Working with Inheritance


• Describe inheritance and its benefits
• Develop code that demonstrates the use of polymorphism; including
overriding and object type versus reference type
• Determine when casting is necessary
• Use super and this to access objects and constructors
• Use abstract classes and interfaces

69
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 5 DISEÑO DE CLASES

• Java permite que unas clases hereden de otras. Pero no permite la


herencia múltiple. Todas las clases extienden de Object.

70
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 5 DISEÑO DE CLASES

• Al extender una clase permitimos acceder a sus métodos (dependiendo de los


modificadores) y hacerlos suyos.
• Podemos acceder a constructores de la clase padre con super() (debe ser la
primera línea dentro de un constructor) la llamada super() es implícita a todos
los constructores. Debemos vigilar en el exámen para detectar errores de
compilación.
• Veamos unas reglas
§ La primera llamada en un constructor debe ser a otro constructor usando la
llamada this() o al constructor padre con super()
§ super() no se puede usar después de la primera llamada.
§ Si no hay ningún super() en el constructor Java meterá un super() sin argumentos
de manera implícita.
§ Si el padre no tiene super() sin argumentos fallará si no se definen otros
constructores.
§ Si el padre no tiene un constructor sin argumentos los constructores hijos tendrán
que hacer una llamada explícita a otro super() con argumentos.

71
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 5 DISEÑO DE CLASES

• Hay que vigilar los modificadores de acceso a la hora de usar los métodos
del padre y vigilar los paquetes en los que se declaran.
• Podemos acceder a los atributos y métodos del padre a través de
[Link] o [Link]()
• Una pregunta de exámen suele sobre la sobreescritura de métodos.
• Para hacer la sobreescritura hay algunas reglas:
§ Debe tener la misma estructura que el padre
§ Tiene que tener el mismo o mayor acceso que el padre
§ No puede lanzar una excepción chequeada más amplia que el padre o nueva.
§ Si el hijo devuelve algún valor debe ser del mismo tipo o una subclase del
mismo.

72
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 5 DISEÑO DE CLASES

• Los métodos privados no se sobreescriben. Hay que vigilar que no


intenten despistar con falsas sobreescrituras que no cumplan las reglas
anteriores.
• Una clase hija puede ocultar de manera similar a la sobreescritura un
método de la clase padre cuando ambos son estáticos. Para ello debe
seguir estas reglas:
§ Debe tener la misma estructura que el padre
§ Tiene que tener el mismo o mayor acceso que el padre
§ No puede lanzar una excepción chequeada más amplia que el padre o nueva.
§ Si el hijo devuelve algún valor debe ser del mismo tipo o una subclase del
mismo.
§ El método debe ser static al igual que el padre.

73
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 5 DISEÑO DE CLASES

• La distinción entre sobreescribir y ocultar es que el sobreescribir


reemplaza la clase padre la ocultación solo lo hace en el hijo. En los
métodos sobreescritos el padre solo se llama de manera explícita. En el
caso del oculto el padre siempre se ejecuta si se hace una llamada.
Veamos dos ejemplos:

74
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 5 DISEÑO DE CLASES

• Los métodos marcados con final no pueden ser sobreescritos.


• En cuanto a las variables solo se pueden ocultar, no se pueden
sobreescribir.
• Las clases abstractas tienen la capacidad de implementar código que luego
usarán las clases que las extiendan y a su vez definir métodos sin
implementación que deben ser definidos por una clase hija
• Para definir una clase abstracta solo debemos indicar abstract antes de
class.
• Los métodos sin implementación deben estar marcados como abstract. Es
importante vigilar esto en el exámen. Obviamente no pueden ser privados
ni finales.
• Las clases abstractas no se pueden instanciar, aunque si pueden ser
referencias de clases hijas (al igual que los interfaces)

75
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 5 DISEÑO DE CLASES

• Como reglas generales para las clases abstractas tendremos:


§ No se pueden instanciar directamente
§ Se pueden definir con cualquier número (incluso ninguno) de métodos
abstractos o no.
§ no pueden ser marcadas como privadas o finales
§ las clases abstractas que extiendan otra clase abstractas heredan todos sus
métodos y atributos pero no tienen que implementarlas si no quieren
§ La primera clase no abstracta debe implementar todos los métodos
abstractos.
• Para los métodos abstractos debemos tener en cuenta lo siguiente:
§ Solo pueden ser definidos en clases abstractas
§ No pueden ser privados o finales
§ No pueden proveer ninguna implementación
§ Implementar un método abstracto sigue las mismas reglas que al extenderlo
en cuanto a nombre, parámetro y visibilidad.

76
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 5 DISEÑO DE CLASES

• Las interfaces nos ayudan a dar a una clase diversos comportamientos

77
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 5 DISEÑO DE CLASES

• Estas son las reglas básicas de los interfaces:


§ No se pueden instanciar directamente.
§ No necesita declarar ningún método.
§ No puede ser marcado como final
§ Todos lo interfaces por defecto son públicos y abstractos. Si no se especifica es
implícito.
§ Todos los métodos, menos los default, por defecto son públicos y abstractos. Si no
se especifica es implícito.
• Una excepción importante de la herencia son los interfaces. Pueden extender
más de una interfaz.
• No hay que implementar ningún método obviamente. La primera clase que
implemente la interfaz debe implementar tanto los de ella como las interfaces
padre.
• Las clases no pueden extender interfaces ni las interfaces extender clases
• No pasa nada si dos interfaces tienen el mismo método definido igual. Al
implementarlo una clase cumpliría con ambos. La única excepción es si el tipo
a devolver es distinto.

78
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 5 DISEÑO DE CLASES

• Las variables en una interfaz son siempre públicas, estáticas y finales. El


valor debe definirse en la declaración.
• Una novedad en Java 8 son los métodos default en los interfaces. Supone
una pequeña variación en el concepto de los interfaces ya que permiten la
implementación de código en los mismos.

• Estas son las reglas para métodos default


§ Sólo pueden declararse en interfaces. No en clases o clases abstractas.
§ Debe llevar la palabra default. Si la lleva debe implementar un body {}
§ No es necesario que sea estático o final y se puede sobreescribir por la clase
que implemente la interfaz.
§ Debe ser público

79
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 5 DISEÑO DE CLASES

• Si hay dos métodos estáticos iguales la clase que los implemente falla al
compilar (no es igual que con los métodos normales)
• Java 8 también da cobertura para métodos estáticos dentro de los interfaces.
§ Serán públicos siempre.
§ Deben usar el nombre de la interfaz para referenciarlo.
• El polimorfismo permite a un objeto comportarse de manera diferente según
la referencia que lo implemente. Para las preguntas relacionadas con el
polimorfismo es muy importante dibujar bien la relación para entenderlo.
• El casting nos ayuda a encajar objetos en referencias siguiendo estas reglas
§ De una subclase a una clase padre no hace falta casting
§ De una superclase a una clase hija requiere un cast explícito.
§ Si no están relacionadas el compilador lanzará un error.
• Para el examen debemos saber que un método virtual es aquel que no se sabe
cual se ejecutará hasta que se ejecuta. En teoría todos son métodos virtuales
menos los estáticos y/o finales y/o privados.

80
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 5 DISEÑO DE CLASES

• Al igual que las referencias los parámetros de los métodos también


pueden ser polimórficos.

81
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 6 EXCEPCIONES

• 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)

82
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 6 EXCEPCIONES

• Las excepciones nos ayudan a controlar los posibles errores en nuestro


código.
• Es fundamental tener el esquema de excepciones muy claro para el
examen

83
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 6 EXCEPCIONES

• Para el exámen debemos tener muy claro la siguiente regla. Si extiende de


Exception pero no de RuntimeException es una excepción chequeada y
debe tratarse o declararse siempre.
• Veamos todos los tipos de excepciones

84
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 6 EXCEPCIONES

• Las excepciones se usan de varias maneras, con un bloque try-catch-finally


o con throws.
• Un try debe tener o un catch o un finally (al menos es lo único que
debemos saber para el exámen).
• finally siempre debe ser el último en la lista. Finally siempre se ejecuta
salvo que haya un [Link] que corta la ejecución del programa
independientemente del finally.
• Puede haber varios catch para tratar diversas excepciones. Debemos tener
en cuenta que deben ser de más específicos a más generales.

85
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 6 EXCEPCIONES

• Lo más complejo del examen en cuanto a excepciones es la posibilidad de lanzar una


varias excepciones en cadena. Veamos un ejemplo

• El resultado es before catch finally done. La línea 36 lanza un NullPointerException, ya


no imprimirá la línea 37. La línea 38 recoge la excepción e imprime catch. Lanza una
excepción que se recogerá más tarde pero primero imprime el finally. Al haber
concluido el bloque interno se recoge la excepción en la línea 45 e imprime done. No
veremos preguntas más complejas que esta en el examen.

86
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 6 EXCEPCIONES

• Debemos estar familiarizados con los tipos más comunes de excepciones.


§ Runtime Exceptions
o ArithmeticException Thrown by the JVM when code attempts to divide by zero
o ArrayIndexOutOfBoundsException Thrown by the JVM when code uses an illegal index to access an array
o ClassCastException Thrown by the JVM when an attempt is made to cast an exception to a subclass of which it
is not an instance
o IllegalArgumentException Thrown by the programmer to indicate that a method has been passed an illegal or
inappropriate argument
o NullPointerException Thrown by the JVM when there is a null reference where an object is required
o NumberFormatException Thrown by the programmer when an attempt is made to convert a string to a numeric
type but the string doesn't have an appropriate format
§ Checked Exceptions
o FileNotFoundException Thrown programmatically when code tries to reference a file that does not exist
o IOException Thrown programmatically when there's a problem reading or writing a file
§ Errors
o ExceptionInInitializerError Thrown by the JVM when a static initializer throws an exception and doesn't handle
it
o StackOverflowError Thrown by the JVM when a method calls itself too many times (this is called infinite
recursion because the method typically calls itself without end)
o NoClassDefFoundError Thrown by the JVM when a class that the code uses is available at compile time but not
runtime

87
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

TEMA 6 EXCEPCIONES

• Cuando un método puede lanzar una excepción chequeada tenemos dos


opciones, declararla o gestionarla (handle)

• Las excepciones como cualquier otra clase se pueden extender, aunque


para ser considerada una excepción debe extender de Exception.
• Hay tres maneras de imprimir una excepción

88
[Link] avante@[Link] 902 117 902
ESCRIBIR NOMBRE DEL CURSO

¡GRACIAS Y BUENA SUERTE!

89
[Link] avante@[Link] 902 117 902

You might also like