Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >try-catch语句中的递归调用。

try-catch语句中的递归调用。
EN

Stack Overflow用户
提问于 2015-08-31 12:09:31
回答 2查看 1.3K关注 0票数 0

我有以下代码片段:

代码语言:javascript
运行
AI代码解释
复制
public static void main(String[] args) {
    foo();
}
public static void foo() {
    try {
        foo();
    } catch (Throwable t) {
        foo();
    }
}

有人能解释一下这是怎么回事吗?请详细说明。

我已经更改了这一段,并添加了println方法来显示一些内容:

代码语言:javascript
运行
AI代码解释
复制
...
try {
    System.out.println("+");
    foo();
} catch (Throwable t) {
    System.out.println("-");
    foo();
}
...

我得到了这样的东西(这个过程还没有停止):

代码语言:javascript
运行
AI代码解释
复制
+
+
+
+
+--
+--
+
+--
+--
+
+
+--
+--
+
+--
+--
+
+
+
+--
+--
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-31 12:47:19

foo可以退出的唯一方法是堆栈溢出。我们可以通过

代码语言:javascript
运行
AI代码解释
复制
public static void foo(int i)
{
    if(i>=N) return; // stack too deep

    foo(i+1);
    foo(i+1);
}

这是指数昂贵的w.r.t的最大堆栈深度。

在我的机器上,花费的时间是关于6ns * 2^N

最大堆栈深度超过10,000,所以大约需要

代码语言:javascript
运行
AI代码解释
复制
        10000000000000000000000000000000
        .... 
        (thousands of zeros)  
        ... 
        00000000000000000000000000000000 

完成程序的时间,给予或接受一个不变的因素:)

票数 2
EN

Stack Overflow用户

发布于 2015-08-31 12:57:38

您正在无限期地调用相同的方法。这意味着将抛出a StackOverflowError。

但是,由于您正在捕获它(StackOverflowError不是一个例外,它是java.lang.Error,它是一个java.lang.Throwable)应用程序不会停止,它将继续递归,它根本不会停止。

当我试图将堆栈大小减小到最小(-Xss160k -Xoss1k)时,没有帮助。

我知道我没有解释为什么会发生这种情况,为了获得更多的信息,我需要分析代码,但是这是一个有趣的问题,也许在JVM内部有很深的专业知识的人确切知道发生了什么。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32319161

复制
相关文章
把焦点放在“人”上
企业架构是个有30多年历史的技术领域,一贯给人“高深莫测”、“口若悬河”、“青云直上”的感觉,诗意一点儿的话,很多人认为这是“两只黄鹂鸣翠柳、一行白鹭上青天”(翻译过来就是“不知所云、离题万里”)。但是,“中台”这两年的火热,在笔者看来,实属企业架构方法论的“重新发现”,仔细看看每一张“中台”架构图,哪一张不是在全面阐述“企业架构”?而很多尝试的企业在实践中台时遇到的一个问题是:照着描却这么也描不像。笔者对方法论一直是持开放态度,尊重每一种方法论,也认为对每一种方法论的辨析都应该基于对实践的充分了解,而非道听途说。但是毕竟能接触到的实践机会有限,在此也只能违背自己的原则,试着谈论几句。
用户6900693
2020/11/10
6770
把焦点放在“人”上
队列达到最大长度代码实战
生产者001 /** * 队列到达最大长度的情况 */ public class Producer001 { private static final String NORMAL_EXCHANGE="normal_exchange"; public static void main(String[] args) throws Exception{ Channel channel = untils.getChannel(); channel.ex
一个风轻云淡
2022/11/13
1.1K0
队列达到最大长度代码实战
webservice最大长度_网址最大长度
HTTP GET请求的最大长度是多少? 是否定义了一个响应错误,如果服务器收到超过此长度的GET请求,服务器可以/应该返回该错误?
全栈程序员站长
2022/09/23
3.4K0
webservice最大长度_网址最大长度
FPGA上如何求32个输入的最大值和次大值:分治
当然,输入的位宽可能会影响最终的解题思路和最终的实现可能性。但位宽在一定范围内,譬如8或者32,解题的方案应该都是一致的,只是会影响最终的频率。后文针对这一题目做具体分析。(题目没有说明重复元素如何处理,这里认为最大值和次大值可以是一样的,即计算重复元素)
sea-wind
2019/07/31
3.5K0
FPGA上如何求32个输入的最大值和次大值:分治
input number 数字输入限制,最大值最小值输入范围限制
方式一:max="100" min="10" 这种方式限制的是数字输入框右边的增减箭头按钮,最大值和最小值,不能对手动输入的数进行限制。如果手动输入一个大于100或小于10的数,还是无法限制。 <input type="number" max="100" min="10" value=""> 方式二:oninput // 只限制长度:输入四位数的数字 <input type="number" oninput="if(value.length>4)value=value.slice(0,4)" />
acoolgiser
2022/03/07
17.1K0
C#学习笔记——回车Enter使输入焦点自动跳到下一个TextBox
在录入界面中,用户往往需要按回车键时光标自动跳入下一个文本框,以方便录入操作。在C#中实现该功能有多种方法,以下是小编收集的不使用TAB键,而直接用回车键将光标转到下一个文本框的实现方法。
vv彭
2021/09/07
6.8K0
uniapp 如何将输入值转成大写
本教程操作环境:windows7 系统、uni-app v3 版本,该方法适用于所有品牌电脑。
CRMEB商城源码
2022/05/24
1.8K0
uniapp 如何将输入值转成大写
主动获取input输入框焦点
web开发中主动让输入框成为第一响应者 定义输入框id <van-search id="pickoversearch" placeholder="请输入查询信息" v-model="keyword" left-icon="../static/images/search.png" @search="onSearch" @cancel="onCancel" :disabled="disabled"></van-search> 通过id寻找输入框并获取焦点弹出键盘 mounted() { documen
程序员不务正业
2019/05/07
6.4K0
最大单词长度乘积
给定一个字符串数组 words,找到 length(word[i]) * length(word[j]) 的最大值,并且这两个单词不含有公共字母。你可以认为每个单词只包含小写字母。如果不存在这样的两个单词,返回 0。
前端小书童
2021/11/26
2.8K0
vue+element通过回车键使焦点移到(focus)下一个输入框
当form表单提交过程中,有时我们想输入一个点击enter直接跳到下一个input框输入,下面是一个简单操作,但是对于复杂的操作及封装的一些表单,可以再深入加工处理一下。这里本博主只举这里一个简单的例子。直接上代码:
用户2323866
2021/06/23
5.8K0
分片恢复达到最大重试次数
通过执行 GET /_cluster/allocation/explain 查看当前索引分配详情
用户7442844
2023/07/19
6320
【转】URL最大长度问题
今天在测试Email Ticket的时候发现在进行Mark as Read/Unread操作时,请求是通过GET方式进行的。URL中列出了所有参与该操作的Ticket Id。于是,我想起GET请求是有最大长度限制的。遂输入超长一串Ticket Id进行请求,结果页面报错如下:
ZhangXianSheng
2019/07/02
2.7K0
UiTextField对输入的长度进行限制并提示用户还可输入的长度
最近想做用户昵称的限制,但是网上百度了很多方法效果都不是我自己想要的,终于找到种方法 如下: 1、声明两个属性  nickname是昵称的textfleld canEditSizeLAbel是提示用户剩余可添加的数 @property (weak, nonatomic) IBOutlet UITextField *nickName; @property(nonatomic,strong)UILabel *canEditSizeLabel;//可编辑数的label 2 给textfield添加一个点击事件,用
用户1219438
2018/02/01
2.2K0
将网站程序放在tmpfs下
将网站程序放在tmpfs下 然后用nginx直接做对外服务呢 varnish或者squid都是利用内存和它的连接数来做到加速服务. 但是如果是squid->nginx->fastcgi->mysql 这样当中很多连接是开销在内部的连接之中 而且如果客户端请求php.squid还需要将请求再转发至nginx,然后nginx再转发至fastcgi 对于动态内容的多加了一个步骤. 考虑到nginx有了不低于squid以及varnish的连接能力 那么可以将网站程序直接放在tmpfs中 这样如果是静态的.就会直接从内存读取后返回给用户(和其他缓冲服务器的效果一样) 如果是PHP就丢给后面的fastcgi处理 这样更快.
Java架构师必看
2021/03/22
1.1K0
Elementui Tree 树形控件,将勾选选中的值放在list集合里面提交
要求: Elementui Tree 树形控件,将勾选选中的值放在list集合里面提交
王小婷
2021/11/24
1.3K0
Elementui Tree 树形控件,将勾选选中的值放在list集合里面提交
Excel公式技巧73:获取一列中长度最大的数据值
在《Excel公式技巧72:获取一列中单元格内容的最大长度》中,我们使用一个简单的数组公式:
fanjy
2020/12/18
6.6K0
Excel公式技巧73:获取一列中长度最大的数据值
输入一些整数,求最大值最小值和平均值
#include<stdio.h> int main(){ int x,n=0,min,max,s=0; while(scanf("%d",&x)==1) { s+=1; if(x<min) min=x; if(x>max) max=x; n++; } printf("%d %d %.3f\n",min,max,(double)s/n); return 0; }
杨鹏伟
2022/05/05
6550
iOS UITextField 限制输入长度控件
在项目中,UITextField基本上都要求输入长度限制,通常的做法是监听UITextField
赵哥窟
2019/04/01
3.4K0
varchar有最大长度限制吗
先说结论,mysql 中的 varchar 是有最大长度限制的,这个值是 65535 个字节。
谭小谭
2020/01/15
16.3K0
点击加载更多

相似问题

在不同容器中达到最大长度后,将焦点放在下一个输入上

214

一旦达到最大长度值,就关注下一个输入- reactjs

240

聚焦并启用下一个输入,一旦达到最大长度值

11

当达到最大长度时,将焦点切换到下一个输入字段

20

Angular |自动将下一个输入的焦点放在最大长度上

30
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档