你可以嘗試/捕捉java中的堆棧溢出異常嗎?它似乎正在拋棄自己的方式。當我的程序溢出時,我想「懲罰」該值。嘗試/抓住堆棧溢出在Java?
回答
似乎工作:
public class Test {
public static void main(String[] argv){
try{
main(null);
}
catch(StackOverflowError e){
System.err.println("ouch!");
}
}
}
如果你得到一個堆棧溢出,你很可能試圖無限遞歸或受到嚴重濫用的功能調用。也許你可能會考慮讓你的一些過程迭代而不是遞歸,或者仔細檢查你的遞歸過程中是否有正確的基本情況。捕捉堆棧溢出異常是一個壞主意;你正在治療症狀而不解決潛在的原因。
在使用JVM設置選項的遞歸和溢出的情況下,SO是正確程序的正常否定答案。我們必須抓住它並做出反應。例如,在延遲序列的情況下,通過遞歸finction(http://stackoverflow.com/a/33926444/715269)進行設置,我們可以簡單地通過更小的步驟繼續。 – Gangnus 2015-12-21 07:52:13
捕捉SO錯誤對於調試時也很有用,當你不知道許多遞歸方法中的哪一個導致SO錯誤時:) – 2016-01-23 11:39:36
我同意邁克爾 - StackOverflowException是一個信號,有些事情變得非常錯誤。吞嚥它並不是一個好主意。最好的行動方式是解決這個錯誤的根本原因。
你必須趕上一個錯誤,而不是例外
的Java 8的功能特點,使無比這個問題更重要。當我們開始大量使用遞歸時,StackOverflowException是我們必須考慮的。
Java 8 lambda類型沒有引發StackOverflowException的人。所以,我們必須創造這樣的。這是絕對必要的,沒有,我們甚至不會通過IDE控制。
例如,整型 - >整數函數類型可以爲看:
@FunctionalInterface
public interface SoFunction <U> {
public U apply(Integer index) throws StackOverflowException;
}
在此之後,我們可以寫一個接受lambda表達式拋出StackOverflowException的功能。
public T get(int currentIndex) throws StackOverflowException{
而且,只有現在我們可以創建一個遞歸拉姆達:
fiboSequence.setSequenceFunction(
(i) ->
fiboSequence.get(i-2).add(fiboSequence.get(i-1))
);
之後,我們可以調用遞歸鏈fiboSequence.get(i)
,並得到一個結果或StackOverflowException如果整個鏈條是數不清的。
在使用遞歸的情況下,SO得到了完全不同的含義:你已經跳得太深了,重複它以更淺的步驟進行劃分。
這裏是我的解決方案,
public class TryExample {
public static void main(String[] args){
try {
int no=10/0;
} catch (Exception e) {
System.err.println("Arithmetic Exception occurs!");
}
}
}
您的解決方案適用於幾年前已採用適當方式回答的問題嗎?你意識到捕獲'Exception'是OP已經嘗試過的東西,顯然不起作用? – Tom 2017-06-23 07:51:57
- 1. 堆棧溢出堆棧溢出
- 2. 堆棧溢出的Java
- 3. java堆棧溢出錯誤?
- 4. 堆棧溢出錯誤(Java)
- 5. 堆棧溢出
- 6. 嘗試在iPhone中抓住?
- 7. Sql嘗試抓住在asp.net
- 8. Java堆棧卡住
- 9. 在Rust中調試堆棧溢出
- 10. 在haskell中調試堆棧溢出
- 11. Java中的堆棧溢出與Collections-Java中的堆棧實現
- 12. 堆棧溢出C++
- 13. C#堆棧溢出
- 14. Malloc堆棧溢出
- 15. 堆棧溢出C++
- 16. LINQ2SQL堆棧溢出
- 17. 堆棧溢出ToArray()
- 18. C++堆棧溢出
- 19. 堆棧溢出:: regex_replace
- 20. .NET堆棧溢出?
- 21. MPMoviePlayerController堆棧溢出
- 22. ViewDragHelper堆棧溢出
- 23. Lua堆棧溢出
- 24. GinMapProvider堆棧溢出
- 25. Threading.Timer堆棧溢出
- 26. 「ERR:SEH:setup_exception堆棧溢出」 在MSVC
- 27. GWT:堆棧溢出在IE
- 28. 嘗試生成隨機數時堆棧溢出
- 29. 當我嘗試構建八叉樹結構時堆棧溢出
- 30. 堆棧溢出調用堆棧#timememoryfunctionlocation 10.0000143728
預防勝於捕好.... – 2010-03-29 04:02:12
捕捉對調試很有:) – JonnyBoy 2014-11-06 00:11:38