1 00:00:00,000 --> 00:00:01,280 tan estupenda 2 00:00:01,280 --> 00:00:04,040 vale, pues venga 3 00:00:04,040 --> 00:00:05,780 vámonos dentro de la clase 4 00:00:05,780 --> 00:00:07,980 que no dentro de ningún método 5 00:00:07,980 --> 00:00:09,900 no, dentro de la clase 6 00:00:09,900 --> 00:00:11,939 es decir, estoy fuera de cualquier 7 00:00:11,939 --> 00:00:13,419 método, pero dentro de la clase 8 00:00:13,419 --> 00:00:19,219 también, efectivamente 9 00:00:19,219 --> 00:00:20,940 podría aquí hacer un 10 00:00:20,940 --> 00:00:23,480 vale, si queréis lo hacemos como una clase anónima 11 00:00:23,480 --> 00:00:25,280 eh, si 12 00:00:25,280 --> 00:00:27,239 claro, pues vamos a ver 13 00:00:27,239 --> 00:00:28,420 como una clase anónima 14 00:00:28,420 --> 00:00:31,059 sería throw new 15 00:00:31,059 --> 00:00:36,259 Exception 16 00:00:36,259 --> 00:00:39,920 Y ahora aquí 17 00:00:39,920 --> 00:00:43,240 Throw new exception 18 00:00:43,240 --> 00:00:45,179 Y dentro de exception 19 00:00:45,179 --> 00:00:46,880 Podríamos hacerle un constructor 20 00:00:46,880 --> 00:00:50,659 Public exception 21 00:00:50,659 --> 00:00:53,240 Ah bueno no claro 22 00:00:53,240 --> 00:00:55,340 Es que el constructor no podríamos 23 00:00:55,340 --> 00:00:58,240 Si necesito 24 00:00:58,240 --> 00:01:04,060 O sí, podríamos hacer 25 00:01:04,060 --> 00:01:05,939 Super.set 26 00:01:05,939 --> 00:01:09,090 Message 27 00:01:09,090 --> 00:01:11,829 A ver si me deja 28 00:01:11,829 --> 00:01:17,689 Para poner el mensajito 29 00:01:17,689 --> 00:01:19,670 Pero vamos, no tendría por qué ponérselo si no quiero 30 00:01:19,670 --> 00:01:21,609 El mensajito 31 00:01:21,609 --> 00:01:23,810 Número 32 00:01:23,810 --> 00:01:25,709 De alumnos 33 00:01:25,709 --> 00:01:27,950 No válido 34 00:01:27,950 --> 00:01:30,400 Vale 35 00:01:30,400 --> 00:01:50,959 no me deja ponerlo ahí 36 00:01:50,959 --> 00:01:52,120 yo creo que me debería, ¿no? 37 00:01:52,120 --> 00:01:52,480 una 38 00:01:52,480 --> 00:01:56,260 exception y la declaro 39 00:01:56,260 --> 00:01:58,000 aquí, ah bueno, no, claro, es que estoy en 40 00:01:58,000 --> 00:01:58,980 no, no 41 00:01:58,980 --> 00:02:02,760 a ver 42 00:02:02,760 --> 00:02:06,239 yo lo que quiero es, no, esto no lo puedo 43 00:02:06,239 --> 00:02:07,560 hacer aquí dentro, lógicamente 44 00:02:07,560 --> 00:02:09,879 Lo que quieres hacer 45 00:02:09,879 --> 00:02:10,900 Un constructor 46 00:02:10,900 --> 00:02:26,189 Vale, es que no sé cómo hacerle un constructor 47 00:02:26,189 --> 00:02:27,090 Para pasarle 48 00:02:27,090 --> 00:02:29,310 Bueno, siempre podríamos dejarla así 49 00:02:29,310 --> 00:02:30,310 Vale 50 00:02:30,310 --> 00:02:33,189 Así siempre podríamos hacerlo 51 00:02:33,189 --> 00:02:34,050 Ahora podemos mirar 52 00:02:34,050 --> 00:02:37,789 Con esto ya estoy creando un objeto 53 00:02:37,789 --> 00:02:39,729 Lo que pasa es que no tiene nombre 54 00:02:39,729 --> 00:02:41,169 Al no tener nombre 55 00:02:41,169 --> 00:02:42,189 Luego en el catch, ¿qué pasa? 56 00:02:43,409 --> 00:02:45,169 Claro, aquí no es el mejor contexto 57 00:02:45,169 --> 00:02:47,189 Hacerla anónima, porque precisamente lo que queremos es el nombre 58 00:02:47,189 --> 00:02:48,990 Para luego capturarla 59 00:02:48,990 --> 00:02:51,750 Vale, aquí no sería el mejor concepto 60 00:02:51,750 --> 00:02:53,689 Claro, el mejor sitio para hacerla anónima 61 00:02:53,689 --> 00:02:56,710 Nada, nada, nada, olvídate, olvídate 62 00:02:56,710 --> 00:02:57,949 No hemos hecho nada, ¿vale? 63 00:02:58,110 --> 00:02:58,889 No hemos hecho nada 64 00:02:58,889 --> 00:03:02,389 Vale, pues entonces vamos a hacer una clase interna 65 00:03:02,389 --> 00:03:03,629 Aquí 66 00:03:03,629 --> 00:03:18,919 Vale, pues venga 67 00:03:18,919 --> 00:03:21,099 Vamos a 68 00:03:21,099 --> 00:03:25,479 Que herede de Runtime Exception 69 00:03:25,479 --> 00:03:27,520 Para no darle tanto bombo 70 00:03:27,520 --> 00:03:31,330 Aquí está mi clase 71 00:03:31,330 --> 00:03:36,400 A ver, claro, no se ve bien 72 00:03:36,400 --> 00:03:38,080 Porque os habéis emperrado en que esté en negro 73 00:03:38,080 --> 00:03:43,159 Ya, pero no lo puedo cambiar, ¿no? 74 00:03:47,819 --> 00:03:48,659 ¿Lo veis? 75 00:03:49,340 --> 00:03:50,560 ¿Lo cambia a blanquito? 76 00:03:53,000 --> 00:03:55,620 Cualquier cosa menos cambiar a blanco 77 00:03:55,620 --> 00:03:58,759 ¿Se ve? 78 00:04:00,939 --> 00:04:01,379 Vale 79 00:04:01,379 --> 00:04:03,759 pues fijaos, esta es una clase 80 00:04:03,759 --> 00:04:05,039 interna 81 00:04:05,039 --> 00:04:11,699 está dentro de la otra 82 00:04:11,699 --> 00:04:14,479 al nivel de cualquier otro método, dentro de la otra 83 00:04:14,479 --> 00:04:16,100 entonces yo puedo 84 00:04:16,100 --> 00:04:17,939 poner una clase dentro de otra 85 00:04:17,939 --> 00:04:22,759 y es una clase más 86 00:04:22,759 --> 00:04:25,620 con sus propiedades, sus métodos 87 00:04:25,620 --> 00:04:27,339 bueno, esta en particular solo va a tener un 88 00:04:27,339 --> 00:04:29,519 constructor, que es a partir del 89 00:04:29,519 --> 00:04:31,000 cual le paso yo el mensajito 90 00:04:31,000 --> 00:04:40,439 ¿has visto ya a Mila que han liado por decir que 91 00:04:40,439 --> 00:04:41,300 hagamos el ejercicio? 92 00:04:42,160 --> 00:04:49,399 Pues es que, claro, me puede la pasión y al final... 93 00:04:49,399 --> 00:04:54,910 ¿Cómo que si lo he guardado? 94 00:04:57,449 --> 00:04:59,149 Que si lo he guardado, está aquí arriba. 95 00:05:00,910 --> 00:05:05,670 El número de alumnos es negativo. 96 00:05:10,870 --> 00:05:11,470 Punto y coma. 97 00:05:14,439 --> 00:05:17,100 Vale, una clase interna, es decir, una clase dentro de otra, 98 00:05:17,100 --> 00:05:19,480 es una clase más con sus propiedades 99 00:05:19,480 --> 00:05:20,839 sus métodos, lo que yo quiera 100 00:05:20,839 --> 00:05:22,980 es una clase más y cuando esto se 101 00:05:22,980 --> 00:05:24,980 precompila, nosotros 102 00:05:24,980 --> 00:05:27,100 veremos en el sistema 103 00:05:27,100 --> 00:05:28,459 operativo, podríamos ver 104 00:05:28,459 --> 00:05:31,100 que se ha generado un número 105 00:05:31,100 --> 00:05:32,800 de alumnos negativo exceptio en punto 106 00:05:32,800 --> 00:05:34,980 clas, igual que se generó el main 107 00:05:34,980 --> 00:05:36,480 punto clas, es una clase más 108 00:05:36,480 --> 00:05:37,720 es una clase más 109 00:05:37,720 --> 00:05:41,100 la pregunta es, ¿tiene alguna 110 00:05:41,100 --> 00:05:43,199 implicación que esté declarada como clase 111 00:05:43,199 --> 00:05:45,060 intea respecto como clase aparte? ¿tiene alguna? 112 00:05:45,060 --> 00:05:47,199 sí, sí tiene alguna 113 00:05:47,199 --> 00:05:49,500 es una clase más con sus propiedades y métodos 114 00:05:49,500 --> 00:05:51,459 de las cuales podemos instanciar objetos 115 00:05:51,459 --> 00:05:52,720 podemos instanciar objetos de esta 116 00:05:52,720 --> 00:05:55,079 pero sí tiene alguna implicación 117 00:05:55,079 --> 00:05:57,079 el que esté declarada adentro en lugar de aparte 118 00:05:57,079 --> 00:05:58,120 ¿qué implicación tiene? 119 00:05:58,819 --> 00:06:01,180 que para que existan objetos de esta clase 120 00:06:01,180 --> 00:06:03,379 es obligatorio 121 00:06:03,379 --> 00:06:05,360 que existan objetos de la clase 122 00:06:05,360 --> 00:06:06,199 que la contiene 123 00:06:06,199 --> 00:06:08,339 esa es la restricción 124 00:06:08,339 --> 00:06:09,519 ¿es como una tribu? 125 00:06:09,519 --> 00:06:15,339 la idea sí es como un atributo 126 00:06:15,339 --> 00:06:16,819 en realidad, pero no es que 127 00:06:16,819 --> 00:06:19,439 ese objeto esté dentro del otro 128 00:06:19,439 --> 00:06:21,240 que lo describa, sino que 129 00:06:21,240 --> 00:06:22,420 para que uno exista 130 00:06:22,420 --> 00:06:24,600 el otro tiene que existir 131 00:06:24,600 --> 00:06:27,199 es como la existencia de uno le da permiso 132 00:06:27,199 --> 00:06:28,279 al otro para existir 133 00:06:28,279 --> 00:06:30,720 y lo tiene bajo su dominio 134 00:06:30,720 --> 00:06:32,139 por ejemplo 135 00:06:32,139 --> 00:06:34,879 imaginaos 136 00:06:34,879 --> 00:06:37,199 una aplicación que gestione 137 00:06:37,199 --> 00:06:39,500 alumnos y matrículas 138 00:06:39,519 --> 00:06:41,819 las matrículas son de alumnos. 139 00:06:42,800 --> 00:06:45,160 Con lo cual, en esta aplicación uno puede decir, 140 00:06:45,319 --> 00:06:48,660 oye, no tiene sentido que en mi aplicación haya objetos matrículas sueltos. 141 00:06:48,980 --> 00:06:49,879 No tiene sentido. 142 00:06:50,480 --> 00:06:53,680 Solamente habrá objetos matrículas si hay objetos alumnos estaciados. 143 00:06:53,920 --> 00:06:55,899 No tiene sentido que haya objetos matrículas sueltos. 144 00:06:57,100 --> 00:06:59,740 Vale, entonces nosotros podemos, como he dicho hasta ahora, 145 00:06:59,879 --> 00:07:03,139 pues hacer nuestras aplicaciones clase alumno, clase matrícula, 146 00:07:03,579 --> 00:07:05,740 que el alumno tenga una matrícula dentro y ya está. 147 00:07:05,740 --> 00:07:07,819 Y ese es el diseño habitual y no pasa nada. 148 00:07:07,819 --> 00:07:09,660 ¿vale? pero 149 00:07:09,660 --> 00:07:12,040 ¿qué pasa si nosotros metemos matrícula 150 00:07:12,040 --> 00:07:14,000 en lugar de como clase aparte, la metemos como 151 00:07:14,000 --> 00:07:16,120 clase interna alumna? pues lo que 152 00:07:16,120 --> 00:07:17,879 pasa es que solamente 153 00:07:17,879 --> 00:07:19,839 vamos a poder hacer un new matrícula 154 00:07:19,839 --> 00:07:21,839 la aplicación te prohíbe 155 00:07:21,839 --> 00:07:23,699 instanciar 156 00:07:23,699 --> 00:07:25,899 matrículas a menos que 157 00:07:25,899 --> 00:07:27,939 no haya un alumno creado previamente 158 00:07:27,939 --> 00:07:30,120 que le dé permiso a ese 159 00:07:30,120 --> 00:07:31,519 ¿vale? 160 00:07:32,199 --> 00:07:34,019 entonces eso es una restricción que puede 161 00:07:34,019 --> 00:07:35,939 estar bien y nos puede gustar porque 162 00:07:35,939 --> 00:07:37,879 así nos aseguramos de que la aplicación 163 00:07:37,879 --> 00:07:40,139 no va a hacer un new matrícula suelto 164 00:07:40,139 --> 00:07:42,040 no asociado a ningún alumno 165 00:07:42,040 --> 00:07:44,019 ¿vale? 166 00:07:44,639 --> 00:07:45,699 entonces en una aplicación 167 00:07:45,699 --> 00:07:47,480 tienes alumno por un lado, matrícula por otro 168 00:07:47,480 --> 00:07:49,800 tú puedes hacer un new matrícula y se queda una matrícula 169 00:07:49,800 --> 00:07:51,759 por ahí suelto, que luego resulta 170 00:07:51,759 --> 00:07:53,180 que no metes dentro de ningún alumno 171 00:07:53,180 --> 00:07:55,480 y eso a lo mejor te puede provocar un efecto extraño 172 00:07:55,480 --> 00:07:57,819 si tú haces matrícula 173 00:07:57,819 --> 00:07:58,879 como clase interna 174 00:07:58,879 --> 00:08:01,759 solamente vas a poder hacer un new matrícula 175 00:08:02,420 --> 00:08:04,160 asociado 176 00:08:04,160 --> 00:08:05,680 a un objeto 177 00:08:05,680 --> 00:08:07,600 alumno, con lo cual 178 00:08:07,600 --> 00:08:08,759 ya por programa 179 00:08:08,759 --> 00:08:11,680 estás obligando a que tenga que existir 180 00:08:11,680 --> 00:08:13,279 un objeto alumno antes de poder hacer un 181 00:08:13,279 --> 00:08:15,300 neomatricula. Entonces, bueno, puede tener 182 00:08:15,300 --> 00:08:17,279 cierto sentido. Por ahí viene lo de las clases 183 00:08:17,279 --> 00:08:18,779 internas. ¿Vale? 184 00:08:19,100 --> 00:08:21,420 ¿Pues hay que meter la clave matricula en la 185 00:08:21,420 --> 00:08:23,000 clase alumna? Sí. 186 00:08:23,680 --> 00:08:24,779 Entonces, aquí 187 00:08:24,779 --> 00:08:27,379 nosotros hemos metido esta clase dentro de la otra. 188 00:08:27,680 --> 00:08:29,519 ¿Del main? No, del main 189 00:08:29,519 --> 00:08:31,220 no, de la otra clase. El main es un método. 190 00:08:32,159 --> 00:08:33,259 La clase interna 191 00:08:33,259 --> 00:08:35,299 no está dentro de un método, está dentro de la 192 00:08:35,299 --> 00:08:37,539 clase directamente. Entonces, esta clase 193 00:08:37,539 --> 00:08:38,620 se ha quedado con 194 00:08:38,620 --> 00:08:41,340 esta clase se ha quedado con 195 00:08:41,340 --> 00:08:42,899 su propiedad, 196 00:08:43,940 --> 00:08:44,820 su método main 197 00:08:44,820 --> 00:08:47,259 que empieza aquí y acaba 198 00:08:47,259 --> 00:08:49,159 aquí, su método leer 199 00:08:49,159 --> 00:08:51,139 número que empieza aquí y acaba aquí 200 00:08:51,139 --> 00:08:53,340 y ahora una clase interna 201 00:08:53,340 --> 00:08:55,220 que empieza aquí y acaba aquí. Las clases 202 00:08:55,220 --> 00:08:57,340 internas no están dentro de método, están dentro de otra. 203 00:08:57,799 --> 00:08:59,279 Vale. Entonces, al meter yo 204 00:08:59,279 --> 00:09:01,039 la clase de esta excepción aquí dentro, 205 00:09:01,580 --> 00:09:03,519 primero, dejo la aplicación 206 00:09:03,519 --> 00:09:05,639 más limpita, porque no pongo una clase aparte 207 00:09:05,639 --> 00:09:07,460 ahí en mi lista de paquetes que en realidad 208 00:09:07,460 --> 00:09:08,940 pinta poco 209 00:09:08,940 --> 00:09:11,159 y segundo 210 00:09:11,159 --> 00:09:13,559 obligo a que exista 211 00:09:13,559 --> 00:09:14,860 un objeto de esta clase 212 00:09:14,860 --> 00:09:17,360 para que pueda instanciarse 213 00:09:17,360 --> 00:09:19,360 una excepción de estas, pero eso aquí 214 00:09:19,360 --> 00:09:20,200 a mí no me molesta 215 00:09:20,200 --> 00:09:23,340 ¿por qué? porque ¿cuándo voy a hacer yo 216 00:09:23,340 --> 00:09:24,899 el new número alumnos negativos? 217 00:09:25,039 --> 00:09:26,500 el new número alumnos negativos 218 00:09:26,500 --> 00:09:28,139 lo estoy haciendo aquí 219 00:09:28,139 --> 00:09:30,440 lo estoy haciendo aquí dentro 220 00:09:30,440 --> 00:09:32,919 entonces al estarlo haciendo 221 00:09:32,919 --> 00:09:34,480 Aquí dentro 222 00:09:34,480 --> 00:09:36,779 ¿Vale? 223 00:09:37,299 --> 00:09:39,279 Pues entonces, evidentemente 224 00:09:39,279 --> 00:09:40,279 Va a existir un objeto 225 00:09:40,279 --> 00:09:43,019 Que es el que está haciendo el NIM 226 00:09:43,019 --> 00:09:43,759 ¿Vale? 227 00:09:47,799 --> 00:09:51,500 Pues puede ser 228 00:09:51,500 --> 00:09:53,279 Sí, Bea 229 00:09:53,279 --> 00:09:59,899 Dime, dime 230 00:09:59,899 --> 00:10:01,419 ¿Quién? 231 00:10:02,740 --> 00:10:04,440 Pues ahora hemos hecho 232 00:10:04,440 --> 00:10:06,419 El unir 233 00:10:06,419 --> 00:10:07,500 Poniendo que si es el M 234 00:10:07,500 --> 00:10:09,480 Se lanza el error 235 00:10:09,480 --> 00:10:11,399 Pero eso no lo podemos hacer dentro de la clase 236 00:10:11,399 --> 00:10:14,100 De que si detecta un número negativo 237 00:10:14,100 --> 00:10:16,340 O algo así, no sé 238 00:10:16,340 --> 00:10:17,799 Pero es que entonces 239 00:10:17,799 --> 00:10:20,559 No, pero entonces estás lanzando el método al que te llamó 240 00:10:20,559 --> 00:10:21,659 Es decir, no 241 00:10:21,659 --> 00:10:23,019 Tú dices 242 00:10:23,019 --> 00:10:26,159 Claro, tú dices hacer aquí 243 00:10:26,159 --> 00:10:27,940 El next sin y si n es negativo 244 00:10:27,940 --> 00:10:29,159 No, no, no, no me refiero a eso 245 00:10:29,159 --> 00:10:35,210 Claro, porque ya lo tiene él dentro 246 00:10:35,210 --> 00:10:37,029 Claro, pero 247 00:10:37,029 --> 00:10:38,830 Pero porque esa excepción ya existe 248 00:10:38,830 --> 00:10:42,409 Bueno, todos lo hemos tenido que hacer 249 00:10:42,409 --> 00:10:44,950 Claro, nosotros nos hemos tenido que hacer el método 250 00:10:44,950 --> 00:10:46,350 Que, a ver 251 00:10:46,350 --> 00:10:48,289 Tú podrías haber hecho en todo caso esto 252 00:10:48,289 --> 00:10:49,850 No haber hecho el método 253 00:10:49,850 --> 00:10:51,549 Si no haber hecho esto 254 00:10:51,549 --> 00:10:52,370 El 255 00:10:52,370 --> 00:10:59,409 Scan.nextInt 256 00:10:59,409 --> 00:11:00,769 ¿Vale? 257 00:11:02,230 --> 00:11:03,269 Y aquí 258 00:11:03,269 --> 00:11:04,629 Si n 259 00:11:04,629 --> 00:11:08,350 Es menor que 0 260 00:11:08,350 --> 00:11:09,970 Entonces hacer aquí 261 00:11:09,970 --> 00:11:11,049 El propio throw 262 00:11:11,049 --> 00:11:17,509 Entonces, ¿a qué te refieres? 263 00:11:17,710 --> 00:11:20,129 Me refería a hacerlo dentro de la clase 264 00:11:20,129 --> 00:11:21,269 ¿De qué clase? 265 00:11:21,889 --> 00:11:24,509 O sea, si nos metemos dentro de nuestra propia sección 266 00:11:24,509 --> 00:11:27,669 Que es esta, de aquí 267 00:11:27,669 --> 00:11:30,009 ¿Cómo podemos hacer que esa 268 00:11:30,009 --> 00:11:31,950 Porque tiene igual con inputMismatch 269 00:11:31,950 --> 00:11:34,090 Ya, lo estamos haciendo 270 00:11:34,090 --> 00:11:36,830 InputMismatch es un método que cuando detecta 271 00:11:36,830 --> 00:11:38,809 Que no son alfanuméricos 272 00:11:38,809 --> 00:11:40,029 Te hace el throw, el dentro 273 00:11:40,029 --> 00:11:41,250 Pues es lo mismo 274 00:11:41,250 --> 00:11:44,429 Esa clase tendrá dentro algo para detectar 275 00:11:44,429 --> 00:11:46,230 Esta clase, claro, tiene dentro 276 00:11:46,230 --> 00:11:51,610 No, el input mismatch es una excepción 277 00:11:51,610 --> 00:11:52,289 Que no tiene nada 278 00:11:52,289 --> 00:11:54,149 Lo que tiene dentro es este 279 00:11:54,149 --> 00:11:55,889 ¿Ah, sí? 280 00:11:56,750 --> 00:11:58,149 Claro, como todas las excepciones 281 00:11:58,149 --> 00:12:00,690 Pero si esto lo abrimos ayer, también estabas durmiendo en ese momento 282 00:12:00,690 --> 00:12:02,090 No, no, no, estaba despierto 283 00:12:02,090 --> 00:12:03,809 Ayer estaba durmiendo 284 00:12:03,809 --> 00:12:06,529 No tiene nada, input mismatch 285 00:12:06,529 --> 00:12:08,169 La tienes aquí 286 00:12:08,169 --> 00:12:10,529 Esta es la clase scanner 287 00:12:10,529 --> 00:12:11,309 Ah, vale, vale 288 00:12:11,309 --> 00:12:13,750 Es lo que tiene dentro el throw 289 00:12:13,750 --> 00:12:16,789 Claro, tiene dentro el throw, new, input, mismatch, exception. 290 00:12:17,330 --> 00:12:18,230 Tiene esto. 291 00:12:19,389 --> 00:12:20,629 Entonces nosotros hemos hecho lo mismo. 292 00:12:21,529 --> 00:12:22,330 Vale, vale, vale. 293 00:12:22,330 --> 00:12:22,549 ¿Vale? 294 00:12:22,789 --> 00:12:23,190 Vale, vale. 295 00:12:24,649 --> 00:12:26,590 Vale, entonces, aquí. 296 00:12:28,389 --> 00:12:31,929 Y todo esto era para leer la cantidad de alumnos. 297 00:12:31,929 --> 00:12:33,309 Sí, pero todavía ha quedado bueno, ¿eh? 298 00:12:33,509 --> 00:12:34,629 Claro, todavía ha quedado... 299 00:12:34,629 --> 00:12:35,309 Ya, un par. 300 00:12:36,330 --> 00:12:37,490 Vale, vamos a... 301 00:12:37,490 --> 00:12:39,669 En 10 minutos lo tenemos metido en el map. 302 00:12:39,750 --> 00:12:42,129 Entonces, esta a mí no me gusta 303 00:12:42,129 --> 00:12:44,549 Porque tendríamos que arreglarlo del next line 304 00:12:44,549 --> 00:12:45,370 Y da pereza 305 00:12:45,370 --> 00:12:47,289 Entonces esta la vamos a dejar comentada 306 00:12:47,289 --> 00:12:50,649 Y bueno, venga, vamos a dejar la primera de las opciones 307 00:12:50,649 --> 00:12:52,649 Que decís que es la que más os ha gustado 308 00:12:52,649 --> 00:12:57,590 Esta 309 00:12:57,590 --> 00:12:58,990 Vale 310 00:12:58,990 --> 00:13:00,950 Venga, esta no funcionaba 311 00:13:00,950 --> 00:13:03,710 Esta de aquí, ¿cuántos aún nos quiere? 312 00:13:03,809 --> 00:13:05,090 Esta a mí me parece muy fea 313 00:13:05,090 --> 00:13:07,470 Porque es que un ifel si hay tan gordote 314 00:13:07,470 --> 00:13:08,669 Era mejor casi poner aquí 315 00:13:08,669 --> 00:13:10,629 Es que a mí me dejó poner dos mensajes 316 00:13:10,629 --> 00:13:11,889 ¿Eh? 317 00:13:13,389 --> 00:13:13,830 Bueno 318 00:13:13,830 --> 00:13:20,889 Pero en la otra también lo puedes modificar 319 00:13:20,889 --> 00:13:22,809 Si quieres, eso lo puedes poner siempre 320 00:13:22,809 --> 00:13:26,350 Este 321 00:13:26,350 --> 00:13:28,190 Porque me dice no sé qué 322 00:13:28,190 --> 00:13:30,789 Me falta una llave 323 00:13:30,789 --> 00:13:32,409 Ahí, do while 324 00:13:32,409 --> 00:13:34,389 Catch 325 00:13:34,389 --> 00:13:35,110 Vale 326 00:13:35,110 --> 00:13:39,750 Y, ah, me falta esta llave, vale 327 00:13:39,750 --> 00:13:41,289 Vale 328 00:13:41,289 --> 00:13:44,330 Vale, pues venga, ya hemos leído el número 329 00:13:44,330 --> 00:13:46,809 Ahora vamos a empezar a leer a los alumnos 330 00:13:46,809 --> 00:13:47,850 Para meterlos en el map 331 00:13:47,850 --> 00:13:50,429 Venga, aquí estamos 332 00:13:50,429 --> 00:13:52,610 Vamos a leer a los alumnos 333 00:13:52,610 --> 00:13:55,110 Desde i igual a 0 334 00:13:55,110 --> 00:13:56,929 Mientras i sea menor que n 335 00:13:56,929 --> 00:14:04,440 ¿Dónde estamos? Aquí 336 00:14:04,440 --> 00:14:07,279 Sea menor que n incrementando i 337 00:14:07,279 --> 00:14:09,220 Vale, pues vamos a pedir 338 00:14:09,220 --> 00:14:10,379 Los datos del alumno 339 00:14:10,379 --> 00:14:11,120 Nombre 340 00:14:11,120 --> 00:14:24,000 Igual a 341 00:14:24,000 --> 00:14:26,259 scan.next 342 00:14:26,259 --> 00:14:30,360 next line 343 00:14:30,360 --> 00:14:33,799 ¿vale? 344 00:14:33,799 --> 00:14:35,120 y ahora 345 00:14:35,120 --> 00:14:36,179 año 346 00:14:36,179 --> 00:14:39,320 o nacimiento 347 00:14:39,320 --> 00:14:45,090 que es el entero 348 00:14:45,090 --> 00:14:48,759 nacimiento 349 00:14:48,759 --> 00:14:50,659 igual a scan.next 350 00:14:51,539 --> 00:14:52,159 int 351 00:14:52,159 --> 00:14:56,340 vale, y ahora ya 352 00:14:56,340 --> 00:14:58,639 vamos a crear 353 00:14:58,639 --> 00:14:59,320 el alumno 354 00:14:59,320 --> 00:15:01,860 Vale, pues mi alumno 355 00:15:01,860 --> 00:15:05,850 Ah, ¿cómo creamos al alumno? 356 00:15:05,990 --> 00:15:07,509 Pues con el método estático 357 00:15:07,509 --> 00:15:09,269 Crear alumno 358 00:15:09,269 --> 00:15:11,649 ¿Vale? Crear alumno 359 00:15:11,649 --> 00:15:14,690 Con nombre 360 00:15:14,690 --> 00:15:16,389 Y nacimiento 361 00:15:16,389 --> 00:15:20,509 Ahora, ¿el alumno puede ser null o no? 362 00:15:22,860 --> 00:15:24,899 Pues si el alumno es diferente de null 363 00:15:24,899 --> 00:15:28,919 Porque crear alumno 364 00:15:28,919 --> 00:15:29,899 Era el que me dice 365 00:15:29,899 --> 00:15:30,659 Oye tú 366 00:15:30,659 --> 00:15:33,740 Si el número es negativo 367 00:15:33,740 --> 00:15:36,139 el nacimiento me devuelves un nul 368 00:15:36,139 --> 00:15:37,360 vale 369 00:15:37,360 --> 00:15:41,960 pues entonces si es diferente de nul 370 00:15:41,960 --> 00:15:43,519 que será si el año es negativo 371 00:15:43,519 --> 00:15:45,840 ahora ya ponemos en nuestro map 372 00:15:45,840 --> 00:15:46,779 de alumnos 373 00:15:46,779 --> 00:15:53,720 que ponemos el nombre del alumno 374 00:15:53,720 --> 00:15:55,580 que sería a.getNombre 375 00:15:56,340 --> 00:15:57,419 y al propio alumno 376 00:15:57,419 --> 00:16:03,580 es que estamos todavía aquí 377 00:16:03,580 --> 00:16:05,940 eso es en el 3 378 00:16:05,940 --> 00:16:08,240 vale, entonces esto era simplemente para 379 00:16:08,240 --> 00:16:10,059 ejemplificar esto 380 00:16:10,059 --> 00:16:31,759 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. 381 00:16:31,759 --> 00:16:49,139 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é. 382 00:16:49,139 --> 00:16:51,259 alumno null, pero no sé por qué 383 00:16:51,259 --> 00:16:56,840 alumno null, con lo cual 384 00:16:56,840 --> 00:16:58,799 no puedo meterlo en el map, pero no sé 385 00:16:58,799 --> 00:17:00,539 por qué es null, solo sé que me ha devuelto null 386 00:17:00,539 --> 00:17:02,720 entonces es una comunicación muy fea 387 00:17:02,720 --> 00:17:04,240 una comunicación muy fea 388 00:17:04,240 --> 00:17:06,900 por eso es por lo que estaba el punto 3 389 00:17:06,900 --> 00:17:07,720 que es, oye tú 390 00:17:07,720 --> 00:17:10,700 oye, este método crear alumno 391 00:17:10,700 --> 00:17:12,019 eso de devolver null 392 00:17:12,019 --> 00:17:14,740 es muy poco explicativo, en lugar 393 00:17:14,740 --> 00:17:16,980 de eso, avisa 394 00:17:16,980 --> 00:17:18,319 de que no has podido crearlo 395 00:17:18,319 --> 00:17:20,619 por un mensaje específico, entonces 396 00:17:20,619 --> 00:17:21,500 ahora este método 397 00:17:21,500 --> 00:17:24,519 se convertiría 398 00:17:24,519 --> 00:17:25,339 en el bueno 399 00:17:25,339 --> 00:17:29,759 crear alumno bien 400 00:17:29,759 --> 00:17:34,019 y el crear alumno bien 401 00:17:34,019 --> 00:17:35,319 en lugar de esto 402 00:17:35,319 --> 00:17:39,470 me lanzaría un 403 00:17:39,470 --> 00:17:42,869 nacimiento 404 00:17:42,869 --> 00:17:44,230 negativo 405 00:17:44,230 --> 00:17:53,539 este crear 406 00:17:53,539 --> 00:17:54,900 alumno ya si está bien 407 00:17:54,900 --> 00:17:57,460 porque tu forma de avisar es 408 00:17:57,460 --> 00:17:59,079 con un aviso específico 409 00:17:59,079 --> 00:17:59,980 ha pasado esto 410 00:17:59,980 --> 00:18:02,759 que el nacimiento es negativo 411 00:18:02,759 --> 00:18:04,480 Ha pasado este y no me gusta 412 00:18:04,480 --> 00:18:06,319 Sin embargo, el método de arriba 413 00:18:06,319 --> 00:18:08,519 Su aviso es muy poco específico 414 00:18:08,519 --> 00:18:09,440 Que es, hala, toma null 415 00:18:09,440 --> 00:18:11,839 Toma null y ya está 416 00:18:11,839 --> 00:18:12,819 Bueno, no gusta 417 00:18:12,819 --> 00:18:15,720 Entonces mejor este, vamos a crear la clase 418 00:18:15,720 --> 00:18:44,369 Ah, claro, es que he puesto aquí el retun 419 00:18:44,369 --> 00:18:46,430 Perdón, es que estaba volviendo este loco 420 00:18:46,430 --> 00:18:47,289 Ah, sí 421 00:18:47,289 --> 00:18:50,730 Perdón, que tenía ahí impuesto el retun 422 00:18:50,730 --> 00:18:56,680 Y ahora me falta el new 423 00:18:56,680 --> 00:18:59,380 Ahora, ya está 424 00:18:59,380 --> 00:19:01,920 Si el nacimiento es negativo 425 00:19:01,920 --> 00:19:03,400 Aviso con un aviso específico 426 00:19:03,400 --> 00:19:05,740 Lánzame una nueva nacimiento negativo excepción 427 00:19:05,740 --> 00:19:07,880 Me creo mi clase 428 00:19:07,880 --> 00:19:14,140 Y ya está 429 00:19:14,140 --> 00:19:16,819 ¿Que quiero un mensajito? 430 00:19:16,940 --> 00:19:17,839 Pues mensajito 431 00:19:17,839 --> 00:19:39,059 Pues porque no me estáis haciendo ni caso 432 00:19:39,059 --> 00:19:40,000 Y vamos con prisa 433 00:19:40,000 --> 00:19:41,240 Esencialmente por eso 434 00:19:41,240 --> 00:19:43,480 Bueno, bueno 435 00:19:43,480 --> 00:19:47,319 Aquí estáis todos ya pensando en recoger 436 00:19:47,319 --> 00:19:58,390 Año negativo 437 00:19:58,390 --> 00:20:00,210 Vale 438 00:20:00,210 --> 00:20:03,269 Ahí está 439 00:20:03,269 --> 00:20:05,690 Dentro de 440 00:20:05,690 --> 00:20:07,730 Esto debería ponerlo en un paquete aparte 441 00:20:07,730 --> 00:20:08,750 Un paquete excepciones 442 00:20:08,750 --> 00:20:10,210 Debería ponerlo en un paquete exception 443 00:20:10,210 --> 00:20:12,569 Ya que la he hecho fuera 444 00:20:12,569 --> 00:20:14,829 Voy a ponerla aquí 445 00:20:14,829 --> 00:20:17,130 Bien, exception 446 00:20:17,130 --> 00:20:18,829 Exception 447 00:20:18,829 --> 00:20:22,950 Y voy a moverla de aquí a aquí 448 00:20:22,950 --> 00:20:29,339 ¡Hala! Ya la tengo aquí 449 00:20:29,339 --> 00:20:35,200 Y ya está 450 00:20:35,200 --> 00:20:39,099 ¿Vale? 451 00:20:39,359 --> 00:20:41,440 Y ahora ya esta clase ya sí que avisa 452 00:20:41,440 --> 00:20:42,940 Correctamente, a ver si 453 00:20:42,940 --> 00:20:45,079 Esta clase sí avisa 454 00:20:45,079 --> 00:20:47,119 Correctamente, pero claro 455 00:20:47,119 --> 00:20:48,759 Oye, que tienes que avisar 456 00:20:48,759 --> 00:20:50,220 ¿Por qué? Porque la ha hecho 457 00:20:50,220 --> 00:20:51,500 Exception 458 00:20:51,500 --> 00:20:53,319 Recordad que 459 00:20:53,319 --> 00:20:55,839 exception o runtime exception 460 00:20:55,839 --> 00:20:56,640 como uno quiera 461 00:20:56,640 --> 00:20:59,039 si la dejamos como exception 462 00:20:59,039 --> 00:21:00,819 pues entonces tengo que avisar 463 00:21:00,819 --> 00:21:02,559 que este método puede dar excepción 464 00:21:02,559 --> 00:21:04,460 pues a la throws 465 00:21:04,460 --> 00:21:06,799 y ahora ya 466 00:21:06,799 --> 00:21:08,220 mi app alumnos 467 00:21:08,220 --> 00:21:11,140 si yo creo alumno bien creado 468 00:21:11,140 --> 00:21:12,380 bien creado 469 00:21:12,380 --> 00:21:14,779 automáticamente en cuanto crea alumno 470 00:21:14,779 --> 00:21:16,000 bien creado ya pum 471 00:21:16,000 --> 00:21:18,420 ya desde tiempo de compilación de desarrollo 472 00:21:18,420 --> 00:21:21,140 ya me salta el aviso rojo que es lo bueno y lo bonito 473 00:21:21,140 --> 00:21:23,039 que yo estoy haciendo código 474 00:21:23,039 --> 00:21:24,240 Y automáticamente vea 475 00:21:24,240 --> 00:21:25,960 Uy, ¿por qué se ha puesto rojo? 476 00:21:27,619 --> 00:21:29,619 Espérate, es que esto puede ser 477 00:21:29,619 --> 00:21:31,180 Que dé un aviso 478 00:21:31,180 --> 00:21:32,319 De que el año es negativo 479 00:21:32,319 --> 00:21:34,259 Cuidado, pues entonces si el año es negativo 480 00:21:34,259 --> 00:21:36,240 Yo ya sé que tengo que capturar, etc 481 00:21:36,240 --> 00:21:38,559 Entonces mucho mejor que no decir nada 482 00:21:38,559 --> 00:21:40,720 Y si me da un null, pues ¿qué hago con el null? 483 00:21:40,799 --> 00:21:41,420 Pues yo qué sé 484 00:21:41,420 --> 00:21:45,019 Entonces ahora esto yo ya lo podría capturar 485 00:21:45,019 --> 00:21:49,660 Y ya 486 00:21:49,660 --> 00:21:52,900 Haría aquí lo que quisiera 487 00:21:52,900 --> 00:22:11,660 Vale, capturarlo, si el año es negativo exception, pues nada, no hago nada, y si, vale, ya haría 488 00:22:11,660 --> 00:22:18,200 lo que quisiera, lo metería en un bucle, lo que fuera, bueno, lo dejamos así, con 489 00:22:18,200 --> 00:22:24,859 la excepción pendiente de capturar, pero luego ya la podemos capturar, vale, venga,