Continuamos?
Veamos un ejemplo un poco más robusto la idea desacoplar esto de acá y puevlo, llevar a una clase toda
esta lógica de dividir, llevarlo a una clase, por ejemplo calculadora o aritmética con el método dividir.
Y también podríamos tener sobrecarga, por ejemplo, pasar enteros y dividir estos el numerador y el
divisor, pero también podrían ser del tipo string que se fijan y convertir.
Y ahí podrían ocurrir dos excepciones una convertir y otra al dividir dentro del mismo método.
Entonces, en ejemplo, vamos a crear una clase calculadora.
Perfecto.
Y acá métodos public.
Bueno, dividir.
Qué tipo de dato?
Un doble.
Entonces se va a recibir dos enteros entero y el entero.
Bueno, numerador y el divisor.
Bueno, va a retornar el numerador dividido en el dividendo.
Bien, pero acaso un 2 entero de forma automática se está convirtiendo a un tipo doble?
Pero la idea es que no pierda los decimales entonces.
Bueno, cualquiera de los dos tendría que ser del tipo doble.
Entonces acá podríamos convertir de alguna forma, por ejemplo, haciendo un cast, convertir un entero
a un doble.
Y eso sí que se puede.
Porque recuerden que de un tipo de menor tamaño, como es el entero de 32 bits de 32, se puede convertir
a uno de mayor tamaño de 64.
Cómo es el doble entonces acá?
Double.
Listo.
Ahí puedo mantener decimales y tener una precisión mucho más importante en el resultado.
Bien.
Pero acá podría lanzar una excepción.
Ya vimos, se fijan.
Bueno, qué pasa?
Bueno, esto acá ya lo voy a quitar.
Lo voy a comentar porque en vez de utilizar acá esta división, esta conversión, la vamos a llevar
a la clase calculadora.
Entonces, por ahora lo vamos a quitar o lo comentamos acá, le vamos a llamar división.
Lo vamos a definir acá en vez de divisor.
O mejor mantenemos divisor y acá hint la división.
Perfecto.
Por defecto es 0.
Pero división?
Recuerdas del tipo doble?
Doba Bien.
Cero se inicializa para que la podamos utilizar en el TRIE.
En este contexto, bien, vamos a crear la clase con el new, por ejemplo por acá calculadora caul igual
new calculadora.
Perfecto.
Entonces en división en vez de cero.
Bueno, por ahora Kaul punto dividir y que íbamos a dividir.
Bueno, este número, este valor, pero convertido a un integer.
Entonces bueno, es todo acá.
Por ahora lo vamos a llevar acá por ahora.
Perfecto.
Entonces era divisor.
Entonces vamos a colocar diez coma divisor.
Y si se fijan, no nos pide, no nos obliga a manejar el trait catch.
Claro, porque recuerden, es un tipo cheque, no es chequeada.
No estamos obligado a manejar el error ni contrae y en fin, ni siquiera tampoco estamos obligado a
lanzarlo acá, aunque lo podemos hacer de forma explícita.
Por ejemplo, throws y el nombre de excepción.
Bueno, aritmética se fijan.
Acá estamos relanzado, aliment, estamos indicando que vamos a lanzar o posiblemente se podría lanzar
esta acepción, pero si todo acá no nos pide por qué es no es chequeada.
Entonces, bueno, obviamente si ejecutamos esto y colocamos un divisor incorrecto, por ejemplo cero
o lo que sea, va a lanzar un error.
Por qué no está dentro del trait catch que se lanza al error la excepción y finaliza la ejecución,
tal como vimos en la clase anterior?
Entonces, por eso lo correcto es que esto esté dentro.
Pero bien, la idea de modificar este código para que en vez de lanzar un aritméticos exception lance
una excepción personalizada y qué tasi sea chequeada.
Es decir, nos obligue a manejar la excepción.
Y esa es la idea.
Entonces, en vez de lanzar esto, vamos a crear una clase decepción personalizada por acá.
Daba clases, le vamos a llamar división por cero.
Exception
excepto bueno, por general y por convención.
Todas nuestras clases implementadas decepción terminan con Exception, más que nada por un tema visual,
para que a simple vista sepamos de qué se trata de una clase de sección de manejo de error.
Entonces, por eso toda la clase termina con exception aritmética y septón culpó interseccion se fijan
number fórmate septón división por cero exception mantener esa misma nomenclatura.
Es tent.
Bueno, si heredamos de renta empezar chón va a quedar no chequeada, por lo tanto notaríamos obligada
a manejarla.
Pero si heredamos de Exception, sería chequeada entonces Exception.
Como opción o alternativa podría implementar constructor o podríamos utilizar constructor del padre,
pero el constructor del padre que utilizaríamos sería el por defecto, el sin parámetro.
Pero si queremos utilizar el constructor, de hecho control click acá tiene el constructor sin argumento
este que se utiliza por defecto.
Pero si quieres pasar un mensaje por defecto, tengo que meter este método, sólo escribirlo.
Se fijan bien y Theme tiene otro más.
Pero lo más típicos es el vacío y con algún mensaje.
Entonces vamos a escribir este constructor Public Division 0 Exception Todo acá
mensaje un string con el mensaje super.
Al padre le pasamos el mensaje miletto algo simple.
Bien, también expliqué la clase anterior de introducción que las clases que implementemos sus clases
o derivadas de septón por general no aporta mucho código, no aporta mucha lógica.
Podría tener un par de atributos, quizás algunos métodos, pero ni siquiera la gran mayoría son muy
simple, solamente heredan decepción a lo más el constructor para pasar un mensaje personalizado, pero
nada más.
Lo que importa acá es clasificación de manejo de error para poder personalizar.
Para poder lanzar nuestras excepciones específicas y después poder capturarlas según su tipo.
Pero mayor funcionalidad no aporta.
Entonces, justamente lo que vamos a hacer ahora implementar esta clase de excepción.
División por ser exception y la vamos a lanzar en calculadora.
Claro.
Entonces, en este método.
Vamos a quitar esto.
Se fijan, vamos a validar, es importante validar que el dividendo de dividendo es igual.
Acero perfecto.
Lanzamos la escepción recuerden que se lanza con fru fru new.
Creamos la instancia es un objeto división por cero excepto.
dirigÃan no se puede dividir por cero.
Las sábanas son perfectos, pero como estamos lanzando con fru y new, nos obliga a propagar esta acepción
en el método.
Por lo tanto, tenemos que definir quién este método obviamente se está lanzando.
Esta acepción.
Por qué es chequeada?
Se fijan esa diferencia?
Por ejemplo.
Qué pasa si fuera necesario que lo hagan?
Pero en vez de hacerlo fuera de errante de Ranta.
Por ejemplo.
Se fijan ahí no estamos obligados.
No necesitamos, no nos obliga a relanzar o manejar o propagar esta excepción.
Por qué sería?
No chequeada, no chequeada.
No estamos obligados.
Pero si es del tipo checked, querea deception.
Ahí sí que estamos obligados y nos indica el terror.
Entonces acá lo podemos agregar en la asignatura, en la definición del método o lo podemos hacer de
forma manual.
Entonces frus.
Y en nombre de la excepción, división por cero.
Ahora un método por el azar.
Varias excepciones, no solamente una.
Entonces sería coma otra, coma otra.
Por eso el throws puede hacer muchas en plural, separada por comas.
Pero acá sería una sola.
Bueno, y cómo lo estamos lanzando en el método o derivando el manejo de la excepción a la clase con
el método main que la está utilizando, que está invocando este método dividir.
Es decir, estamos propagando la excepción.
Entonces el ejemplo escepción acá nos marca un error.
Se fijan porque es chequeada, es Checker.
Entonces la tenemos que tener dentro.
Trae un catch.
Entonces, ahora sí que sí.
Por eso le quise colocar afuera al principio, fuera del try, para que vieran la diferencia.
Entonces acá lo podemos colocar dentro del trait catch o bien relanzar o propagar en el método main.
Tenemos dos alternativas.
Lo vamos a manejar con el try catch, pero solamente para que lo tengan en cuenta, para que lo vean.
Entonces con Fuu división por cero y desaparece el error.
Y lo que hacemos es propagar esta sección directamente el método Main para que lo maneje ya la máquina
virtual de Java y finalmente la que invoca este método main.
Pero bien, la idea es quitar acá el feroz y manejarlo nosotros en el main con el try catch.
Bueno, entonces vamos a comentar acá y acá también.
Le quitamos el lint, obviamente, porque está definido acá como doble.
La división y cambiamos.
Bueno, esto acá ya lo podemos quitar.
Ya que acá se convierte con el par Saint y cambiamos esta división por este método.
Entonces este método lo cortamos y lo dejamos dentro del TRIE.
Acá lo reemplazamos por esto.
Entonces lo pegamos.
Perfecto.
Está bien.
Toller indica el error porque en realidad se está lanzando la acepción división por cero.
Deception Acá se fijan división por cero.
Entonces, por supuesto que acá, en vez de aritmética, exception sería división por cero y listo.
Hoy desaparece el error y lo estamos manejando de forma más específica en el Tri.
Recuerden como es chequeada o checked nos obliga a manejarla con el TRIE y con el Cacho, mientras que
en ambas formas Deception No, no es necesario.
De hecho recuerden que si quitamos esto da lo mismo.
Namarca error por ser chequeé.
De hecho, recuerden que en ambas formas Deception heredÃ.
Bueno, primero de aligual argumen deception y ya está.
De derritan.
De hecho, lo podemos revisar, reinte.
Por lo tanto, no es chequeada, no está obligada a manejarla, pero está así y eso es.
Entonces, ahora si ejecutamos con el Rahn.
Perfecto, colocamos cero, ok.
Listo, capturamos la sesión.
Tiempo ejecución no se puede ir por 0.
Bueno, 4 ok, de 2,5, pero si se fijan no se puede ir por cero.
El mensaje de Rob personalizado que colocamos acá en Calculadora División por Cero Septón no se puede
ir por cero mismo mensaje o mensaje que indicamos en el constructor.
Cuando se lanza decepción y está molesto, continuamos la siguiente clase implementando una sobrecarga.
Otro método dividir que lance dos excepciones de por cero y en ambas fórmate section pero propio personalizado
que sea chequeado.
Nos vemos.