essayer / attraper sur la pile déborde dans Java?
Pouvez-vous try/catch un débordement de la pile d'exception en java? Il semble être de se jeter à l'autre. Quand mon procédures de débordements, je voudrais à "pénaliser" cette valeur.
source d'informationauteur stereos
Vous devez vous connecter pour publier un commentaire.
Semble fonctionner:
Si vous obtenez un débordement de pile, vous êtes susceptible de tenter de récursivité infinie ou sont gravement abuser les appels de fonction. Vous pourriez peut-être envisager de faire certaines de vos procédures itératives au lieu de récursive ou double-vérifier que vous avez une bonne base de cas dans votre procédure récursive. Attraper une exception de dépassement de pile est une mauvaise idée, à vous de traiter les symptômes sans s'attaquer à la cause sous-jacente.
Vous devez attraper une Erreur, et non pas l'Exception
Les caractéristiques fonctionnelles de Java 8, fait de cette question incomparablement plus important. Car si nous commençons à utiliser la récursivité massivement, StackOverflowException est quelque chose que nous DEVONS compter pour.
La Java 8 types lambdas n'a pas un parmi eux qui jette StackOverflowException. Donc, nous avons à créer. Il est absolument nécessaire, sans que l'on ne passera pas même l'IDE de contrôle.
Par exemple, Integer -> Entier type de fonction peut avoir l'aspect:
Après que nous puissions écrire une fonction qui accepte les lambdas jeter StackOverflowException.
Et c'est seulement maintenant que nous pouvons créer un récursif lambda:
Après que l'on peut appeler la chaîne récurrente
fiboSequence.get(i)
et d'obtenir un résultat ou un StackOverflowException si l'ensemble de la chaîne a été incomputable.Dans le cas de l'utilisation de la récursivité obtient DONC absolument signification différente: vous avez sauté trop profonde, il répète en le divisant en plus pas peu.
Je suis d'accord avec Michael - StackOverflowException est un signal que quelque chose allait très mal. Avaler ce n'est pas une bonne idée. Le meilleur cours de l'action est de corriger la cause de cette erreur.
Voici ma solution,