1 00:00:04,980 --> 00:00:06,540 Venga, vamos a terminarlo. 2 00:00:07,960 --> 00:00:09,400 Vale, estábamos, ¿verdad? 3 00:00:09,980 --> 00:00:11,519 Este método getVoto 4 00:00:11,519 --> 00:00:13,339 versión 2 puede 5 00:00:13,339 --> 00:00:15,359 lanzar una excepción, por eso tiene el throw. 6 00:00:15,859 --> 00:00:16,719 Puede lanzar una excepción. 7 00:00:17,620 --> 00:00:19,140 Entonces, como puede lanzarla, 8 00:00:20,160 --> 00:00:21,420 el programa que lo 9 00:00:21,420 --> 00:00:23,260 llama me dice, uy, 10 00:00:24,059 --> 00:00:25,500 este lo siento, pero puede 11 00:00:25,500 --> 00:00:27,460 que lance una excepción. No te dejo seguir. 12 00:00:27,460 --> 00:00:29,079 El compilador se planta ahí 13 00:00:29,079 --> 00:00:31,219 y dice, no te dejo seguir, 14 00:00:31,339 --> 00:00:33,520 con lo cual no podemos ejecutar ni hacer nada, lógicamente, 15 00:00:33,600 --> 00:00:34,240 si no compila. 16 00:00:34,979 --> 00:00:36,020 Vale, no te dejo seguir. 17 00:00:36,960 --> 00:00:38,280 Entonces, ¿qué hemos hecho nosotros? 18 00:00:39,280 --> 00:00:41,240 Pues hemos dicho, pues entonces no nos queda más remedio, 19 00:00:41,340 --> 00:00:42,859 ahí la semimentira, 20 00:00:43,420 --> 00:00:46,280 no nos queda más remedio que hacer un try-catch para decir, 21 00:00:46,439 --> 00:00:50,899 oye, intenta hacerlo y si lanza la excepción, 22 00:00:51,079 --> 00:00:53,920 voto no válido excepción, que es la que puede lanzar, 23 00:00:54,420 --> 00:00:55,979 pues ya lo que quieras. 24 00:00:56,740 --> 00:00:58,679 Lo que quieras, como si es nada. 25 00:00:59,280 --> 00:01:01,240 Lo que quiera, lo que el programador quiera y decida. 26 00:01:01,799 --> 00:01:04,099 Pero el try-catch hay que ponerlo, ¿vale? 27 00:01:04,980 --> 00:01:06,219 Es decir, yo podría 28 00:01:06,219 --> 00:01:08,200 Quiero no haber puesto nada, en realidad 29 00:01:08,200 --> 00:01:11,219 ¿Vale? 30 00:01:11,939 --> 00:01:14,000 Y ya está, y el compilador se queda 31 00:01:14,000 --> 00:01:15,980 Tranquilo, porque la he 32 00:01:15,980 --> 00:01:17,739 Capturado, la he capturado 33 00:01:17,739 --> 00:01:19,900 Pero en el caso de que salga, no hago 34 00:01:19,900 --> 00:01:20,840 Absolutamente nada 35 00:01:20,840 --> 00:01:23,599 ¿Vale? Esto es una regla de 36 00:01:23,599 --> 00:01:25,819 Compilación, simplemente, pero por lo menos lo has 37 00:01:25,819 --> 00:01:28,000 Capturado, este rojo es porque podría 38 00:01:28,000 --> 00:01:29,599 Estar sin inicializar, pero no es por 39 00:01:29,599 --> 00:01:31,579 La excepción, ¿vale? 40 00:01:31,799 --> 00:01:33,780 Pero bueno, es la idea, si tú capturas 41 00:01:33,780 --> 00:01:35,719 Es para 42 00:01:35,719 --> 00:01:39,859 si tú capturas 43 00:01:39,859 --> 00:01:41,379 es para dar una alternativa 44 00:01:41,379 --> 00:01:43,280 claro, vale 45 00:01:43,280 --> 00:01:45,439 bueno, pues la semi mentira 46 00:01:45,439 --> 00:01:49,439 no es obligatorio capturar 47 00:01:49,439 --> 00:01:51,420 es decir, si yo quito esto 48 00:01:51,420 --> 00:01:58,060 el compilador 49 00:01:58,060 --> 00:02:00,420 efectivamente me dice, uy lo siento 50 00:02:00,420 --> 00:02:02,400 vale, pero yo no quiero 51 00:02:02,400 --> 00:02:03,420 capturar, no quiero 52 00:02:03,420 --> 00:02:05,700 pues tengo una opción que es 53 00:02:05,700 --> 00:02:07,799 propagar, vale 54 00:02:07,799 --> 00:02:12,020 capturamos 55 00:02:12,020 --> 00:02:14,300 es lo que hemos hecho antes o 56 00:02:14,300 --> 00:02:16,479 propagamos 57 00:02:16,479 --> 00:02:18,919 son las dos cosas que podemos hacer 58 00:02:18,919 --> 00:02:20,960 llegados a este punto 59 00:02:20,960 --> 00:02:22,860 para solucionar este error 60 00:02:22,860 --> 00:02:24,780 de compilación, o capturamos 61 00:02:24,780 --> 00:02:26,919 que es lo que hemos hecho antes y solucionado 62 00:02:26,919 --> 00:02:29,060 o propagamos, que significa 63 00:02:29,060 --> 00:02:31,479 propagar, me desentiendo 64 00:02:31,479 --> 00:02:33,180 y esa excepción que me ha llegado 65 00:02:33,180 --> 00:02:33,520 a mí 66 00:02:33,520 --> 00:02:37,039 el método en el que estoy que la propague 67 00:02:37,039 --> 00:02:38,960 al de arriba y ya está, eso significa 68 00:02:38,960 --> 00:02:41,020 propagar, entonces 69 00:02:41,020 --> 00:02:43,000 que es la otra 70 00:02:43,000 --> 00:02:47,060 opción que me da aquí el compilador, ¿vale? Cuando yo pincho me da 71 00:02:47,060 --> 00:02:50,960 dos, o capturas, que se le envuelve 72 00:02:50,960 --> 00:02:54,919 con try-catch, o propaga, la de arriba es propaga 73 00:02:54,919 --> 00:02:59,280 ¿y qué significa propagar? Propagar significa 74 00:02:59,280 --> 00:03:03,159 que el método, el método en el que 75 00:03:03,159 --> 00:03:06,900 se lanza esta excepción, que en este caso es el main ya 76 00:03:06,900 --> 00:03:10,979 directamente, podría ser otro, pero es el main, el método avise 77 00:03:10,979 --> 00:03:13,900 Y diga, oye, puede ser que yo lance 78 00:03:13,900 --> 00:03:16,000 Voto no válido, puede ser que yo lo lance 79 00:03:16,000 --> 00:03:17,300 Porque aquí este 80 00:03:17,300 --> 00:03:18,479 No ha capturado 81 00:03:18,479 --> 00:03:20,719 Entonces como aquí este no ha capturado 82 00:03:20,719 --> 00:03:24,020 Lo siento, pero puede ser que lo tenga que lanzar 83 00:03:24,020 --> 00:03:24,319 Yo 84 00:03:24,319 --> 00:03:27,520 Entonces son las dos opciones 85 00:03:27,520 --> 00:03:29,400 Para quitarse ese error de compilación 86 00:03:29,400 --> 00:03:32,639 ¿Cuál cogemos? 87 00:03:32,639 --> 00:03:34,319 Pues depende del contexto 88 00:03:34,319 --> 00:03:37,460 Aquí en el main sería muy mala idea 89 00:03:37,460 --> 00:03:39,419 Coger esta de propagar 90 00:03:39,419 --> 00:03:42,479 porque que significa un throws en el main 91 00:03:42,479 --> 00:03:43,659 que cuando la excepción llega 92 00:03:43,659 --> 00:03:46,539 el main ya no tiene nadie más a quien pasársela 93 00:03:46,539 --> 00:03:47,460 se para todo 94 00:03:47,460 --> 00:03:48,939 vale 95 00:03:48,939 --> 00:03:52,620 pero este getBoto podría estar en otro método 96 00:03:52,620 --> 00:03:53,860 no en el main directamente 97 00:03:53,860 --> 00:03:56,099 entonces el throws pasa al método de arriba 98 00:03:56,099 --> 00:03:58,340 y ahora el que llama al método 99 00:03:58,340 --> 00:04:00,120 le queda la oportunidad de capturar 100 00:04:00,120 --> 00:04:01,639 si quiere, a él si le queda 101 00:04:01,639 --> 00:04:07,129 vale, pero en este caso 102 00:04:07,129 --> 00:04:09,030 el getBoto2, el método 103 00:04:09,030 --> 00:04:10,310 que lo envuelve es el main 104 00:04:10,310 --> 00:04:13,650 Entonces, ¿qué implica poner un throws en el main? 105 00:04:14,210 --> 00:04:15,669 Que si esta excepción llega 106 00:04:15,669 --> 00:04:18,649 El main en ese momento se para 107 00:04:18,649 --> 00:04:19,550 ¿Vale? 108 00:04:21,899 --> 00:04:22,379 Entonces 109 00:04:22,379 --> 00:04:34,129 El catch lo he quitado para dar la otra opción 110 00:04:34,129 --> 00:04:37,490 Claro, es que estabas durmiendo, creo 111 00:04:37,490 --> 00:04:44,339 ¿Vale? 112 00:04:44,779 --> 00:04:45,220 Entonces 113 00:04:45,220 --> 00:04:48,300 Capturamos o propagamos 114 00:04:48,300 --> 00:04:49,899 Y aquí tenía yo el throws 115 00:04:49,899 --> 00:04:55,620 entonces 116 00:04:55,620 --> 00:04:57,920 si no lo meto en un try-catch 117 00:04:57,920 --> 00:04:59,220 si no lo meto en un try-catch 118 00:04:59,220 --> 00:05:01,959 ese método 119 00:05:01,959 --> 00:05:03,959 tiene que avisar de que entonces 120 00:05:03,959 --> 00:05:05,819 ahora soy yo, entonces ahora soy yo 121 00:05:05,819 --> 00:05:07,839 el que la puedo lanzar, pero claro 122 00:05:07,839 --> 00:05:09,560 que el main la lance es 123 00:05:09,560 --> 00:05:11,540 feo 124 00:05:11,540 --> 00:05:13,860 porque vamos a ejecutar ahora este programa 125 00:05:13,860 --> 00:05:15,779 pasándole un botón no válido 126 00:05:15,779 --> 00:05:17,920 ejecutamos esto 127 00:05:17,920 --> 00:05:19,279 venga, se presentan dos 128 00:05:19,279 --> 00:05:21,000 que son aa y bb 129 00:05:21,000 --> 00:05:22,660 Dime nombre 130 00:05:22,660 --> 00:05:23,560 Este 131 00:05:23,560 --> 00:05:26,170 Pum 132 00:05:26,170 --> 00:05:27,790 Excepción lanzada 133 00:05:27,790 --> 00:05:30,829 La excepción no la he capturado 134 00:05:30,829 --> 00:05:32,470 La he mandado al main 135 00:05:32,470 --> 00:05:34,730 El main para el programa 136 00:05:34,730 --> 00:05:35,449 Y se acabó 137 00:05:35,449 --> 00:05:37,250 Y este programa ha terminado 138 00:05:37,250 --> 00:05:38,269 Se acabó 139 00:05:38,269 --> 00:05:40,310 Porque ha salido la excepción 140 00:05:40,310 --> 00:05:41,230 Voto no válido 141 00:05:41,230 --> 00:05:41,790 Excepción 142 00:05:41,790 --> 00:05:45,879 Y no está capturada 143 00:05:45,879 --> 00:05:47,680 No está capturada 144 00:05:47,680 --> 00:05:49,220 Está soplantado ahí 145 00:05:49,220 --> 00:05:52,060 No está capturada 146 00:05:52,060 --> 00:05:55,600 Sino que está puesto aquí en el main 147 00:05:55,600 --> 00:05:56,839 Que puede que lance 148 00:05:56,839 --> 00:06:08,399 Bueno, más o menos he entendido todo 149 00:06:08,399 --> 00:06:09,220 Seguido todo 150 00:06:09,220 --> 00:06:11,000 Sí 151 00:06:11,000 --> 00:06:17,259 Y no hay nada que os choque con el pasado 152 00:06:17,259 --> 00:06:21,660 Ninguna pregunta 153 00:06:21,660 --> 00:06:23,319 Algo que os resulte chocante 154 00:06:23,319 --> 00:06:24,920 Uy, entonces porque hasta ahora 155 00:06:24,920 --> 00:06:28,610 ¿Vale? 156 00:06:28,750 --> 00:06:31,029 Es decir, situación 157 00:06:31,029 --> 00:06:33,589 Imaginaos que yo aquí no tengo ningún 158 00:06:33,589 --> 00:06:34,470 Throws puesto 159 00:06:34,470 --> 00:06:37,730 Que es lo que hemos hecho hasta ahora 160 00:06:37,730 --> 00:06:39,689 nuestros main hasta no tenían ningún throw 161 00:06:39,689 --> 00:06:40,689 nunca tenían un throw 162 00:06:40,689 --> 00:06:42,370 ¿vale? 163 00:06:44,990 --> 00:06:47,569 entonces, esta sentencia puede que lance 164 00:06:47,569 --> 00:06:49,470 una excepción, como next int 165 00:06:49,470 --> 00:06:51,569 next int también puede que lance una excepción 166 00:06:51,569 --> 00:06:51,750 ¿no? 167 00:06:53,589 --> 00:06:55,370 por ejemplo, imagínate que yo aquí 168 00:06:55,370 --> 00:06:57,370 tengo un escáner puesto, imagínate que aquí 169 00:06:57,370 --> 00:06:58,569 me da a mí la gana poner 170 00:06:58,569 --> 00:07:02,420 volver a poner algo 171 00:07:02,420 --> 00:07:03,879 next int 172 00:07:03,879 --> 00:07:08,850 estas dos situaciones son 173 00:07:08,850 --> 00:07:10,410 conceptualmente idénticas 174 00:07:10,410 --> 00:07:13,089 este es un método al que yo llamo 175 00:07:13,089 --> 00:07:14,930 que puede que lance una excepción 176 00:07:14,930 --> 00:07:17,110 la input miss match excepción 177 00:07:17,110 --> 00:07:19,410 este es un método 178 00:07:19,410 --> 00:07:21,089 que yo llamo que puede que lance 179 00:07:21,089 --> 00:07:22,850 una excepción, la de voto no válido 180 00:07:22,850 --> 00:07:24,430 pero 181 00:07:24,430 --> 00:07:26,170 no se están comportando igual 182 00:07:26,170 --> 00:07:29,129 en esta el compilador me está 183 00:07:29,129 --> 00:07:30,209 diciendo, eh tú 184 00:07:30,209 --> 00:07:33,189 que puede que esto te lance 185 00:07:33,189 --> 00:07:34,990 voto no válido, de aquí no paso 186 00:07:34,990 --> 00:07:37,149 a menos que me captures 187 00:07:37,149 --> 00:07:39,310 con un try catch o que me avises 188 00:07:39,310 --> 00:07:40,850 en el main, elige 189 00:07:40,850 --> 00:07:41,870 captura propaga 190 00:07:41,870 --> 00:07:45,149 Sin embargo, esta es una situación idéntica 191 00:07:45,149 --> 00:07:46,290 Next int 192 00:07:46,290 --> 00:07:47,930 Si nos metiéramos dentro del código 193 00:07:47,930 --> 00:07:50,009 Vemos que en algún momento tiene su throw 194 00:07:50,009 --> 00:07:51,569 ¿Verdad? 195 00:07:51,970 --> 00:07:54,230 Si nos metemos en el código de next int 196 00:07:54,230 --> 00:08:00,089 Aquí 197 00:08:00,089 --> 00:08:04,430 ¿Cómo se busca aquí? 198 00:08:04,990 --> 00:08:06,509 Control F 199 00:08:06,509 --> 00:08:07,490 Throw 200 00:08:07,490 --> 00:08:09,269 Tendrá un throw en algo 201 00:08:09,269 --> 00:08:11,949 No, el mismatch input, mismatch exception 202 00:08:11,949 --> 00:08:20,269 Ay, joder, lo estoy haciendo mal 203 00:08:20,269 --> 00:08:29,240 No, la te va antes 204 00:08:29,240 --> 00:08:30,959 Es que la te va antes, jolines 205 00:08:30,959 --> 00:08:33,340 TCH 206 00:08:33,340 --> 00:08:34,740 Ahora sí, ¿vale? 207 00:08:37,740 --> 00:08:39,620 Vale, aquí lo tenemos 208 00:08:39,620 --> 00:08:42,740 ¿Veis? 209 00:08:43,720 --> 00:08:45,600 Este es el método nextIn 210 00:08:45,600 --> 00:08:47,879 Que si pasa algo raro 211 00:08:47,879 --> 00:08:50,039 Me hace un 212 00:08:50,039 --> 00:08:51,740 Throw new input 213 00:08:51,740 --> 00:08:53,899 MissMatchException, que es la que yo veo arriba 214 00:08:53,899 --> 00:08:55,779 Con lo cual estamos en la misma 215 00:08:55,779 --> 00:08:56,519 Situación 216 00:08:56,519 --> 00:08:59,700 Este puede que 217 00:08:59,700 --> 00:09:01,600 me lance un input mismatch 218 00:09:01,600 --> 00:09:03,779 exception, este 219 00:09:03,779 --> 00:09:05,500 puede que me lance un botón 220 00:09:05,500 --> 00:09:07,519 no válido, aquí el compilador 221 00:09:07,519 --> 00:09:09,019 se ha plantado y me ha dicho 222 00:09:09,019 --> 00:09:11,600 o capturas o propagas, pero no te dejo 223 00:09:11,600 --> 00:09:13,600 seguir, y aquí el compilador 224 00:09:13,600 --> 00:09:16,500 le da lo mismo 225 00:09:16,500 --> 00:09:18,240 ¿vale? 226 00:09:18,799 --> 00:09:20,919 eso es lo que identificamos que nos choca 227 00:09:20,919 --> 00:09:22,940 ¿verdad? hasta ahora hemos 228 00:09:22,940 --> 00:09:24,820 llamado a métodos que podían lanzar 229 00:09:24,820 --> 00:09:26,980 excepciones y no hemos tenido ni que capturarlos 230 00:09:26,980 --> 00:09:28,620 ni que propagar, no se ha podido 231 00:09:28,620 --> 00:09:29,580 despreocupar de ellos 232 00:09:29,580 --> 00:09:32,200 de hecho cuando llamamos 233 00:09:32,200 --> 00:09:34,779 al método get de ArrayList 234 00:09:34,779 --> 00:09:36,639 si le pasamos 235 00:09:36,639 --> 00:09:38,379 una posición que no esté en el list 236 00:09:38,379 --> 00:09:40,720 ya sabemos que nos sale 237 00:09:40,720 --> 00:09:41,679 una excepción también 238 00:09:41,679 --> 00:09:44,779 ¿vale? o en un string 239 00:09:44,779 --> 00:09:46,779 con charad, si le pasamos 240 00:09:46,779 --> 00:09:48,679 una posición que no esté, ya sabemos que nos sale 241 00:09:48,679 --> 00:09:50,720 string y no hemos tenido 242 00:09:50,720 --> 00:09:52,539 ni que propagar ni que capturar 243 00:09:52,539 --> 00:09:54,279 ¿por qué aquí sí? 244 00:09:56,059 --> 00:09:56,720 bueno, pues la 245 00:09:56,720 --> 00:09:58,700 respuesta es porque hay dos tipos de 246 00:09:58,700 --> 00:10:02,289 excepciones. Las excepciones 247 00:10:02,289 --> 00:10:04,009 que es obligatorio capturar 248 00:10:04,009 --> 00:10:06,149 y propagar, que en principio 249 00:10:06,149 --> 00:10:08,350 serían todas, y luego 250 00:10:08,350 --> 00:10:09,549 una subclase 251 00:10:09,549 --> 00:10:12,309 que son las que se llaman de tiempo de ejecución 252 00:10:12,309 --> 00:10:13,690 que no 253 00:10:13,690 --> 00:10:16,389 es obligatorio a nivel de código 254 00:10:16,389 --> 00:10:18,509 capturarlas ni propagarlas. 255 00:10:18,610 --> 00:10:20,269 No es obligatorio. Es que si 256 00:10:20,269 --> 00:10:21,950 todas fueran 257 00:10:21,950 --> 00:10:24,429 obligatorias de capturar y propagar 258 00:10:24,429 --> 00:10:25,809 nuestros códigos, serían 259 00:10:25,809 --> 00:10:28,309 una ristra de try-cats por todos 260 00:10:28,309 --> 00:10:30,190 lados. Sería un horror. Pues no, hay una 261 00:10:30,190 --> 00:10:31,470 subclase de excepción 262 00:10:31,470 --> 00:10:34,350 que es la runtime exception 263 00:10:34,350 --> 00:10:36,110 que si mi excepción es de esa clase 264 00:10:36,110 --> 00:10:38,149 no es obligatorio capturarla 265 00:10:38,149 --> 00:10:38,830 ni propagarla 266 00:10:38,830 --> 00:10:42,250 por ejemplo, en mi voto no valido 267 00:10:42,250 --> 00:10:42,909 excepción 268 00:10:42,909 --> 00:10:46,529 veis que aquí el compilador me obliga 269 00:10:46,529 --> 00:10:48,409 o la capturas o la propagas, lo siento 270 00:10:48,409 --> 00:10:49,049 me obliga 271 00:10:49,049 --> 00:10:51,889 pero yo me vengo aquí y digo, no, espera 272 00:10:51,889 --> 00:10:53,490 tú no seas excepción 273 00:10:53,490 --> 00:10:55,330 sé de esta clase 274 00:10:55,330 --> 00:10:57,870 que es una subclase 275 00:10:57,870 --> 00:11:00,269 ser runtime exception 276 00:11:00,269 --> 00:11:01,830 que es una subclase particular 277 00:11:01,830 --> 00:11:03,330 que son excepciones 278 00:11:03,330 --> 00:11:06,269 que no necesitan 279 00:11:06,269 --> 00:11:08,429 ser tratadas en tiempo de compilación 280 00:11:08,429 --> 00:11:10,389 por eso se llaman runtime, por tiempo de ejecución 281 00:11:10,389 --> 00:11:11,990 son excepciones 282 00:11:11,990 --> 00:11:14,250 solo de tiempo de ejecución, no necesitan ser 283 00:11:14,250 --> 00:11:16,309 tratadas en tiempo de compilación 284 00:11:16,309 --> 00:11:18,370 pues si yo decido que esta 285 00:11:18,370 --> 00:11:20,269 no es lo suficientemente 286 00:11:20,889 --> 00:11:21,570 válida 287 00:11:21,570 --> 00:11:24,129 como para ya desde tiempo de compilación decir 288 00:11:24,129 --> 00:11:26,009 oye de aquí no pasas a menos que no te pronuncies 289 00:11:26,009 --> 00:11:28,129 pues la hago de tipo runtime 290 00:11:28,129 --> 00:11:30,529 ¿vale? y si la hago de tipo runtime 291 00:11:30,529 --> 00:11:32,509 ¿qué ha pasado en cuanto lo ha hecho de tipo runtime? 292 00:11:33,009 --> 00:11:34,649 que el compilador ya me ha dejado 293 00:11:34,649 --> 00:11:35,009 seguir 294 00:11:35,009 --> 00:11:38,649 como si fuera el next scene, como si fuera cualquier otra 295 00:11:38,649 --> 00:11:40,389 no tengo ni que capturar 296 00:11:40,389 --> 00:11:41,850 ni que propagar 297 00:11:41,850 --> 00:11:47,659 la puedo capturar si quiero 298 00:11:47,659 --> 00:11:52,129 pero no es obligatorio en tiempo de 299 00:11:52,129 --> 00:11:53,970 compilación, entonces depende 300 00:11:53,970 --> 00:11:56,029 de la trascendencia del diseño que yo 301 00:11:56,029 --> 00:11:57,049 quiera hacer de mil cosas 302 00:11:57,049 --> 00:12:00,049 pues lo puedo hacer para que no 303 00:12:00,049 --> 00:12:01,870 podamos ir a la ejecución 304 00:12:01,870 --> 00:12:03,509 si yo no he dado un camino alternativo 305 00:12:03,509 --> 00:12:06,210 o que no pasa nada, que avise 306 00:12:06,210 --> 00:12:08,330 que avise con excepción, que eso es lo bueno 307 00:12:08,330 --> 00:12:10,409 pero si yo no quiero capturar 308 00:12:10,409 --> 00:12:12,509 pues nada, ya parará, parará el programa 309 00:12:12,509 --> 00:12:13,610 y se acabó 310 00:12:13,610 --> 00:12:19,340 vale, pues entonces 311 00:12:19,340 --> 00:12:20,379 vamos a ponerlo aquí 312 00:12:20,379 --> 00:12:26,490 como el proyecto lo estará 313 00:12:26,490 --> 00:12:27,409 en el aula virtual 314 00:12:27,409 --> 00:12:31,370 adiós 315 00:12:31,370 --> 00:12:33,250 excepción 316 00:12:33,250 --> 00:12:33,950 es 317 00:12:33,950 --> 00:12:37,370 excepción 318 00:12:37,370 --> 00:12:54,700 Es obligatorio, por tanto, capturarla, es decir, try-catch, o propagarla, es decir, el throw en el código. 319 00:12:54,700 --> 00:13:00,120 Sin embargo 320 00:13:00,120 --> 00:13:02,019 Si la excepción 321 00:13:02,019 --> 00:13:03,740 Exception 322 00:13:03,740 --> 00:13:05,879 Es 323 00:13:05,879 --> 00:13:07,299 RoomTime 324 00:13:07,299 --> 00:13:12,200 Exception 325 00:13:12,200 --> 00:13:14,039 Pues entonces 326 00:13:14,039 --> 00:13:17,139 No es obligatorio 327 00:13:17,139 --> 00:13:19,159 El compilador no obliga 328 00:13:19,159 --> 00:13:20,840 No es 329 00:13:20,840 --> 00:13:23,580 Obligatorio 330 00:13:23,580 --> 00:13:32,360 Vale, dependerá 331 00:13:32,360 --> 00:13:33,200 Dependerá de 332 00:13:33,200 --> 00:13:35,879 Que reglas queramos imponer en la aplicación 333 00:13:35,879 --> 00:13:36,519 Lo que sea 334 00:13:36,519 --> 00:13:53,179 Bueno, pues de esto va más o menos 335 00:13:53,179 --> 00:13:54,679 El rollo de las excepciones 336 00:13:54,679 --> 00:13:57,320 ¿Vale? Hay otra cosa que son 337 00:13:57,320 --> 00:13:58,820 Errores 338 00:13:58,820 --> 00:14:01,159 O sea, si vamos a mirar la jerarquía 339 00:14:01,159 --> 00:14:02,320 De excepción 340 00:14:02,320 --> 00:14:06,500 Mira, ya que tengo este abierto 341 00:14:06,500 --> 00:14:09,120 Dame una imagen 342 00:14:09,120 --> 00:14:13,820 De la 343 00:14:13,820 --> 00:14:18,610 Jerarquía 344 00:14:18,610 --> 00:14:20,509 Bajo 345 00:14:20,509 --> 00:14:24,129 Fruable 346 00:14:24,129 --> 00:14:25,970 en Java 347 00:14:25,970 --> 00:14:45,759 bueno, casi mejor la buscamos aquí 348 00:14:45,759 --> 00:14:48,519 jerarquía 349 00:14:48,519 --> 00:14:50,179 excepción 350 00:14:50,179 --> 00:15:12,419 vale, esta es la jerarquía 351 00:15:12,419 --> 00:15:14,240 en la que algunas nos suenan, ¿verdad? 352 00:15:16,799 --> 00:15:17,980 esta es una interfaz 353 00:15:17,980 --> 00:15:20,100 que acá en Able nos suena 354 00:15:20,100 --> 00:15:21,500 interfaz, ¿vale? es un row 355 00:15:21,500 --> 00:15:24,139 entonces cualquier cosa que 356 00:15:24,139 --> 00:15:25,440 implemente throwable 357 00:15:25,440 --> 00:15:27,559 la puedes lanzar con un throw 358 00:15:27,559 --> 00:15:30,279 pones un throw, cualquier cosa que implemente 359 00:15:30,279 --> 00:15:31,899 probable, la puedes lanzar y llega 360 00:15:31,899 --> 00:15:34,539 al punto donde se llamó el método 361 00:15:34,539 --> 00:15:36,399 y dentro de las 362 00:15:36,399 --> 00:15:38,700 cosas lanzables 363 00:15:38,700 --> 00:15:40,679 están las excepciones 364 00:15:40,679 --> 00:15:42,960 y los errores 365 00:15:42,960 --> 00:15:44,600 que también 366 00:15:44,600 --> 00:15:46,399 podemos crear nuestros propios errores 367 00:15:46,399 --> 00:15:47,820 voto no válido, error 368 00:15:47,820 --> 00:15:49,580 ¿vale? 369 00:15:50,200 --> 00:15:51,179 que están mal las flechas 370 00:15:51,179 --> 00:15:57,399 a ver, no, en los diagramas de clases 371 00:15:57,399 --> 00:15:58,679 van así 372 00:15:58,679 --> 00:15:59,159 de hecho 373 00:15:59,159 --> 00:16:01,740 los diagramas de bases de datos 374 00:16:01,740 --> 00:16:04,120 cuando haces las relaciones, la flecha va para arriba 375 00:16:04,120 --> 00:16:05,299 ¿no? claro 376 00:16:05,299 --> 00:16:08,179 vale, entonces, los errores 377 00:16:08,179 --> 00:16:09,940 conceptualmente en realidad 378 00:16:09,940 --> 00:16:12,080 o sea, más que conceptualmente 379 00:16:12,080 --> 00:16:14,019 en código, es que es igual que es una 380 00:16:14,019 --> 00:16:15,960 excepción, es algo que tú puedes lanzar con un 381 00:16:15,960 --> 00:16:17,379 throw y ya está 382 00:16:17,379 --> 00:16:19,600 lo que pasa es que para los errores 383 00:16:19,600 --> 00:16:21,919 se suelen dejar cosas que tú 384 00:16:21,919 --> 00:16:24,200 no quieres capturar, porque son lo suficientemente 385 00:16:24,200 --> 00:16:25,899 graves como para 386 00:16:25,899 --> 00:16:27,659 que no, el programa no 387 00:16:27,659 --> 00:16:31,159 no quiera seguir, no tenga por qué seguir 388 00:16:31,159 --> 00:16:33,120 ¿vale? por eso el stack 389 00:16:33,120 --> 00:16:34,919 overflow es un error 390 00:16:34,919 --> 00:16:37,000 no es una excepción, porque si tú te has 391 00:16:37,000 --> 00:16:38,960 cargado la pila, lo que quieres 392 00:16:38,960 --> 00:16:41,039 es que el programa pare, entonces por eso 393 00:16:41,039 --> 00:16:41,919 esto está como error 394 00:16:41,919 --> 00:16:44,919 ¿que te has quedado sin memoria? pues también 395 00:16:44,919 --> 00:16:46,419 está como error, no como excepción 396 00:16:46,419 --> 00:16:48,419 porque los errores 397 00:16:48,419 --> 00:16:50,879 no están pensados para capturar, cuando tú 398 00:16:50,879 --> 00:16:53,200 ves que algo es un error, no lo capturas 399 00:16:53,200 --> 00:16:54,419 dices, pues ya parará el programa 400 00:16:54,419 --> 00:16:56,360 ya parará, ¿vale? 401 00:16:57,659 --> 00:17:11,740 Y las excepciones, pues tienen una subclase, como he dicho, la runtime, que estas no es obligatorio capturarlas. Bueno, y aquí ha puesto unas cuantas. ¿Veis? Esta nos suena. 402 00:17:11,740 --> 00:17:14,079 index out of bound cuando nos hemos pasado de un array 403 00:17:14,079 --> 00:17:16,380 esta nos ha salido a veces 404 00:17:16,380 --> 00:17:18,019 y efectivamente hereda 405 00:17:18,019 --> 00:17:19,579 de long time, no hemos necesitado 406 00:17:19,579 --> 00:17:21,220 capturarla ni propagarla 407 00:17:21,220 --> 00:17:24,160 esta también nos suena, nos ha salido a veces 408 00:17:24,160 --> 00:17:27,940 cuando nos pasábamos del array 409 00:17:27,940 --> 00:17:30,420 esta también cuando dividíamos por 0 410 00:17:30,420 --> 00:17:32,259 esta cuando intentábamos 411 00:17:32,259 --> 00:17:33,920 convertir con un integer parse in 412 00:17:33,920 --> 00:17:34,980 algo que no es un entero 413 00:17:34,980 --> 00:17:38,099 entonces todas estas en rojitas 414 00:17:38,099 --> 00:17:40,200 no es necesario capturarlas 415 00:17:40,200 --> 00:17:41,119 ni propagarlas 416 00:17:41,119 --> 00:17:43,480 Porque acaban heredando de aquí 417 00:17:43,480 --> 00:17:44,279 De alguna manera 418 00:17:44,279 --> 00:17:48,140 Estas sí hay que capturarlas y programarlas 419 00:17:48,140 --> 00:17:49,000 Pero vamos, estos son 420 00:17:49,000 --> 00:17:51,099 Unos ejemplos de las 421 00:17:51,099 --> 00:17:53,559 Entre 300 y 500 que dice que hay 422 00:17:53,559 --> 00:17:55,279 ¿Vale? 423 00:17:56,160 --> 00:17:57,339 Las llama, las cheque 424 00:17:57,339 --> 00:17:59,720 O sea que tienes que verificarlas 425 00:17:59,720 --> 00:18:00,920 Y estas las que no 426 00:18:00,920 --> 00:18:05,170 Bueno 427 00:18:05,170 --> 00:18:08,630 Pues venga 428 00:18:08,630 --> 00:18:09,970 Vamos a poner unos 429 00:18:09,970 --> 00:18:12,349 Ejercicios solamente 430 00:18:12,349 --> 00:18:12,890 De