Java中未引发异常
catch语句(第1行)不会处理溢出异常,因为输出会继续打印“asdsdf”,而不会引发异常。 有人能告诉我为什么无限循环不作为异常处理吗?。Java中未引发异常,java,Java,catch语句(第1行)不会处理溢出异常,因为输出会继续打印“asdsdf”,而不会引发异常。 有人能告诉我为什么无限循环不作为异常处理吗?。 或者这就是它的设计和工作方式?不会捕获异常,因为它从未被抛出。您的方法不会导致OverflowException 无限循环在Java中是完全合法的。它将无限期地继续运行。您的循环也没有构建越来越多的资源,它只是调用一个方法,在打印到标准输出后,该方法会自毁每次迭代。它可以永远运行 例如,如果您有方法my()本身只需调用my(),然后您将立即得到一个,但这
或者这就是它的设计和工作方式?不会捕获异常,因为它从未被抛出。您的方法不会导致OverflowException
无限循环在Java中是完全合法的。它将无限期地继续运行。您的循环也没有构建越来越多的资源,它只是调用一个方法,在打印到标准输出后,该方法会自毁每次迭代。它可以永远运行
例如,如果您有方法
my()代码>本身只需调用my()
,然后您将立即得到一个,但这将发生在(;;)
循环的的第一次迭代中。这就是它的设计和工作方式-有一个叫做的东西,基本上意味着这是不可能的
另一方面,如果您的方法是递归的,则在抛出异常之前,它将消耗越来越多的堆栈空间。要创建“溢出”条件,实际上必须导致某些内容溢出。就像一个变量
修改for语句以增加某些内容,但不要对循环的连续性施加任何约束,否则将出现整数溢出
class ex1
{
static void my() {
System.out.println("asdsdf");
}
public static void main(String args[]) {
try {
for (;;) {
my();
}
} catch (Exception e)//Exception is not caught //Line 1
{
System.out.println("Overflow caught");
} finally {
System.out.println("In Finally");
}
System.out.println("After Try Catch Finally...");
}
}
或者
for (int i=0;;i++) {
}
另一种方法是无限制地递归调用自身,从而导致调用堆栈溢出。每个递归调用都必须保留前面递归调用的堆栈
递归函数:
for (int i=0;i==i;i++) { // i==i is always true.
}
public static my(){
my();
}
递归构造函数:
for (int i=0;i==i;i++) { // i==i is always true.
}
public static my(){
my();
}
您的方法只是创建一个无限循环并调用一个方法。因为没有抛出任何异常,所以您看不到任何异常。我看不到这段代码实际生成任何类型的异常。什么溢出?你真的知道“溢出”是什么吗?没有像OverflowException
“你的循环也没有构建越来越多的资源”,但是当我执行这个程序时,如果OP试图捕获StackOverflowError
,java.exe的大小会不断从5MB增加到43MB等等,那里try catch
也不起作用-只是指出它;)@如果他用扔球接住球,就可能被抓住catch(Throwable e)
@SubirKumarSao问题是,他们是否应该这样做。我的观点是,你我相信你理解,即使OP将代码置于会生成StackOverflowerError
的状态,他们的try-catch
也不会起任何作用。不是对Kon的批评,只是一个观察……你不会得到溢出,你会得到一个无限循环,这对java来说不是问题