Manejo Exception parte1 - Contenido educativo
Ajuste de pantallaEl ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:
Vale, voy a grabar, entonces si habláis, dais el consentimiento para ver, para estar grabados, ¿vale?
00:00:00
Hoy vamos a ver manejo de distracciones, ¿vale?
00:00:07
Hasta ahora, de vez en cuando, nuestro programa ha hecho cosas raras, ¿vale?
00:00:11
Normalmente nuestros programas funcionan y llegan hasta el final y hacen lo que tienen que hacer
00:00:17
pero de vez en cuando el programa explota
00:00:23
y de vez en cuando sale una serie de mensajes en rojo en la consola
00:00:27
donde dice que ha habido una excepción, ¿vale?
00:00:33
Típicamente son la NullPointerException que hemos visto nosotros
00:00:36
y otra excepción que hemos visto la ReindexOutOfBoundsException, ¿vale?
00:00:40
Estas son las dos excepciones que grosso modo hemos visto
00:00:46
A lo mejor alguno de vosotros ha tenido la suerte de ver otras excepciones raras
00:00:49
pero hasta ahora no sabíamos bien qué era, ¿vale?
00:00:53
Hoy vamos a entender un poquito mejor qué es una excepción
00:00:58
y después vamos a ver cómo podemos manejar estas excepciones
00:01:03
cómo evitamos que el programa explote cuando explota
00:01:09
y sobre todo cómo podemos hacer nuestros propios mensajes de errores
00:01:14
digamos así, para que nuestro programa en situaciones de dificultad
00:01:19
pueda avisar a quien está llamando nuestros métodos
00:01:25
que algo malo ha pasado y eventualmente recuperarnos de un posible error
00:01:30
¿Vale?
00:01:37
¿Qué es una excepción? ¿Vale?
00:01:38
Es un error, es un fallo del programa, ¿vale?
00:01:40
que pero se verifica en tiempo de ejecución
00:01:43
¿Vale?
00:01:50
Hasta ahora nosotros hemos visto, hemos hablado de programaciones, cosas así
00:01:51
y deberíais haber entendido que hay dos momentos en nuestros ejercicios
00:01:57
un momento es cuando vosotros estáis escribiendo el código allí poniendo sintaxis
00:02:05
y cosas por el estilo
00:02:12
y luego hay otro momento en que pensáis de haber hecho un buen trabajo
00:02:13
y le dais al botón verde para arrancar el programa y lo ejecutáis, ¿vale?
00:02:17
Hay dos grandes tipos de, podríamos decir tres, pongamos dos
00:02:22
grandes tipos de errores, ¿vale?
00:02:28
El primero son los errores a tiempo de compilación, ¿vale?
00:02:31
Estos errores son los que os da Java cuando vosotros intentáis arrancar
00:02:35
y el programa ni arranca y os dice, ay mira, no lo puedo compilar, ¿vale?
00:02:39
Los errores a tiempo de compilación suelen ser principalmente errores sintácticos, ¿vale?
00:02:45
Si vosotros en vez de int x igual a 3, habéis escrito int igual a 3
00:02:53
se os marca y allí hay un error
00:02:58
ese es un error a tiempo de compilación porque si intentáis compilar os sale un error
00:03:01
diciendo, ay mira, no puedo compilar porque aquí hay un error
00:03:06
aquí la sintaxis no es correcta
00:03:09
después de int me espero un nombre, tú no lo has puesto, has puesto un igual
00:03:11
y por lo tanto no funciona
00:03:17
Estos son errores sencillos, digamos así, son errores que hasta la máquina puede entender
00:03:18
y entonces te puede prevenir y decir, ay mira, antes de que tú sigas adelante
00:03:27
que sepas que aquí hay un error, si yo lanzo este programa no puede funcionar
00:03:32
Error a tiempo de compilación, ¿vale?
00:03:35
Cuando vosotros habéis resuelto todos los errores que se pueden encontrar a tiempo de compilación
00:03:39
entonces no tenéis marcado ningún error en vuestro Java, lo podéis arrancar
00:03:44
y eso no garantiza que vuestro programa funcione, ¿vale?
00:03:47
Pueden todavía ocurrir fallos de dos tipos, ¿vale?
00:03:51
Podríamos decir, salgan de muchos, pero pongámoslos en dos tipos
00:03:56
Uno son las excepciones, ¿vale?
00:04:00
Las excepciones son estos errores que no son a tiempo de compilación
00:04:02
son a tiempo de producción, o sea, he lanzado el programa
00:04:07
y llega un momento en que el programa hace alguna operación que no puede hacer
00:04:10
que es un error, que es un fallo, que, por ejemplo, lo que hemos visto
00:04:22
por ejemplo, intento llamar un método, acceder a un valor, a un atributo
00:04:27
de un objeto que no ha sido instanciado y por lo tanto es nul
00:04:33
cuando yo llego allí, tengo esta referencia, esta referencia va a ser nul
00:04:38
e intento acceder a unos trozos de memoria de esta referencia que es nul
00:04:41
no puedo, entonces, ¿es un error sintáctico?
00:04:45
No, porque yo he dicho, y x punto activa método uno, ¿vale?
00:04:49
Eso sintácticamente es perfecto, pero a la hora de ejecución
00:04:54
cuando he llegado a ejecutarlo, no tenía un objeto detrás de esta referencia
00:04:58
y por lo tanto, error, y este error hace saltar una ejecución de tipo nul pointer exception
00:05:03
o yo me pongo a recorrer un array, empiezo a posición cero, posición uno, posición dos
00:05:11
y llega un momento en que llega a la posición treinta seis
00:05:17
pero mi array tenía solo treinta cinco posiciones
00:05:20
y entonces al acceder a una posición que no está en mi array
00:05:23
¿podía yo al nivel de sintaxis saberlo?
00:05:26
Pues no, ¿vale?
00:05:30
No lo sé cuánto es grande un array a tiempo de compilación
00:05:32
¿será la ejecución que a lo mejor lo hace más grande o más pequeño?
00:05:36
No lo sé
00:05:38
Pero a tiempo de ejecución, cuando intento acceder a una celda que no está en mi array
00:05:39
entonces a una porción de memoria que no pertenece a mi array
00:05:44
pues ahí explota también y hace otro tipo de excepción, otro tipo de fallo
00:05:47
que es la array index out of bind exception
00:05:52
y así como con muchos, ¿vale?
00:05:55
Para completar, antes de seguir con las excepciones
00:05:59
el tercer tipo de errores que podrías averiguar son los errores difíciles de verdad
00:06:02
que son los errores semánticos
00:06:08
o sea, yo quería hacer, calcular la área del cuadrado
00:06:11
y en vez de lado por lado he puesto lado más lado
00:06:15
eso funciona perfectamente pero no hace lo que tú querías hacer
00:06:19
y eso es lo que vosotros de verdad tenéis que saber manejar
00:06:25
¿vale?
00:06:30
Es decir, los sintácticos lo hace el eclipse
00:06:31
¿vale?
00:06:34
Estos errores aquí de funcionamiento a nivel de excepciones
00:06:35
pues se manejarán las excepciones cuando ocurran
00:06:40
yo sabré cuando puede...
00:06:43
sé que cuando accedo a un array y puede haber un array index out of bound
00:06:44
pues tendré que tenerlo en mente
00:06:48
pero el problema es que si mi programa no hace, no resuelve el problema que tenga que resolver
00:06:50
pues allí es el problema serio
00:06:57
¿vale?
00:06:59
Si yo estoy haciendo un sistema de cuentas bancarias
00:07:00
y pongo errores semánticos de que a cada vez que hago una transferencia
00:07:04
en vez de sumar o restar, dependiendo de si pillo o saco
00:07:07
suma siempre, pues eso es un error
00:07:11
¿vale?
00:07:13
y eso no hay nadie que me lo diga
00:07:14
no hay ni excepciones, ni mecanismos de Java
00:07:16
eso lo tengo que saber yo
00:07:19
¿vale?
00:07:21
y saber que el algoritmo está mal hecho
00:07:22
¿sí?
00:07:24
vale
00:07:26
cuando pasa un error serio
00:07:30
no estamos hablando entonces ni de errores semánticos ni de errores sintácticos
00:07:33
estamos hablando de los errores de fallos a tiempo de ejecución
00:07:36
pues lo más probable es que el programa llegue allí
00:07:40
enfrente a este fallo
00:07:46
y como no sabe qué hacer con este fallo
00:07:48
porque dice accede a la posición 35 de un arreo y de 30 posiciones
00:07:51
¿y qué hago ahora?
00:07:55
como no puede hacerlo, lo más normal es que el programa se detenga
00:07:57
¿vale?
00:08:01
lo que hago es bloqueo el programa
00:08:02
aquí se ha acabado
00:08:04
y te doy un mensaje de error
00:08:05
que intenta explicar el fallo
00:08:07
¿vale?
00:08:09
cuanto mejor está hecha la expresión que salta
00:08:10
más es...
00:08:13
tiene significado el mensaje que me dan
00:08:15
y por lo tanto entiendo
00:08:18
yo podría decir
00:08:20
error, error en el array
00:08:21
tú dices
00:08:24
sí, pero ¿qué error es?
00:08:25
pues a lo mejor he escrito mal
00:08:26
he escrito un string cuando tenía que poner un int
00:08:28
¿qué error es?
00:08:31
o podría poner
00:08:32
error en acceso a una posición no aceptable del array
00:08:33
tú dices
00:08:40
vale, esto ya es más concreto
00:08:41
pero aún así
00:08:44
¿qué posición he intentado acceder?
00:08:45
¿vale?
00:08:46
o te puedo dar un mensaje
00:08:47
error en acceso a la posición 35 del array
00:08:48
entonces ya sabes que has accedido a la posición 35
00:08:52
que es un error
00:08:55
cuanto más el mensaje está definido
00:08:56
mejor para quien tiene que resolver
00:09:00
o intentar resolver ese mensaje
00:09:02
díselo tú
00:09:11
que si no lo grabo
00:09:12
vale
00:09:17
Java nos proporciona un mecanismo
00:09:18
para controlar estas situaciones
00:09:21
¿vale?
00:09:23
y la idea es que
00:09:24
yo puedo decidir como programador
00:09:26
qué hacer con estas situaciones
00:09:28
¿explota mi programa?
00:09:29
¿lo dejo explotar?
00:09:31
es una posibilidad
00:09:33
es una posibilidad
00:09:34
¿vale?
00:09:35
es una posibilidad de accidente peligrosa
00:09:36
en el sentido que
00:09:38
si lo dejo explotar
00:09:40
y es una cosa que está en producción
00:09:41
y se bloquea
00:09:42
pues alguien tendrá que reiniciarlo
00:09:43
o mirar qué ha pasado
00:09:45
¿vale?
00:09:46
y entonces podría ser que
00:09:47
si es un programita que estoy haciendo para mí
00:09:48
¿qué más da?
00:09:50
si es un programa que
00:09:51
hace parte de un sistema
00:09:53
y ahora el sistema no puede utilizar ese servicio
00:09:54
porque se ha bloqueado
00:09:56
pues puede ser un problema más
00:09:57
lo que intentamos hacer
00:09:59
es intentar recuperarse
00:10:01
de un error
00:10:03
o sea yo hacer
00:10:04
a la posición famosa
00:10:05
35 de este array
00:10:06
que no existe
00:10:07
pues intentar
00:10:08
pillar este error
00:10:09
y decir
00:10:10
oye mira no
00:10:11
ha habido un error
00:10:12
has intentado acceder ahí
00:10:13
pues
00:10:14
caos
00:10:15
pero
00:10:16
reempezamos
00:10:17
reinicializamos
00:10:18
volvamos al principio
00:10:19
añadamos objetos a esta posición 36
00:10:20
no lo sé
00:10:25
lo que se puede hacer
00:10:26
para intentar
00:10:27
solucionar ese error
00:10:28
¿vale?
00:10:30
esta es un poco la idea
00:10:31
que vamos a hacer con
00:10:32
cuando estos tipos de errores
00:10:34
podemos enfrentarnos a ellos
00:10:38
asumiendo que existen
00:10:40
de dos formas
00:10:42
¿vale?
00:10:43
que impropiamente
00:10:44
llamaremos
00:10:45
pesimista y optimista
00:10:46
¿vale?
00:10:47
la forma pesimista
00:10:48
de manejar
00:10:50
estos tipos de errores
00:10:51
es pensar
00:10:52
que algo irá mal
00:10:53
¿vale?
00:10:54
entonces
00:10:55
lo que voy a hacer
00:10:56
es
00:10:57
plagar
00:10:58
mi
00:10:59
código
00:11:00
de IFS
00:11:01
intentando
00:11:02
comprobar
00:11:04
absolutamente
00:11:05
todo
00:11:06
entonces
00:11:07
me pregunto
00:11:08
si el array
00:11:09
es nul
00:11:10
pues entonces
00:11:11
haz esto
00:11:12
si el array
00:11:13
no es nul
00:11:14
pero intentas acceder
00:11:15
a una posición
00:11:16
mayor de su tamaño
00:11:17
entonces
00:11:18
haz esto
00:11:19
voy comprobando
00:11:20
absolutamente
00:11:21
todo
00:11:22
¿vale?
00:11:23
es pesimista
00:11:24
en el sentido
00:11:25
que tú
00:11:26
estás poniendo
00:11:27
un montón
00:11:28
de código
00:11:29
un montón
00:11:30
de IF
00:11:31
un montón
00:11:32
de condiciones
00:11:33
un montón
00:11:34
de comprobaciones
00:11:35
porque te esperas
00:11:36
que algo mal
00:11:37
irá
00:11:38
¿vale?
00:11:39
este mecanismo
00:11:40
aquí
00:11:41
tiene un par
00:11:42
de problemas
00:11:43
¿vale?
00:11:44
el primero
00:11:45
es que el más complejo
00:11:46
sea mi sistema
00:11:47
más difícil
00:11:48
prever
00:11:49
todos los posibles
00:11:50
fallos
00:11:51
que puedan ocurrir
00:11:52
en este sistema
00:11:53
¿vale?
00:11:54
y que cada vez
00:11:55
que yo acceda a un array
00:11:56
tenga que comprobar
00:11:57
si es nul
00:11:58
si tiene
00:11:59
si me han pedido
00:12:00
menos que cero
00:12:01
si me han pedido
00:12:02
más del máximo
00:12:03
de la longitud
00:12:04
si me han pedido
00:12:05
un ímper
00:12:06
veces un string
00:12:07
si me han pedido
00:12:08
un long
00:12:09
veces un string
00:12:10
pues
00:12:11
se complica
00:12:12
¿vale?
00:12:13
y que
00:12:14
cuando todo funciona
00:12:16
correctamente
00:12:17
estoy
00:12:18
sobrecargando
00:12:19
mi programa
00:12:20
con un montón
00:12:21
de comprobaciones
00:12:22
que me dirán
00:12:23
no no
00:12:24
tranquilo
00:12:25
está todo bien
00:12:26
pero lo estoy haciendo
00:12:27
constantemente
00:12:28
¿vale?
00:12:29
si por cada acceso
00:12:30
a mi array
00:12:31
¿vale?
00:12:32
por cada celda
00:12:33
me tengo que preguntar
00:12:34
si están nules
00:12:35
si están
00:12:36
menos que cero
00:12:37
si están
00:12:38
más de 75
00:12:39
estoy haciendo
00:12:40
tres comprobaciones
00:12:41
por cosas normales
00:12:42
y si estas tres comprobaciones
00:12:43
de un for
00:12:44
desde int i
00:12:45
igual a cero
00:12:46
hasta int menor
00:12:47
de array
00:12:48
punto lento
00:12:49
pues posiblemente
00:12:50
estoy haciendo
00:12:51
un montón
00:12:52
de comprobaciones
00:12:53
inútiles
00:12:54
porque nunca será
00:12:55
menor que cero
00:12:56
o mayor que uno
00:12:57
¿vale?
00:12:58
entonces
00:12:59
esta es una forma
00:13:00
de manejar
00:13:01
los errores
00:13:02
¿si?
00:13:03
pero
00:13:04
no necesariamente
00:13:05
es la mejor
00:13:06
se puede hacer
00:13:07
una combinación
00:13:08
o sea que
00:13:09
algunas cosas
00:13:10
si que se pueden
00:13:11
manejar
00:13:12
nosotros muchas veces
00:13:13
hemos dicho
00:13:14
mira cuando entro
00:13:15
en este objeto
00:13:16
a lo mejor
00:13:17
compruebo
00:13:18
que sea nulo
00:13:19
si esta nulo o no
00:13:20
¿vale?
00:13:21
también porque
00:13:22
no tenemos
00:13:23
nosotros
00:13:24
no tenemos
00:13:25
la posibilidad
00:13:26
de gestionarlo
00:13:27
con excepciones
00:13:28
y por lo tanto
00:13:29
tampoco podemos
00:13:30
hacer mucho
00:13:31
¿vale?
00:13:32
y si no
00:13:33
esta el enfoque
00:13:34
optimista
00:13:35
el enfoque optimista
00:13:36
dice mira
00:13:37
en un 95%
00:13:38
99%
00:13:39
de las veces
00:13:40
hay un ato
00:13:41
que harán acceso
00:13:42
a una posición
00:13:43
concreta
00:13:44
que existe
00:13:45
harán acceso
00:13:46
a un objeto
00:13:47
que si existe
00:13:48
o sea que
00:13:49
no vale la pena
00:13:50
de ponernos
00:13:51
a hacer
00:13:52
un montón de
00:13:53
y pensar
00:13:54
que algo
00:13:55
irá mal
00:13:56
porque
00:13:57
normalmente
00:13:58
las cosas
00:13:59
van bien
00:14:00
¿vale?
00:14:01
¿y que hago?
00:14:02
pues
00:14:03
pongo un
00:14:04
alerta
00:14:05
un alarma
00:14:06
que
00:14:07
la vez
00:14:08
de estas 100
00:14:09
que van mal
00:14:10
ahí constantemente
00:14:11
comprobando
00:14:12
lo que hago es
00:14:13
cuando irá mal
00:14:14
pues
00:14:15
gestionaré yo
00:14:16
el error
00:14:17
¿vale?
00:14:18
y esto se hace
00:14:19
protegiendo
00:14:20
entre comillas
00:14:21
el código
00:14:22
potencialmente
00:14:23
peligroso
00:14:24
es hablar
00:14:25
del trozo
00:14:26
de código
00:14:27
que podría
00:14:28
dar problemas
00:14:29
utilizando
00:14:30
una estructura
00:14:31
que se llama
00:14:32
try-catch
00:14:33
¿vale?
00:14:34
try-catch
00:14:35
está por
00:14:36
try
00:14:37
en el sentido
00:14:38
prueba
00:14:39
catch
00:14:40
recoge
00:14:41
pilla
00:14:42
la excepción
00:14:43
que ha explotado
00:14:44
y hace algo
00:14:45
¿vale?
00:14:48
entonces
00:14:49
a nivel sintáctico
00:14:51
sería una cosa
00:14:52
como un try
00:14:53
luego un bloque
00:14:55
este es el bloque
00:14:56
de código
00:14:57
protegido
00:14:58
el código
00:14:59
que
00:15:00
potencialmente
00:15:01
podría explotar
00:15:02
por ejemplo
00:15:03
un acceso a un array
00:15:04
por ejemplo
00:15:05
un acceso
00:15:06
a un objeto
00:15:07
que podría ser
00:15:08
null
00:15:09
o cosa por el estilo
00:15:10
¿vale?
00:15:11
y
00:15:12
después
00:15:13
de este bloque
00:15:14
protegido
00:15:15
pongo un catch
00:15:16
y
00:15:17
lo que voy a recoger
00:15:18
por ejemplo
00:15:19
una excepción
00:15:20
de tipo
00:15:21
una cosa
00:15:22
como esta aquí
00:15:23
me dice
00:15:24
que si
00:15:25
mientras estoy
00:15:26
haciendo
00:15:27
el código
00:15:28
protegido
00:15:29
en el try
00:15:30
salta una
00:15:31
cualquier excepción
00:15:32
de cualquier tipo
00:15:33
interrumpe
00:15:34
lo que
00:15:35
estás haciendo
00:15:36
en el try
00:15:37
vas a ejecutar
00:15:38
el bloque
00:15:39
que viene
00:15:40
después del catch
00:15:41
¿vale?
00:15:44
entonces
00:15:45
si yo ejecutaré
00:15:46
este bloque de aquí
00:15:47
el que está
00:15:48
detrás del catch
00:15:49
si
00:15:50
solo si
00:15:51
durante la ejecución
00:15:52
del try
00:15:53
haya ocurrido
00:15:55
una excepción
00:15:56
cualquiera
00:15:57
si yo aquí dentro
00:15:58
acero a un objeto
00:15:59
que es null
00:16:00
pues
00:16:01
ejecutaré este trozo
00:16:02
de código
00:16:03
si yo aquí dentro
00:16:04
acero a una posición
00:16:05
de un array
00:16:06
una posición
00:16:07
buena
00:16:08
pues ejecutaré
00:16:09
este trozo
00:16:10
de
00:16:11
¿vale?
00:16:12
¿y qué hago aquí?
00:16:13
pues aquí voy a hacer
00:16:14
lo que me da
00:16:15
la gang
00:16:16
¿vale?
00:16:17
por ejemplo
00:16:18
decir
00:16:19
ay mira
00:16:20
si intento deshacer
00:16:21
un objeto
00:16:22
este objeto es null
00:16:23
por lo tanto
00:16:24
salta la excepción
00:16:25
pues
00:16:26
inicializo ese objeto
00:16:27
y lo vuelvo a deshacer
00:16:28
¿vale?
00:16:29
si todo esto
00:16:30
lo pongo en un while
00:16:31
por ejemplo
00:16:32
y llego aquí
00:16:33
y se entra aquí dentro
00:16:34
y
00:16:35
se entra aquí dentro
00:16:36
y
00:16:37
se ve
00:16:38
que
00:16:39
entonces
00:16:40
ejecutando esto de aquí
00:16:41
podría
00:16:42
setar un booleano
00:16:43
a un cierto valor
00:16:44
para decir
00:16:45
oye mira
00:16:46
que cuando sale de aquí
00:16:47
comprueba este booleano
00:16:48
y si este booleano
00:16:49
es true
00:16:50
sigues adelante
00:16:51
y si este booleano
00:16:52
es false
00:16:53
vuelves a rehacerlo
00:16:54
porque algo ha ido mal
00:16:55
porque este objeto
00:16:56
no ha funcionado
00:16:57
o podría decir
00:16:58
oye mira
00:16:59
no
00:17:00
si llegas aquí
00:17:01
quiere decir
00:17:02
que ha habido un error
00:17:03
a este punto
00:17:04
lo escribo en pantalla
00:17:05
oye mira usuario
00:17:06
ha habido un error
00:17:07
no has dado
00:17:08
los parámetros correctos
00:17:09
el error
00:17:10
el programa
00:17:11
no puede continuar
00:17:12
mira el fichero
00:17:13
no se que
00:17:14
para un log
00:17:15
donde ha escrito
00:17:16
más detalladamente
00:17:17
lo que ha pasado
00:17:18
hasta luego
00:17:19
y mueres
00:17:20
¿vale?
00:17:21
o
00:17:22
podrías
00:17:23
aquí dentro
00:17:24
decirle
00:17:25
mira usuario
00:17:26
ha pasado un problema
00:17:27
que no puede recuperar
00:17:28
el programa
00:17:29
por lo tanto
00:17:30
lo que hago es
00:17:31
apagar todo
00:17:32
y reiniciar
00:17:33
el programa
00:17:34
desde cero
00:17:35
¿vale?
00:17:36
y aquí luego harás
00:17:37
todo los
00:17:38
la información
00:17:39
y la cosa
00:17:40
que tienes que hacer
00:17:41
para resetear
00:17:42
todo lo que has hecho
00:17:43
hasta ahora
00:17:44
hasta cero
00:17:45
y volver al principio
00:17:46
depende de ti
00:17:47
¿vale?
00:17:48
el concepto es que
00:17:49
esto no es una solución
00:17:50
al error
00:17:51
es un mecanismo
00:17:52
que te permite
00:17:53
de manejar el error
00:17:54
dudas
00:17:55
es un
00:17:56
pseudo if
00:17:57
a un nivel
00:17:58
abstracto
00:17:59
que te permite
00:18:00
manejar
00:18:01
el error
00:18:02
es un pseudo if
00:18:03
a un nivel
00:18:04
abstracto
00:18:05
que te dice
00:18:06
si esto no funciona
00:18:07
entonces hace esto
00:18:08
en el caso del try
00:18:09
solo
00:18:10
se activaría
00:18:11
si hay un error fatal
00:18:12
¿no?
00:18:13
no ocurriría
00:18:14
si yo ejecuto
00:18:15
el try
00:18:16
y no hay ninguna excepción
00:18:17
sigue adelante
00:18:18
se salta la parte
00:18:19
que he hecho
00:18:20
y sigue adelante
00:18:21
sin problema
00:18:22
y veo que
00:18:23
pones
00:18:24
es como que
00:18:25
inicias una variable
00:18:26
excepción
00:18:27
llamada e
00:18:28
sí
00:18:29
aquí dentro
00:18:30
excepción e
00:18:31
la idea
00:18:32
una excepción
00:18:33
la llave virtual machine
00:18:34
empaqueta
00:18:35
un
00:18:36
objeto
00:18:37
de tipo
00:18:38
excepción
00:18:39
¿vale?
00:18:40
donde dentro
00:18:41
intenta meter
00:18:42
la información
00:18:43
relevante
00:18:44
ahora lo veremos
00:18:45
de esta excepción
00:18:46
por ejemplo
00:18:47
en
00:18:48
que método
00:18:49
se estaba
00:18:50
ejecutando
00:18:51
de los que estaban aquí
00:18:52
que ha causado
00:18:53
esta excepción
00:18:54
¿vale?
00:18:55
e
00:18:56
que mensaje
00:18:57
está esta excepción
00:18:58
cuando esta excepción
00:18:59
ha explotado
00:19:00
ese mensaje
00:19:01
se ha puesto allí
00:19:02
de error
00:19:03
¿vale?
00:19:04
si tiene algo
00:19:05
de esta información
00:19:06
yo la puedo encontrar en e
00:19:07
e
00:19:08
es un objeto
00:19:09
de tipo excepción
00:19:10
que podéis ir a mirar
00:19:11
en la API
00:19:12
y ver todos los métodos
00:19:13
que tiene aquí
00:19:14
en particular
00:19:15
ahora lo veremos
00:19:16
algunos
00:19:17
aquí puedes poner
00:19:18
el mensaje de error
00:19:19
e.getMessage
00:19:20
creo que es
00:19:21
una cosa de ese estilo
00:19:22
o
00:19:23
e.getStack
00:19:24
que es
00:19:25
todas las llamadas
00:19:26
de métodos
00:19:27
que se han hecho
00:19:28
hasta llegar
00:19:29
a este error
00:19:30
este método
00:19:31
ha llamado
00:19:32
el método
00:19:33
calcularia
00:19:34
que ha llamado
00:19:35
el método
00:19:36
math.random
00:19:37
que ha llamado
00:19:38
el método
00:19:39
no se que
00:19:40
y aquí es donde ha explotado
00:19:41
¿vale?
00:19:42
para que tu puedas ver
00:19:43
de tus métodos
00:19:44
cual estaban
00:19:45
en ese momento
00:19:46
llamándose
00:19:47
uno a otro
00:19:48
y saber
00:19:49
que ha pasado
00:19:50
donde está el punto
00:19:51
en el que ha explotado
00:19:52
el programa
00:19:53
porque has hecho
00:19:54
una división
00:19:55
por cero
00:19:56
y entonces
00:19:57
te ha explotado
00:19:58
¿si?
00:19:59
tened en cuenta
00:20:00
que yo aquí estoy
00:20:01
utilizando exception
00:20:02
esta de aquí
00:20:03
sería una
00:20:04
la excepción
00:20:05
más general
00:20:06
posible
00:20:07
¿vale?
00:20:08
es la clase
00:20:09
excepción
00:20:10
más alta
00:20:11
y luego
00:20:12
a partir de aquí
00:20:13
heredarán
00:20:14
un montón
00:20:15
de otras
00:20:16
excepciones
00:20:17
como por ejemplo
00:20:18
la reindex
00:20:19
autobound
00:20:20
exception
00:20:21
la null pointer
00:20:22
exception
00:20:23
la number
00:20:24
format
00:20:25
exception
00:20:26
y otras cosas
00:20:27
porque si yo
00:20:28
lo pongo así
00:20:29
como todas
00:20:30
las que he nombrado
00:20:31
ahora
00:20:32
son excepciones
00:20:33
pillaría una
00:20:34
cualquiera de ellas
00:20:35
cualquier excepción
00:20:36
que explote
00:20:37
en el try
00:20:38
me la va a recoger
00:20:39
y ejecutaré esto
00:20:40
independientemente
00:20:41
de si es una
00:20:42
null pointer
00:20:43
exception
00:20:44
una index
00:20:45
autobound
00:20:46
una
00:20:47
bueno
00:20:48
whatever
00:20:49
exception
00:20:50
entonces
00:20:51
la idea es
00:20:52
que nos creemos
00:20:53
nuestras propias
00:20:54
excepciones
00:20:55
y las
00:20:56
sobre esta base
00:20:58
de tener este
00:20:59
mecanismo
00:21:00
ahora veremos
00:21:01
que hay
00:21:02
métodos que tú
00:21:03
puedes utilizar
00:21:04
que lanzan
00:21:05
excepciones
00:21:06
habrá métodos
00:21:07
que pueden lanzar
00:21:08
excepciones
00:21:09
pero no necesariamente
00:21:10
la tienes que controlar
00:21:11
y habrá la posibilidad
00:21:12
de crearte tus
00:21:13
propios mensajes
00:21:14
de errores
00:21:15
y tus propios
00:21:16
excepciones
00:21:17
para que si en un
00:21:18
determinado momento
00:21:19
de tu programa
00:21:20
no puedes seguir
00:21:21
adelante
00:21:22
porque tú has hecho
00:21:23
un programa
00:21:24
que accede a ficheros
00:21:25
la carpeta
00:21:26
donde ir a buscar
00:21:27
estos ficheros
00:21:28
y no puedes seguir
00:21:29
adelante
00:21:30
lanzas una excepción
00:21:31
de
00:21:32
mi excepción
00:21:33
de no tengo
00:21:34
ficheros
00:21:35
.
00:21:36
.
00:21:37
.
00:21:38
.
00:21:39
.
00:21:40
.
00:21:41
.
00:21:42
.
00:21:43
.
00:21:44
.
00:21:45
.
00:21:46
.
00:21:47
.
00:21:48
.
00:21:49
.
00:21:50
.
00:21:51
.
00:21:52
.
00:21:53
.
00:21:55
.
00:21:56
.
00:21:57
.
00:21:58
.
00:21:59
.
00:22:00
.
00:22:01
.
00:22:02
.
00:22:03
.
00:22:04
.
00:22:05
.
00:22:06
.
00:22:07
.
00:22:08
.
00:22:09
.
00:22:10
.
00:22:11
.
00:22:12
.
00:22:13
.
00:22:14
.
00:22:15
.
00:22:16
.
00:22:17
.
00:22:18
.
00:22:19
.
00:22:20
.
00:22:21
.
00:22:22
.
00:22:23
.
00:22:24
.
00:22:25
.
00:22:26
.
00:22:27
.
00:22:28
.
00:22:29
.
00:22:30
.
00:22:31
.
00:22:32
.
00:22:33
.
00:22:34
.
00:22:35
.
00:22:42
.
00:22:43
.
00:22:44
.
00:22:45
.
00:22:46
.
00:22:47
.
00:22:48
.
00:22:49
.
00:22:50
.
00:22:51
.
00:22:52
.
00:22:53
.
00:22:54
.
00:22:55
.
00:22:56
.
00:22:57
.
00:22:58
.
00:22:59
.
00:23:00
.
00:23:01
.
00:23:02
.
00:23:03
.
00:23:04
.
00:23:05
.
00:23:10
.
00:23:11
.
00:23:12
.
00:23:13
.
00:23:14
.
00:23:15
.
00:23:16
.
00:23:17
.
00:23:18
.
00:23:19
.
00:23:20
.
00:23:21
.
00:23:22
.
00:23:23
.
00:23:24
.
00:23:25
.
00:23:26
.
00:23:27
.
00:23:28
.
00:23:29
.
00:23:30
the
00:23:31
the
00:23:33
the
00:23:34
the
00:23:35
.
00:23:36
.
00:23:37
.
00:23:38
.
00:23:39
.
00:23:40
.
00:23:41
.
00:23:42
.
00:23:43
.
00:23:44
.
00:23:45
.
00:23:46
.
00:23:47
.
00:23:48
.
00:23:49
.
00:23:50
.
00:23:52
.
00:23:53
.
00:23:54
.
00:23:55
.
00:23:56
.
00:23:57
.
00:23:58
.
00:23:59
.
00:24:00
.
00:24:01
.
00:24:02
.
00:24:03
,
00:24:04
.
00:24:05
.
00:24:06
.
00:24:07
.
00:24:08
.
00:24:09
.
00:24:10
.
00:24:11
.
00:24:12
.
00:24:13
.
00:24:14
.
00:24:15
.
00:24:16
.
00:24:17
.
00:24:18
.
00:24:19
.
00:24:25
.
00:24:26
.
00:24:27
.
00:24:28
.
00:24:29
.
00:24:30
.
00:24:31
.
00:24:32
.
00:24:33
.
00:24:34
.
00:24:35
.
00:24:36
.
00:24:37
.
00:24:38
.
00:24:39
.
00:24:40
.
00:24:41
.
00:24:42
.
00:24:43
.
00:24:44
.
00:24:45
.
00:24:46
.
00:24:47
.
00:24:49
.
00:24:50
.
00:24:51
.
00:24:52
.
00:24:53
.
00:24:54
.
00:24:55
.
00:24:56
.
00:24:57
.
00:24:58
.
00:24:59
.
00:25:00
...
00:25:01
.
00:25:02
.
00:25:03
.
00:25:04
.
00:25:05
.
00:25:07
.
00:25:08
.
00:25:09
.
00:25:16
.
00:25:17
.
00:25:21
.
00:25:22
.
00:25:23
.
00:25:24
.
00:25:25
.
00:25:26
.
00:25:27
.
00:25:28
.
00:25:29
.
00:25:30
.
00:25:31
.
00:25:32
.
00:25:33
.
00:25:34
.
00:25:35
.
00:25:36
.
00:25:37
.
00:25:38
.
00:25:39
.
00:25:40
.
00:25:41
.
00:25:42
.
00:25:43
.
00:25:44
.
00:25:45
.
00:25:46
.
00:25:47
.
00:25:48
.
00:25:49
.
00:25:50
.
00:25:51
.
00:25:52
.
00:25:53
.
00:25:58
.
00:26:00
.
00:26:05
.
00:26:06
.
00:26:07
.
00:26:08
.
00:26:09
.
00:26:10
.
00:26:11
.
00:26:12
.
00:26:13
.
00:26:14
.
00:26:15
.
00:26:16
.
00:26:17
.
00:26:18
.
00:26:19
.
00:26:20
.
00:26:21
.
00:26:22
.
00:26:35
.
00:26:36
.
00:26:37
.
00:26:38
.
00:26:39
.
00:26:40
.
00:26:41
.
00:26:42
.
00:26:43
.
00:26:44
.
00:26:45
.
00:26:46
.
00:26:47
.
00:26:48
.
00:26:50
.
00:26:51
.
00:26:52
.
00:26:53
.
00:26:54
.
00:26:55
.
00:26:56
.
00:26:57
.
00:26:58
.
00:26:59
.
00:27:00
.
00:27:01
.
00:27:02
.
00:27:03
.
00:27:04
.
00:27:05
.
00:27:06
.
00:27:07
.
00:27:08
.
00:27:10
.
00:27:11
.
00:27:12
.
00:27:13
.
00:27:14
.
00:27:15
.
00:27:16
.
00:27:17
.
00:27:18
.
00:27:19
.
00:27:20
.
00:27:21
.
00:27:22
.
00:27:23
.
00:27:24
.
00:27:25
.
00:27:26
.
00:27:27
.
00:27:28
.
00:27:29
.
00:27:30
.
00:27:31
.
00:27:32
.
00:27:33
.
00:27:34
.
00:27:35
.
00:27:36
.
00:27:37
.
00:27:44
.
00:27:45
.
00:27:46
.
00:27:47
.
00:27:48
.
00:27:49
.
00:27:50
.
00:27:51
.
00:27:52
.
00:27:53
.
00:27:54
.
00:28:00
.
00:28:01
.
00:28:02
.
00:28:05
.
00:28:06
.
00:28:07
.
00:28:08
.
00:28:09
.
00:28:10
.
00:28:11
.
00:28:12
.
00:28:13
.
00:28:14
.
00:28:27
.
00:28:28
.
00:28:29
.
00:28:30
.
00:28:31
.
00:28:32
.
00:28:33
.
00:28:34
.
00:28:35
.
00:28:36
.
00:28:37
.
00:28:38
.
00:28:39
.
00:28:40
.
00:28:41
.
00:28:42
.
00:28:43
.
00:28:46
.
00:28:47
.
00:28:48
.
00:28:49
.
00:28:50
.
00:28:51
.
00:29:10
.
00:29:11
.
00:29:17
.
00:29:18
.
00:29:30
.
00:29:34
.
00:29:35
.
00:29:39
.
00:29:41
.
00:29:44
.
00:29:45
,
00:29:47
.
00:29:54
.
00:29:59
.
00:30:03
.
00:30:05
.
00:30:09
.
00:30:13
.
00:30:15
.
00:30:17
.
00:30:19
.
00:30:21
.
00:30:25
.
00:30:27
.
00:30:30
.
00:30:32
.
00:30:35
.
00:30:37
.
00:30:39
.
00:30:41
.
00:30:43
.
00:30:45
.
00:30:47
.
00:30:49
.
00:30:51
.
00:30:53
.
00:30:55
.
00:30:57
.
00:30:59
.
00:31:01
.
00:31:02
.
00:31:04
.
00:31:06
.
00:31:08
.
00:31:10
.
00:31:12
.
00:31:14
.
00:31:16
.
00:31:18
.
00:31:20
.
00:31:22
.
00:31:24
.
00:31:26
.
00:31:28
.
00:31:29
.
00:31:31
.
00:31:33
.
00:31:35
.
00:31:37
.
00:31:39
.
00:31:41
.
00:31:43
.
00:31:45
.
00:31:47
.
00:31:49
.
00:31:51
.
00:31:53
.
00:31:55
.
00:31:56
.
00:31:58
.
00:32:00
.
00:32:02
.
00:32:04
.
00:32:06
.
00:32:08
.
00:32:10
.
00:32:12
.
00:32:14
.
00:32:16
.
00:32:18
.
00:32:20
.
00:32:22
.
00:32:23
.
00:32:25
.
00:32:28
.
00:32:30
.
00:32:32
.
00:32:34
.
00:32:36
.
00:32:38
.
00:32:40
.
00:32:42
.
00:32:44
.
00:32:46
.
00:32:48
.
00:32:50
.
00:32:51
.
00:32:53
.
00:32:55
.
00:32:57
.
00:32:59
.
00:33:01
.
00:33:03
.
00:33:05
.
00:33:07
.
00:33:09
.
00:33:11
.
00:33:13
.
00:33:15
.
00:33:17
.
00:33:18
.
00:33:20
.
00:33:22
.
00:33:24
.
00:33:26
.
00:33:28
.
00:33:30
.
00:33:32
.
00:33:34
.
00:33:36
.
00:33:38
.
00:33:40
.
00:33:42
.
00:33:44
.
00:33:45
.
00:33:47
.
00:33:49
.
00:33:51
.
00:33:53
.
00:33:55
.
00:33:57
.
00:33:59
.
00:34:01
.
00:34:03
.
00:34:05
.
00:34:07
.
00:34:09
.
00:34:11
.
00:34:12
.
00:34:14
.
00:34:16
.
00:34:18
.
00:34:20
.
00:34:22
.
00:34:24
.
00:34:26
.
00:34:28
.
00:34:30
.
00:34:32
.
00:34:34
.
00:34:36
.
00:34:38
.
00:34:39
.
00:34:41
.
00:34:43
.
00:34:45
.
00:34:47
.
00:34:49
.
00:34:51
.
00:34:53
.
00:34:55
.
00:34:57
.
00:34:59
.
00:35:01
.
00:35:03
.
00:35:05
.
00:35:06
.
00:35:08
.
00:35:10
.
00:35:12
.
00:35:14
.
00:35:16
.
00:35:18
.
00:35:20
.
00:35:22
.
00:35:24
.
00:35:26
.
00:35:28
.
00:35:30
.
00:35:32
.
00:35:33
.
00:35:35
.
00:35:37
.
00:35:39
.
00:35:41
.
00:35:43
.
00:35:45
.
00:35:47
.
00:35:49
.
00:35:51
.
00:35:53
.
00:35:55
.
00:35:57
.
00:35:59
.
00:36:00
.
00:36:02
.
00:36:05
.
00:36:07
.
00:36:09
.
00:36:11
.
00:36:13
.
00:36:15
.
00:36:17
.
00:36:19
.
00:36:21
.
00:36:23
.
00:36:25
.
00:36:27
.
00:36:28
.
00:36:30
.
00:36:32
.
00:36:34
.
00:36:36
.
00:36:38
.
00:36:40
.
00:36:42
.
00:36:44
.
00:36:46
.
00:36:48
.
00:36:50
.
00:36:52
.
00:36:54
.
00:36:55
.
00:36:57
.
00:36:59
.
00:37:01
.
00:37:03
.
00:37:05
.
00:37:07
.
00:37:09
.
00:37:11
.
00:37:13
.
00:37:15
.
00:37:17
.
00:37:19
.
00:37:21
.
00:37:22
.
00:37:24
.
00:37:26
.
00:37:28
.
00:37:30
.
00:37:32
.
00:37:34
.
00:37:36
.
00:37:38
.
00:37:40
.
00:37:42
.
00:37:44
.
00:37:46
.
00:37:48
.
00:37:49
.
00:37:51
.
00:37:53
.
00:37:55
.
00:37:57
.
00:37:59
.
00:38:01
.
00:38:03
.
00:38:05
.
00:38:07
.
00:38:09
.
00:38:11
.
00:38:13
.
00:38:15
.
00:38:16
.
00:38:18
.
00:38:20
.
00:38:22
.
00:38:24
.
00:38:26
.
00:38:28
.
00:38:30
.
00:38:32
.
00:38:34
.
00:38:36
.
00:38:38
.
00:38:40
.
00:38:42
.
00:38:43
.
00:38:45
.
00:38:47
.
00:38:49
.
00:38:51
.
00:38:53
.
00:38:55
.
00:38:57
.
00:38:59
.
00:39:01
.
00:39:03
.
00:39:05
.
00:39:07
.
00:39:09
.
00:39:10
.
00:39:12
.
00:39:14
.
00:39:16
.
00:39:18
.
00:39:20
.
00:39:22
.
00:39:24
.
00:39:26
.
00:39:28
.
00:39:30
.
00:39:32
.
00:39:34
.
00:39:36
.
00:39:37
.
00:39:39
.
00:39:41
.
00:39:43
.
00:39:45
.
00:39:47
.
00:39:49
.
00:39:51
.
00:39:53
.
00:39:55
.
00:39:57
.
00:39:59
.
00:40:01
.
00:40:03
.
00:40:04
.
00:40:06
.
00:40:08
.
00:40:10
.
00:40:12
.
00:40:14
.
00:40:16
.
00:40:18
.
00:40:20
.
00:40:22
.
00:40:24
.
00:40:26
.
00:40:28
.
00:40:30
.
00:40:31
.
00:40:33
.
00:40:35
.
00:40:37
.
00:40:39
.
00:40:41
.
00:40:43
.
00:40:45
.
00:40:47
.
00:40:49
.
00:40:51
.
00:40:53
.
00:40:55
.
00:40:57
.
00:40:58
.
00:41:00
.
00:41:03
.
00:41:05
.
00:41:07
.
00:41:09
.
00:41:11
.
00:41:13
.
00:41:15
.
00:41:17
.
00:41:19
.
00:41:21
.
00:41:23
.
00:41:25
.
00:41:26
.
00:41:28
.
00:41:30
.
00:41:32
.
00:41:34
.
00:41:36
.
00:41:38
.
00:41:40
.
00:41:42
.
00:41:44
.
00:41:46
.
00:41:48
.
00:41:50
.
00:41:52
.
00:41:53
.
00:41:55
.
00:41:57
.
00:41:59
.
00:42:01
.
00:42:03
.
00:42:05
.
00:42:07
.
00:42:09
.
00:42:11
.
00:42:13
.
00:42:15
.
00:42:17
.
00:42:19
.
00:42:20
.
00:42:22
.
00:42:24
.
00:42:26
.
00:42:28
.
00:42:30
.
00:42:32
.
00:42:34
.
00:42:36
.
00:42:38
.
00:42:40
.
00:42:42
.
00:42:44
.
00:42:46
.
00:42:47
.
00:42:49
.
00:42:51
.
00:42:53
.
00:42:55
.
00:42:57
.
00:42:59
.
00:43:01
.
00:43:03
.
00:43:05
.
00:43:07
.
00:43:09
.
00:43:11
.
00:43:13
.
00:43:14
.
00:43:16
.
00:43:18
.
00:43:20
.
00:43:22
.
00:43:24
.
00:43:26
.
00:43:28
.
00:43:30
.
00:43:32
.
00:43:34
.
00:43:36
.
00:43:38
.
00:43:40
.
00:43:41
.
00:43:43
.
00:43:45
.
00:43:47
.
00:43:49
.
00:43:51
.
00:43:53
.
00:43:55
.
00:43:57
.
00:43:59
.
00:44:01
.
00:44:03
.
00:44:05
.
00:44:07
.
00:44:08
.
00:44:10
.
00:44:12
.
00:44:14
.
00:44:16
.
00:44:18
.
00:44:20
.
00:44:22
.
00:44:24
.
00:44:26
.
00:44:28
.
00:44:30
.
00:44:32
.
00:44:34
.
00:44:35
.
00:44:37
.
00:44:39
.
00:44:41
.
00:44:43
.
00:44:45
.
00:44:47
.
00:44:49
.
00:44:51
.
00:44:53
.
00:44:55
.
00:44:57
.
00:44:59
.
00:45:01
.
00:45:02
.
00:45:04
.
00:45:06
.
00:45:08
.
00:45:10
.
00:45:12
.
00:45:14
.
00:45:16
.
00:45:18
.
00:45:20
.
00:45:22
.
00:45:24
.
00:45:26
.
00:45:28
.
00:45:29
.
00:45:31
.
00:45:33
.
00:45:35
.
00:45:37
.
00:45:39
.
00:45:41
.
00:45:43
.
00:45:45
.
00:45:47
.
00:45:49
.
00:45:51
.
00:45:53
.
00:45:55
.
00:45:56
.
00:45:58
.
00:46:00
.
00:46:02
.
00:46:04
.
00:46:06
.
00:46:08
.
00:46:10
.
00:46:12
.
00:46:14
.
00:46:16
.
00:46:18
.
00:46:20
.
00:46:22
- Autor/es:
- Stefano chiesa
- Subido por:
- Stefano C.
- Licencia:
- Reconocimiento - No comercial
- Visualizaciones:
- 10
- Fecha:
- 21 de febrero de 2023 - 12:07
- Visibilidad:
- Clave
- Centro:
- IES ROSA CHACEL
- Duración:
- 46′ 17″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1280x720 píxeles
- Tamaño:
- 387.12 MBytes