gpt4 book ai didi

java - java中从Exception类抛出异常

转载 作者:行者123 更新时间:2023-11-30 06:41:16 25 4
gpt4 key购买 nike

好的...所以我正在学习 java 中的异常,并且目前正在使用 throw 语句。我抛出了 Exception 类的异常,然后再次从 catch block 中重新抛出它以在 main 函数中处理它。但是每当我将其作为 Exception 类抛出时,我总是在 catch block 中收到错误(我将其重新抛出以在 main 中处理)。但是一旦我将抛出和捕获的异常更改为某些特定的异常,例如 NullPointerException,它有效!

错误代码:

class ThrowingExceptions {
static boolean enable3dRendering = false;

public static void main(String [] com) {

try {
renderWorld();
}
catch(Exception e) {
System.out.println("Rendering in 2d.");
}
}

static void renderWorld() {
try{
if(!enable3dRendering) {
System.out.println("3d rendering is disabled. Enable 3d mode to render.");
throw new Exception("3d mode Disabled.");
}
else {
System.out.println("The World is Empty!");
}
}
catch(Exception e) {
System.out.println("Please handle the error");
throw e; // It gives me an error here
}
}
}

工作代码:

class ThrowingExceptions {
static boolean enable3dRendering = false;

public static void main(String [] com) {

try {
renderWorld();
}
catch(NullPointerException e) {
System.out.println("Rendering in 2d.");
}
}

static void renderWorld() {
try{
if(!enable3dRendering) {
System.out.println("3d rendering is disabled. Enable 3d mode to render.");
throw new NullPointerException("3d mode Disabled.");
}
else {
System.out.println("The World is Empty!");
}
}
catch(NullPointerException e) {
System.out.println("Please handle the error");
throw e;
}
}
}

为什么它不能与 Exception 类一起使用而可以与其子类一起使用?

注意:- 我在错误代码中收到的错误是未处理的异常类型异常

最佳答案

  1. 运行时异常扩展了RuntimeException。它们不需要被处理或声明。它们可以由程序员或 JVM 抛出。

  2. 受检异常在其层次结构中有 Exception,但没有 RuntimeException。他们必须处理或申报。它们可以由程序员或 JVM 抛出。

  3. Errors 扩展 Error 类。它们由 JVM 抛出,不应被处理或声明。

当方法抛出检查异常(1)时,您应该处理或重新处理它。

当方法抛出未经检查的异常(2)时,您可以处理或重新抛出它,但这不是强制性的。

But whenever i throw it as Exception class, i always get an Error in the catch block(where i re-throw it to be handled in main)

这意味着您的方法正在抛出应处理或重新抛出的已检查异常。

处理:

public class Main {

public static void main(String[] args) {
try {
throw new Exception();
} catch (Exception e) {
try {
throw new Exception();
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
}

重新抛出:

public class Main {

public static void main(String[] args) throws Exception {
try {
throw new Exception();
} catch (Exception e) {
throw new Exception();
}
}
}

就您而言:

// You declaring that the caller should handle exception
static void renderWorld() throws Exception {
try {
if(!enable3dRendering) {
System.out.println("3d rendering is disabled. Enable 3d mode to render.");
throw new Exception("3d mode Disabled.");
} else {
System.out.println("The World is Empty!");
}
} catch(Exception e) {
System.out.println("Please handle the error");
// You cannot just throw uncheked exception here
// You should handle it yourself or a caller should do it
throw e;
}
}

关于java - java中从Exception类抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44347230/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com