Java中未引发异常

Java中未引发异常,java,Java,catch语句(第1行)不会处理溢出异常,因为输出会继续打印“asdsdf”,而不会引发异常。 有人能告诉我为什么无限循环不作为异常处理吗?。 或者这就是它的设计和工作方式?不会捕获异常,因为它从未被抛出。您的方法不会导致OverflowException 无限循环在Java中是完全合法的。它将无限期地继续运行。您的循环也没有构建越来越多的资源,它只是调用一个方法,在打印到标准输出后,该方法会自毁每次迭代。它可以永远运行 例如,如果您有方法my()本身只需调用my(),然后您将立即得到一个,但这

catch语句(第1行)不会处理溢出异常,因为输出会继续打印“asdsdf”,而不会引发异常。 有人能告诉我为什么无限循环不作为异常处理吗?。
或者这就是它的设计和工作方式?

不会捕获异常,因为它从未被抛出。您的方法不会导致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来说不是问题