try/catch on stack overflows in java?

2019-01-26 04:01发布

Can you try/catch a stack overflow exception in java? It seems to be throwing itself either way. When my procedures overflows, I'd like to "penalize" that value.

6条回答
孤傲高冷的网名
2楼-- · 2019-01-26 04:34

The functional features of Java 8 makes this question incomparably more important. For while we start to use recursion massively, StackOverflowException is something we MUST count for.

The Java 8 lambdas types has no one among them that throws StackOverflowException. So, we have to create such. It is absolutely necessary, without that we won't pass even the IDE control.

For example, Integer -> Integer function type could look as:

@FunctionalInterface
public interface SoFunction <U> {
    public U apply(Integer index) throws StackOverflowException;
}

After that we can write a function that will accept lambdas throwing StackOverflowException.

public T get(int currentIndex) throws StackOverflowException{

And only now we can create a recursive lambda:

fiboSequence.setSequenceFunction(
            (i) ->
            fiboSequence.get(i-2).add(fiboSequence.get(i-1))
);

After that we can call the recursive chain fiboSequence.get(i)and get a result or a StackOverflowException if the whole chain was incomputable.

In the case of use of recursion SO gets absolutely different meaning: you have jumped too deep, repeat it dividing in more shallow steps.

查看更多
Anthone
3楼-- · 2019-01-26 04:39

Here is my solution,

public class TryExample {

    public static void main(String[] args){
        try {
            int no=10/0;
        } catch (Exception e) {
            System.err.println("Arithmetic Exception occurs!");
        }
    }
}
查看更多
疯言疯语
4楼-- · 2019-01-26 04:43

Seems to work:

public class Test {

    public static void main(String[] argv){
        try{
            main(null);
        }
        catch(StackOverflowError e){
            System.err.println("ouch!");
        }
    }

}
查看更多
The star\"
5楼-- · 2019-01-26 04:48

I agree with Michael - StackOverflowException is a signal that something went very wrong. Swallowing it is not a good idea. The best course of action is to fix the root cause of this error.

查看更多
放我归山
6楼-- · 2019-01-26 04:57

If you are getting a stack overflow, you are likely attempting infinite recursion or are severely abusing function invocations. Perhaps you might consider making some of your procedures iterative instead of recursive or double-check that you have a correct base case in your recursive procedure. Catching a stack overflow exception is a bad idea; you are treating the symptoms without addressing the underlying cause.

查看更多
Evening l夕情丶
7楼-- · 2019-01-26 05:00

You have to catch an Error, not the Exception

查看更多
登录 后发表回答