gpt4 book ai didi

java - try/catch block Java 中的返回语句

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:44:39 25 4
gpt4 key购买 nike

假设我有以下内容:

class NegativeException extends RuntimeException {
}

class ZeroException extends NegativeException {
}

class Driver {
static boolean Marathon(int a) {
try {
if (a < 0)
throw new NegativeException();
else if (a == 0)
throw new ZeroException();
else if (a >= 42)
return true;
else
return false;
} catch (ZeroException e) {
System.out.println("Use natural number");
} finally {
System.out.println("One last thing");
}
System.out.println("All done.");
return false;
}

public static void main(String[] args) {
/* One last thing */
/* true */
System.out.println(Marathon(100));


System.out.println(Marathon(0));
System.out.println(Marathon(-5));

}
}

我想了解的是,当我们的主要方法的第一行被触发时,为什么“All done”行没有执行? 马拉松(100)

似乎执行了finally语句,然后输出了return语句。我知道 finally block 将始终执行,无论发生什么。但是,我似乎无法理解 return 语句如何影响 try catch block 的流程。尝试从 try-cath-finally block 返回时是否有一组适用的规则?

最佳答案

What I'm trying to understand is why doesn't the line "All done" not execute when use the first line of our main method is fired? Marathon(100)

因为 a >= 42 是真的,所以你这样做:

return true;

...立即将控制转移到 finally block ;在 finally block 的末尾,函数返回(没有运行 following finally block 的任何行)。也就是说,return 不只是设置返回值,它会在运行任何未完成的 finally block 之后终止函数。

如果你想继续执行,你可以写入一个变量,然后在最后有一个return:

static boolean Marathon(int a) {
boolean rv = false;
try {
if (a < 0)
throw new NegativeException();
else if (a == 0)
throw new ZeroException();
else if (a >= 42)
rv = true;
} catch (ZeroException e) {
System.out.println("Use natural number");
} finally {
System.out.println("One last thing");
}
System.out.println("All done.");
return rv;
}

关于 trycatch 中的 return 的更多信息:如果您从 中发出 return try 有一个 finally block ,它立即将控制转移到 finally block 。当到达该 block 的末尾时,函数终止(没有finally block 之后运行任何代码,除非您嵌套了 finally block 或类似的)。如果您从 catchreturn,也会发生同样的事情。

例如:

try {
if (someCondition) {
return 1;
}
if (someOtherCondition) {
throw new Exception();
}
}
catch (Exception e) {
System.out.println("Got here because of exception");
return 2;
}
finally {
System.out.println("Got here");
}
System.out.println("May not have gotten here");
return 3;

"Got here" 无论如何都会总是输出;这就是 finally 子句的意义所在,它们总是被执行。

"Got here because of exception" 只会在 someOtherCondition 为真时输出(并且会在 "Got here" 之前输出) ,在这种情况下,函数正常返回值 1

"May not have got here" 如果 someConditionsomeOtherCondition 为真,则不会输出,因为 返回trycatch block 中。

如果两个条件都不为真,您会看到 “May not have got here” 后跟 “Got here”,函数返回 3 .

请注意,catch block 中的 return 表示该函数正常 返回(值为 2 ) 当 someOtherCondition 为真时,它不会抛出。如果那里没有 return 并且 someOtherCondition 为真,您会看到 “Got here because of exception”"Got here" 然后该函数将以抛出(根本没有返回值)终止,并且不会输出 "May not have got here"

最后但同样重要的是:如果您在 finally block 中有一个 return,那么 return“获胜”:即使您在 finally block 中,因为您已经发出了 return,所以 finally block 中的 return 会取代它,使函数返回值finally 说的,不是前面那个。

关于java - try/catch block Java 中的返回语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29733072/

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