java exception unhandled

Excepción no controlada en Java



exception unhandled (2)

Actualmente estoy en el proceso de aprender a hacer una excepción personalizada y me encontré con un problema. Cada vez que intento utilizar un objeto de una clase que arroja esta excepción personalizada, el depurador de mi IDE (estoy usando la idea IntelliJ) dice "Excepción no controlada: InsertExceptionName ()". El código, de manera simplificada, se parece a esto. En este caso, debería devolver una excepción si el número generado aleatoriamente es <0.5, y devolver un número de lo contrario, pero no lo hará. ¿Qué me estoy perdiendo?

public class main { public static void main(String[] args) { double x=Math.random(); operation op=new operation(); op.execute(x); } }

-

public class operation { public operation() { } public double execute(double x) throws RandomWeirdException { if(x<0.5) { throw new RandomWeirdException("<0.5"); } return x; } }

-

public class RandomWeirdException extends Exception{ public RandomWeirdException() { super(); } public RandomWeirdException(String message) { super(message); } }


¿Qué quiere decir "devolver" una excepción? Cuando se produce una excepción, burbujea la pila de llamadas.

No lo está manejando en este caso. Llega a main y, por lo tanto, tiene una excepción no controlada.

Si desea manejar una excepción, usaría un bloque try-catch . Preferiblemente alrededor de la tubería main en este caso.

try { // Code that might throw // an exception. } catch (Exception e) { // Handle it. }

Otra solución sería especificar que main lanza una " RandomWeirdException ", y no catch en primer lugar.

public static void main(String[] args) throws RandomWeirdException { ... }

Es preferible simplemente dejar que se throw funciones, a menos que pueda manejar razonablemente el caso excepcional. Si solo catch por capturar sin hacer nada significativo en un caso excepcional, es el equivalente de ocultar un error a veces.


Está utilizando el método de execute , sin crear un bloque try-catch para RandomWiredException que declara que está lanzando. Java requirió que todas las excepciones marcadas (que extienden la Exception ) sean manejadas adecuadamente por la persona que llama, ya sea con un bloque try-catch o agregando throws al método de llamada (en este caso, es main , sin embargo, no debería tener una cláusula de throws ).

Entonces, la forma correcta de hacerlo es como:

public class Main { public static void main(String[] args) { double x=Math.random(); operation op=new operation(); try { op.execute(x); } catch ( RandomWiredException e ) { e.printStackTrace(); System.exit(1); } } }

El código real en la cláusula catch depende de los requisitos de su aplicación, por supuesto.

Nota: use mayúscula inicial cuando nombre las clases. Esta es una de las convenciones de estilo de Java que mejorará la legibilidad de su código.