java - 这可以处理堆栈溢出错误吗?
问题描述
enter code here
static int i=10;
static void m1()
{
try {
if(i>=0)
{
System.out.println(i);
i--;
}
m1();
}
catch (Throwable e) {
System.out.println("hii");
}
}
public static void main(String[] args) {
m1();
}
1)通过这种方式我们可以处理堆栈溢出错误,但实际上java不允许我们处理错误。2)第二点是当我们在 try 块中得到一个异常时,一个 then 唯一受尊重的 catch 块将被执行,但在我们的场景中,我们在 try 块中得到一个错误,但是当我们使用 throwable e 而不是异常 e 时,catch 块正在执行。
如果有人知道这种情况背后的原因,请在上面发短信..
解决方案
这可以处理堆栈溢出错误吗?
是的。StackOverflowError 并不特别:它是一个 Throwable,因此您可以捕获它。
您在这里遇到的问题是您在堆栈的最顶端(即即将溢出时)捕获并处理 StackOverflowError。
调用时会出现 StackOverflowError ,m1()
因为您无法再调用m1()
;m1()
但这与调用本身无关,它与调用任何方法有关。
因此,当您尝试处理它时,您正在调用一个方法 ( System.out.println
),并且您会得到另一个 StackOverflowError,它是从 而catch
不是try
.
你不应该尝试处理 StackOverflowErrors:相反,重构你的逻辑,这样你就永远不会接近溢出。
推荐阅读
- python - 有条件地删除缩写中的句点,但不是以 python 正则表达式结尾的句子
- python - 我要删除的代码运行警告
- html - 如何在我的页面导航旁边对齐 CSS 中的对象
- java - 将数据发送到另一个活动的 Listview
- amazon-web-services - 使用 AWS Lambda (NodeJS) 训练和部署 SageMaker ML 模型
- assembly - 这两条指令在做什么?
- node.js - Node.js express 在 / 之后得到一切
- python-3.x - 如何在网络爬虫中添加链接的内部文本?
- javascript - 推送到数组不会触发 vue 的反应
- microsoft-translator - 有没有办法将数据从一个项目导入/导出到门户中的另一个项目?