Saltar navegación

20260311 Exception_6 - Contenido educativo

Ajuste de pantalla

El ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:

Subido el 17 de marzo de 2026 por Raquel G.

2 visualizaciones

Descargar la transcripción

tan estupenda 00:00:00
vale, pues venga 00:00:01
vámonos dentro de la clase 00:00:04
que no dentro de ningún método 00:00:05
no, dentro de la clase 00:00:07
es decir, estoy fuera de cualquier 00:00:09
método, pero dentro de la clase 00:00:11
también, efectivamente 00:00:13
podría aquí hacer un 00:00:19
vale, si queréis lo hacemos como una clase anónima 00:00:20
eh, si 00:00:23
claro, pues vamos a ver 00:00:25
como una clase anónima 00:00:27
sería throw new 00:00:28
Exception 00:00:31
Y ahora aquí 00:00:36
Throw new exception 00:00:39
Y dentro de exception 00:00:43
Podríamos hacerle un constructor 00:00:45
Public exception 00:00:46
Ah bueno no claro 00:00:50
Es que el constructor no podríamos 00:00:53
Si necesito 00:00:55
O sí, podríamos hacer 00:00:58
Super.set 00:01:04
Message 00:01:05
A ver si me deja 00:01:09
Para poner el mensajito 00:01:11
Pero vamos, no tendría por qué ponérselo si no quiero 00:01:17
El mensajito 00:01:19
Número 00:01:21
De alumnos 00:01:23
No válido 00:01:25
Vale 00:01:27
no me deja ponerlo ahí 00:01:30
yo creo que me debería, ¿no? 00:01:50
una 00:01:52
exception y la declaro 00:01:52
aquí, ah bueno, no, claro, es que estoy en 00:01:56
no, no 00:01:58
a ver 00:01:58
yo lo que quiero es, no, esto no lo puedo 00:02:02
hacer aquí dentro, lógicamente 00:02:06
Lo que quieres hacer 00:02:07
Un constructor 00:02:09
Vale, es que no sé cómo hacerle un constructor 00:02:10
Para pasarle 00:02:26
Bueno, siempre podríamos dejarla así 00:02:27
Vale 00:02:29
Así siempre podríamos hacerlo 00:02:30
Ahora podemos mirar 00:02:33
Con esto ya estoy creando un objeto 00:02:34
Lo que pasa es que no tiene nombre 00:02:37
Al no tener nombre 00:02:39
Luego en el catch, ¿qué pasa? 00:02:41
Claro, aquí no es el mejor contexto 00:02:43
Hacerla anónima, porque precisamente lo que queremos es el nombre 00:02:45
Para luego capturarla 00:02:47
Vale, aquí no sería el mejor concepto 00:02:48
Claro, el mejor sitio para hacerla anónima 00:02:51
Nada, nada, nada, olvídate, olvídate 00:02:53
No hemos hecho nada, ¿vale? 00:02:56
No hemos hecho nada 00:02:58
Vale, pues entonces vamos a hacer una clase interna 00:02:58
Aquí 00:03:02
Vale, pues venga 00:03:03
Vamos a 00:03:18
Que herede de Runtime Exception 00:03:21
Para no darle tanto bombo 00:03:25
Aquí está mi clase 00:03:27
A ver, claro, no se ve bien 00:03:31
Porque os habéis emperrado en que esté en negro 00:03:36
Ya, pero no lo puedo cambiar, ¿no? 00:03:38
¿Lo veis? 00:03:47
¿Lo cambia a blanquito? 00:03:49
Cualquier cosa menos cambiar a blanco 00:03:53
¿Se ve? 00:03:55
Vale 00:04:00
pues fijaos, esta es una clase 00:04:01
interna 00:04:03
está dentro de la otra 00:04:05
al nivel de cualquier otro método, dentro de la otra 00:04:11
entonces yo puedo 00:04:14
poner una clase dentro de otra 00:04:16
y es una clase más 00:04:17
con sus propiedades, sus métodos 00:04:22
bueno, esta en particular solo va a tener un 00:04:25
constructor, que es a partir del 00:04:27
cual le paso yo el mensajito 00:04:29
¿has visto ya a Mila que han liado por decir que 00:04:31
hagamos el ejercicio? 00:04:40
Pues es que, claro, me puede la pasión y al final... 00:04:42
¿Cómo que si lo he guardado? 00:04:49
Que si lo he guardado, está aquí arriba. 00:04:57
El número de alumnos es negativo. 00:05:00
Punto y coma. 00:05:10
Vale, una clase interna, es decir, una clase dentro de otra, 00:05:14
es una clase más con sus propiedades 00:05:17
sus métodos, lo que yo quiera 00:05:19
es una clase más y cuando esto se 00:05:20
precompila, nosotros 00:05:22
veremos en el sistema 00:05:24
operativo, podríamos ver 00:05:27
que se ha generado un número 00:05:28
de alumnos negativo exceptio en punto 00:05:31
clas, igual que se generó el main 00:05:32
punto clas, es una clase más 00:05:34
es una clase más 00:05:36
la pregunta es, ¿tiene alguna 00:05:37
implicación que esté declarada como clase 00:05:41
intea respecto como clase aparte? ¿tiene alguna? 00:05:43
sí, sí tiene alguna 00:05:45
es una clase más con sus propiedades y métodos 00:05:47
de las cuales podemos instanciar objetos 00:05:49
podemos instanciar objetos de esta 00:05:51
pero sí tiene alguna implicación 00:05:52
el que esté declarada adentro en lugar de aparte 00:05:55
¿qué implicación tiene? 00:05:57
que para que existan objetos de esta clase 00:05:58
es obligatorio 00:06:01
que existan objetos de la clase 00:06:03
que la contiene 00:06:05
esa es la restricción 00:06:06
¿es como una tribu? 00:06:08
la idea sí es como un atributo 00:06:09
en realidad, pero no es que 00:06:15
ese objeto esté dentro del otro 00:06:16
que lo describa, sino que 00:06:19
para que uno exista 00:06:21
el otro tiene que existir 00:06:22
es como la existencia de uno le da permiso 00:06:24
al otro para existir 00:06:27
y lo tiene bajo su dominio 00:06:28
por ejemplo 00:06:30
imaginaos 00:06:32
una aplicación que gestione 00:06:34
alumnos y matrículas 00:06:37
las matrículas son de alumnos. 00:06:39
Con lo cual, en esta aplicación uno puede decir, 00:06:42
oye, no tiene sentido que en mi aplicación haya objetos matrículas sueltos. 00:06:45
No tiene sentido. 00:06:48
Solamente habrá objetos matrículas si hay objetos alumnos estaciados. 00:06:50
No tiene sentido que haya objetos matrículas sueltos. 00:06:53
Vale, entonces nosotros podemos, como he dicho hasta ahora, 00:06:57
pues hacer nuestras aplicaciones clase alumno, clase matrícula, 00:06:59
que el alumno tenga una matrícula dentro y ya está. 00:07:03
Y ese es el diseño habitual y no pasa nada. 00:07:05
¿vale? pero 00:07:07
¿qué pasa si nosotros metemos matrícula 00:07:09
en lugar de como clase aparte, la metemos como 00:07:12
clase interna alumna? pues lo que 00:07:14
pasa es que solamente 00:07:16
vamos a poder hacer un new matrícula 00:07:17
la aplicación te prohíbe 00:07:19
instanciar 00:07:21
matrículas a menos que 00:07:23
no haya un alumno creado previamente 00:07:25
que le dé permiso a ese 00:07:27
¿vale? 00:07:30
entonces eso es una restricción que puede 00:07:32
estar bien y nos puede gustar porque 00:07:34
así nos aseguramos de que la aplicación 00:07:35
no va a hacer un new matrícula suelto 00:07:37
no asociado a ningún alumno 00:07:40
¿vale? 00:07:42
entonces en una aplicación 00:07:44
tienes alumno por un lado, matrícula por otro 00:07:45
tú puedes hacer un new matrícula y se queda una matrícula 00:07:47
por ahí suelto, que luego resulta 00:07:49
que no metes dentro de ningún alumno 00:07:51
y eso a lo mejor te puede provocar un efecto extraño 00:07:53
si tú haces matrícula 00:07:55
como clase interna 00:07:57
solamente vas a poder hacer un new matrícula 00:07:58
asociado 00:08:02
a un objeto 00:08:04
alumno, con lo cual 00:08:05
ya por programa 00:08:07
estás obligando a que tenga que existir 00:08:08
un objeto alumno antes de poder hacer un 00:08:11
neomatricula. Entonces, bueno, puede tener 00:08:13
cierto sentido. Por ahí viene lo de las clases 00:08:15
internas. ¿Vale? 00:08:17
¿Pues hay que meter la clave matricula en la 00:08:19
clase alumna? Sí. 00:08:21
Entonces, aquí 00:08:23
nosotros hemos metido esta clase dentro de la otra. 00:08:24
¿Del main? No, del main 00:08:27
no, de la otra clase. El main es un método. 00:08:29
La clase interna 00:08:32
no está dentro de un método, está dentro de la 00:08:33
clase directamente. Entonces, esta clase 00:08:35
se ha quedado con 00:08:37
esta clase se ha quedado con 00:08:38
su propiedad, 00:08:41
su método main 00:08:43
que empieza aquí y acaba 00:08:44
aquí, su método leer 00:08:47
número que empieza aquí y acaba aquí 00:08:49
y ahora una clase interna 00:08:51
que empieza aquí y acaba aquí. Las clases 00:08:53
internas no están dentro de método, están dentro de otra. 00:08:55
Vale. Entonces, al meter yo 00:08:57
la clase de esta excepción aquí dentro, 00:08:59
primero, dejo la aplicación 00:09:01
más limpita, porque no pongo una clase aparte 00:09:03
ahí en mi lista de paquetes que en realidad 00:09:05
pinta poco 00:09:07
y segundo 00:09:08
obligo a que exista 00:09:11
un objeto de esta clase 00:09:13
para que pueda instanciarse 00:09:14
una excepción de estas, pero eso aquí 00:09:17
a mí no me molesta 00:09:19
¿por qué? porque ¿cuándo voy a hacer yo 00:09:20
el new número alumnos negativos? 00:09:23
el new número alumnos negativos 00:09:25
lo estoy haciendo aquí 00:09:26
lo estoy haciendo aquí dentro 00:09:28
entonces al estarlo haciendo 00:09:30
Aquí dentro 00:09:32
¿Vale? 00:09:34
Pues entonces, evidentemente 00:09:37
Va a existir un objeto 00:09:39
Que es el que está haciendo el NIM 00:09:40
¿Vale? 00:09:43
Pues puede ser 00:09:47
Sí, Bea 00:09:51
Dime, dime 00:09:53
¿Quién? 00:09:59
Pues ahora hemos hecho 00:10:02
El unir 00:10:04
Poniendo que si es el M 00:10:06
Se lanza el error 00:10:07
Pero eso no lo podemos hacer dentro de la clase 00:10:09
De que si detecta un número negativo 00:10:11
O algo así, no sé 00:10:14
Pero es que entonces 00:10:16
No, pero entonces estás lanzando el método al que te llamó 00:10:17
Es decir, no 00:10:20
Tú dices 00:10:21
Claro, tú dices hacer aquí 00:10:23
El next sin y si n es negativo 00:10:26
No, no, no, no me refiero a eso 00:10:27
Claro, porque ya lo tiene él dentro 00:10:29
Claro, pero 00:10:35
Pero porque esa excepción ya existe 00:10:37
Bueno, todos lo hemos tenido que hacer 00:10:38
Claro, nosotros nos hemos tenido que hacer el método 00:10:42
Que, a ver 00:10:44
Tú podrías haber hecho en todo caso esto 00:10:46
No haber hecho el método 00:10:48
Si no haber hecho esto 00:10:49
Scan.nextInt 00:10:52
¿Vale? 00:10:59
Y aquí 00:11:02
Si n 00:11:03
Es menor que 0 00:11:04
Entonces hacer aquí 00:11:08
El propio throw 00:11:09
Entonces, ¿a qué te refieres? 00:11:11
Me refería a hacerlo dentro de la clase 00:11:17
¿De qué clase? 00:11:20
O sea, si nos metemos dentro de nuestra propia sección 00:11:21
Que es esta, de aquí 00:11:24
¿Cómo podemos hacer que esa 00:11:27
Porque tiene igual con inputMismatch 00:11:30
Ya, lo estamos haciendo 00:11:31
InputMismatch es un método que cuando detecta 00:11:34
Que no son alfanuméricos 00:11:36
Te hace el throw, el dentro 00:11:38
Pues es lo mismo 00:11:40
Esa clase tendrá dentro algo para detectar 00:11:41
Esta clase, claro, tiene dentro 00:11:44
No, el input mismatch es una excepción 00:11:46
Que no tiene nada 00:11:51
Lo que tiene dentro es este 00:11:52
¿Ah, sí? 00:11:54
Claro, como todas las excepciones 00:11:56
Pero si esto lo abrimos ayer, también estabas durmiendo en ese momento 00:11:58
No, no, no, estaba despierto 00:12:00
Ayer estaba durmiendo 00:12:02
No tiene nada, input mismatch 00:12:03
La tienes aquí 00:12:06
Esta es la clase scanner 00:12:08
Ah, vale, vale 00:12:10
Es lo que tiene dentro el throw 00:12:11
Claro, tiene dentro el throw, new, input, mismatch, exception. 00:12:13
Tiene esto. 00:12:17
Entonces nosotros hemos hecho lo mismo. 00:12:19
Vale, vale, vale. 00:12:21
¿Vale? 00:12:22
Vale, vale. 00:12:22
Vale, entonces, aquí. 00:12:24
Y todo esto era para leer la cantidad de alumnos. 00:12:28
Sí, pero todavía ha quedado bueno, ¿eh? 00:12:31
Claro, todavía ha quedado... 00:12:33
Ya, un par. 00:12:34
Vale, vamos a... 00:12:36
En 10 minutos lo tenemos metido en el map. 00:12:37
Entonces, esta a mí no me gusta 00:12:39
Porque tendríamos que arreglarlo del next line 00:12:42
Y da pereza 00:12:44
Entonces esta la vamos a dejar comentada 00:12:45
Y bueno, venga, vamos a dejar la primera de las opciones 00:12:47
Que decís que es la que más os ha gustado 00:12:50
Esta 00:12:52
Vale 00:12:57
Venga, esta no funcionaba 00:12:58
Esta de aquí, ¿cuántos aún nos quiere? 00:13:00
Esta a mí me parece muy fea 00:13:03
Porque es que un ifel si hay tan gordote 00:13:05
Era mejor casi poner aquí 00:13:07
Es que a mí me dejó poner dos mensajes 00:13:08
¿Eh? 00:13:10
Bueno 00:13:13
Pero en la otra también lo puedes modificar 00:13:13
Si quieres, eso lo puedes poner siempre 00:13:20
Este 00:13:22
Porque me dice no sé qué 00:13:26
Me falta una llave 00:13:28
Ahí, do while 00:13:30
Catch 00:13:32
Vale 00:13:34
Y, ah, me falta esta llave, vale 00:13:35
Vale 00:13:39
Vale, pues venga, ya hemos leído el número 00:13:41
Ahora vamos a empezar a leer a los alumnos 00:13:44
Para meterlos en el map 00:13:46
Venga, aquí estamos 00:13:47
Vamos a leer a los alumnos 00:13:50
Desde i igual a 0 00:13:52
Mientras i sea menor que n 00:13:55
¿Dónde estamos? Aquí 00:13:56
Sea menor que n incrementando i 00:14:04
Vale, pues vamos a pedir 00:14:07
Los datos del alumno 00:14:09
Nombre 00:14:10
Igual a 00:14:11
scan.next 00:14:24
next line 00:14:26
¿vale? 00:14:30
y ahora 00:14:33
año 00:14:35
o nacimiento 00:14:36
que es el entero 00:14:39
nacimiento 00:14:45
igual a scan.next 00:14:48
int 00:14:51
vale, y ahora ya 00:14:52
vamos a crear 00:14:56
el alumno 00:14:58
Vale, pues mi alumno 00:14:59
Ah, ¿cómo creamos al alumno? 00:15:01
Pues con el método estático 00:15:05
Crear alumno 00:15:07
¿Vale? Crear alumno 00:15:09
Con nombre 00:15:11
Y nacimiento 00:15:14
Ahora, ¿el alumno puede ser null o no? 00:15:16
Pues si el alumno es diferente de null 00:15:22
Porque crear alumno 00:15:24
Era el que me dice 00:15:28
Oye tú 00:15:29
Si el número es negativo 00:15:30
el nacimiento me devuelves un nul 00:15:33
vale 00:15:36
pues entonces si es diferente de nul 00:15:37
que será si el año es negativo 00:15:41
ahora ya ponemos en nuestro map 00:15:43
de alumnos 00:15:45
que ponemos el nombre del alumno 00:15:46
que sería a.getNombre 00:15:53
y al propio alumno 00:15:56
es que estamos todavía aquí 00:15:57
eso es en el 3 00:16:03
vale, entonces esto era simplemente para 00:16:05
ejemplificar esto 00:16:08
Vale, que la forma de comunicarse ahora mismo en el punto 1 es muy fea. La forma de comunicarse, el alumno tiene un año negativo o no de nacimiento, la forma de comunicarse es muy fea, es devolviendo nul. Esto es muy feo, porque yo tengo que saber que si este devuelve nul es porque el año es negativo y decirlo es una forma de comunicarse muy fea. 00:16:10
Con esto tendríamos nuestro map de alumnos, pero que forma tan poco legible de deducir qué pasa en mi ELSE. Si el alumno es nul, ¿por qué? Queda un poco feo. Pues no sé por qué es nul. No lo sé. 00:16:31
alumno null, pero no sé por qué 00:16:49
alumno null, con lo cual 00:16:51
no puedo meterlo en el map, pero no sé 00:16:56
por qué es null, solo sé que me ha devuelto null 00:16:58
entonces es una comunicación muy fea 00:17:00
una comunicación muy fea 00:17:02
por eso es por lo que estaba el punto 3 00:17:04
que es, oye tú 00:17:06
oye, este método crear alumno 00:17:07
eso de devolver null 00:17:10
es muy poco explicativo, en lugar 00:17:12
de eso, avisa 00:17:14
de que no has podido crearlo 00:17:16
por un mensaje específico, entonces 00:17:18
ahora este método 00:17:20
se convertiría 00:17:21
en el bueno 00:17:24
crear alumno bien 00:17:25
y el crear alumno bien 00:17:29
en lugar de esto 00:17:34
me lanzaría un 00:17:35
nacimiento 00:17:39
negativo 00:17:42
este crear 00:17:44
alumno ya si está bien 00:17:53
porque tu forma de avisar es 00:17:54
con un aviso específico 00:17:57
ha pasado esto 00:17:59
que el nacimiento es negativo 00:17:59
Ha pasado este y no me gusta 00:18:02
Sin embargo, el método de arriba 00:18:04
Su aviso es muy poco específico 00:18:06
Que es, hala, toma null 00:18:08
Toma null y ya está 00:18:09
Bueno, no gusta 00:18:11
Entonces mejor este, vamos a crear la clase 00:18:12
Ah, claro, es que he puesto aquí el retun 00:18:15
Perdón, es que estaba volviendo este loco 00:18:44
Ah, sí 00:18:46
Perdón, que tenía ahí impuesto el retun 00:18:47
Y ahora me falta el new 00:18:50
Ahora, ya está 00:18:56
Si el nacimiento es negativo 00:18:59
Aviso con un aviso específico 00:19:01
Lánzame una nueva nacimiento negativo excepción 00:19:03
Me creo mi clase 00:19:05
Y ya está 00:19:07
¿Que quiero un mensajito? 00:19:14
Pues mensajito 00:19:16
Pues porque no me estáis haciendo ni caso 00:19:17
Y vamos con prisa 00:19:39
Esencialmente por eso 00:19:40
Bueno, bueno 00:19:41
Aquí estáis todos ya pensando en recoger 00:19:43
Año negativo 00:19:47
Vale 00:19:58
Ahí está 00:20:00
Dentro de 00:20:03
Esto debería ponerlo en un paquete aparte 00:20:05
Un paquete excepciones 00:20:07
Debería ponerlo en un paquete exception 00:20:08
Ya que la he hecho fuera 00:20:10
Voy a ponerla aquí 00:20:12
Bien, exception 00:20:14
Exception 00:20:17
Y voy a moverla de aquí a aquí 00:20:18
¡Hala! Ya la tengo aquí 00:20:22
Y ya está 00:20:29
¿Vale? 00:20:35
Y ahora ya esta clase ya sí que avisa 00:20:39
Correctamente, a ver si 00:20:41
Esta clase sí avisa 00:20:42
Correctamente, pero claro 00:20:45
Oye, que tienes que avisar 00:20:47
¿Por qué? Porque la ha hecho 00:20:48
Exception 00:20:50
Recordad que 00:20:51
exception o runtime exception 00:20:53
como uno quiera 00:20:55
si la dejamos como exception 00:20:56
pues entonces tengo que avisar 00:20:59
que este método puede dar excepción 00:21:00
pues a la throws 00:21:02
y ahora ya 00:21:04
mi app alumnos 00:21:06
si yo creo alumno bien creado 00:21:08
bien creado 00:21:11
automáticamente en cuanto crea alumno 00:21:12
bien creado ya pum 00:21:14
ya desde tiempo de compilación de desarrollo 00:21:16
ya me salta el aviso rojo que es lo bueno y lo bonito 00:21:18
que yo estoy haciendo código 00:21:21
Y automáticamente vea 00:21:23
Uy, ¿por qué se ha puesto rojo? 00:21:24
Espérate, es que esto puede ser 00:21:27
Que dé un aviso 00:21:29
De que el año es negativo 00:21:31
Cuidado, pues entonces si el año es negativo 00:21:32
Yo ya sé que tengo que capturar, etc 00:21:34
Entonces mucho mejor que no decir nada 00:21:36
Y si me da un null, pues ¿qué hago con el null? 00:21:38
Pues yo qué sé 00:21:40
Entonces ahora esto yo ya lo podría capturar 00:21:41
Y ya 00:21:45
Haría aquí lo que quisiera 00:21:49
Vale, capturarlo, si el año es negativo exception, pues nada, no hago nada, y si, vale, ya haría 00:21:52
lo que quisiera, lo metería en un bucle, lo que fuera, bueno, lo dejamos así, con 00:22:11
la excepción pendiente de capturar, pero luego ya la podemos capturar, vale, venga, 00:22:18
Materias:
Programación
Niveles educativos:
▼ Mostrar / ocultar niveles
  • Formación Profesional
    • Ciclo formativo de grado superior
      • Primer Curso
Subido por:
Raquel G.
Licencia:
Todos los derechos reservados
Visualizaciones:
2
Fecha:
17 de marzo de 2026 - 12:20
Visibilidad:
Clave
Centro:
IES ROSA CHACEL
Duración:
22′ 25″
Relación de aspecto:
1.78:1
Resolución:
1920x1080 píxeles
Tamaño:
95.30 MBytes

Del mismo autor…

Ver más del mismo autor


EducaMadrid, Plataforma Educativa de la Comunidad de Madrid

Plataforma Educativa EducaMadrid