我正在为一项任务编写分级程序,学生们在其中实现递归排序算法。这意味着可能会有几位学生提交导致堆栈溢出的破损代码。我希望能够捕获调用学生代码时发生的堆栈溢出,以便从他们的得分中扣除并继续进行其他测试。不幸的是,堆栈溢出似乎不像其他异常那样走标准路径-try/catch块似乎没有帮助。在堆栈溢出发生后,是否有一种方法可以将执行返回到我的代码中?我已经研究过使用线程来做到这一点,但似乎又回到无法使用try/catch的问题。
我正在为一项任务编写分级程序,学生们在其中实现递归排序算法。这意味着可能会有几位学生提交导致堆栈溢出的破损代码。我希望能够捕获调用学生代码时发生的堆栈溢出,以便从他们的得分中扣除并继续进行其他测试。不幸的是,堆栈溢出似乎不像其他异常那样走标准路径-try/catch块似乎没有帮助。在堆栈溢出发生后,是否有一种方法可以将执行返回到我的代码中?我已经研究过使用线程来做到这一点,但似乎又回到无法使用try/catch的问题。
Exception
作为Throwables
捕获。Throwable
时,您将捕获:Exception
- 强制您使用try-catch
或throws
(例如IOException
)
- RuntimeException
- 通过方法冒泡(例如NullPointerException
)
- Error
- 例如StackOverflowError
请参阅官方Java文档中的Throwable
对象。Process
来启动他们的程序,然后重定向其错误流以检查堆栈溢出。
Throwable
“冒泡”时,方法分配将从堆栈中移除。 一个简单的证明已经在上面的代码中了,当我们在catch
块中调用一个新的方法(println
)时,它会被分配到堆栈上。 - Matyas