Java 中未处理的异常
Unhandled Exception in Java
我目前正在学习如何正确执行自定义异常,但我偶然发现了一个问题。每当我尝试使用抛出此自定义异常的 class 的对象时,我的 IDE 的调试器(我使用的是 IntelliJ idea)会显示 "Unhandled Exception: InsertExceptionName()"。代码以简化的方式看起来像这样。在这种情况下,如果随机生成的数字 <0.5,它应该 return 一个异常,否则 return 一个数字,但它不会那样做。
我错过了什么?
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);
}
}
"return"异常是什么意思?抛出异常时,它会在调用堆栈中冒泡。
你不是在这种情况下处理它。它达到 main
,因此您有一个未处理的异常。
如果要处理异常,可以使用 try-catch
块。在这种情况下,最好包围 main
。
try {
// Code that might throw
// an exception.
} catch (Exception e) {
// Handle it.
}
另一个解决方案是指定 main
抛出“RandomWeirdException
”,而不是 catch
首先抛出它。
public static void main(String[] args) throws RandomWeirdException { ... }
最好只让函数 throw
,除非您可以合理地处理异常情况。
如果只是为了捕捉而catch
,在异常情况下不做任何有意义的事情,就相当于有时隐藏错误。
您正在使用 execute
方法,但没有为它声明正在抛出的 RandomWiredException
创建 try-catch 块。 Java 要求调用者正确处理所有已检查的异常(扩展 Exception
)- 使用 try-catch 块,或通过将 throws
添加到调用方法(在本例中,但是它是 main
,所以它不应该有 throws
子句)。
所以正确的做法是:
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);
}
}
}
当然,catch 子句中的实际代码取决于您的应用程序的要求。
注意:命名类时请使用大写首字母。这是 Java 样式约定之一,可以提高代码的可读性。
我目前正在学习如何正确执行自定义异常,但我偶然发现了一个问题。每当我尝试使用抛出此自定义异常的 class 的对象时,我的 IDE 的调试器(我使用的是 IntelliJ idea)会显示 "Unhandled Exception: InsertExceptionName()"。代码以简化的方式看起来像这样。在这种情况下,如果随机生成的数字 <0.5,它应该 return 一个异常,否则 return 一个数字,但它不会那样做。 我错过了什么?
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);
}
}
"return"异常是什么意思?抛出异常时,它会在调用堆栈中冒泡。
你不是在这种情况下处理它。它达到 main
,因此您有一个未处理的异常。
如果要处理异常,可以使用 try-catch
块。在这种情况下,最好包围 main
。
try {
// Code that might throw
// an exception.
} catch (Exception e) {
// Handle it.
}
另一个解决方案是指定 main
抛出“RandomWeirdException
”,而不是 catch
首先抛出它。
public static void main(String[] args) throws RandomWeirdException { ... }
最好只让函数 throw
,除非您可以合理地处理异常情况。
如果只是为了捕捉而catch
,在异常情况下不做任何有意义的事情,就相当于有时隐藏错误。
您正在使用 execute
方法,但没有为它声明正在抛出的 RandomWiredException
创建 try-catch 块。 Java 要求调用者正确处理所有已检查的异常(扩展 Exception
)- 使用 try-catch 块,或通过将 throws
添加到调用方法(在本例中,但是它是 main
,所以它不应该有 throws
子句)。
所以正确的做法是:
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);
}
}
}
当然,catch 子句中的实际代码取决于您的应用程序的要求。
注意:命名类时请使用大写首字母。这是 Java 样式约定之一,可以提高代码的可读性。