2010-12-11 44 views
2

Je voudrais savoir comment une erreur peut être interceptée dans Java mais permettre au programme de continuer à fonctionner.Java prend-il en charge la reprise de l'exécution du programme après une exception?

ici est mon exemple:

public class test1 { 
    public static void main(String[] args) { 
     String str = new String("abcdefghij"); 
     try { 
      System.out.println(str.charAt(0)); 
      System.out.println(str.charAt(9)); 
      System.out.println(str.charAt(10)); 
      System.out.println("is it still running"); 
     } catch (Exception e) { 
      System.out.println("the index is out of bounds"); 
     } 
    } 
} 

ce qui suit est imprimé:

a 
j 
the index is out of bounds 

mais après l'erreur i est jeté voudrais que le code pour continuer à fonctionner de telle sorte que cela est imprimé:

a 
j 
the index is out of bounds 
is it still running 

merci à l'avance

Répondre

7

Java ne prend pas en charge la 'reprise' ou le 'redémarrage' après une exception.

Vous pouvez envelopper la ligne spécifique "à sauter" dans un try/catch (serait 3 total dans l'exemple ci-dessus, un pour chaque accès) ou, mieux, écrire du code qui ne lèvera pas une exception - les exceptions devraient vraiment être "exceptionnel" IMOHO. Vous pouvez également déplacer le code try/catch dans une méthode pour "envelopper" l'accès (par exemple appeler la méthode 3x), mais les actions sont les mêmes.

+0

c'était genre-de ce que j'espérais éviter, oh bien, merci pour l'info sur java :) – java

+0

@java Pour un problème spécifique, une (autre) question à ce sujet pourrait être bénéfique. Il y a une tonne de connaissances sur SO et une grande place pour découvrir différentes approches (parfois meilleures) d'un problème donné dans un ensemble spécifique de contraintes (par exemple Java). –

2
for(int i =0; i < Short.MAX_VALUE; i++){ 
try{ 
    System.out.println(str.charAt(i)); 
}catch(Exception ex){} 
} 

Vous pouvez également utiliser enfin bolck si vous souhaitez toujours exécuter.

+0

Haha. +1 pour la bonne généralisation. –

+0

mais je ne veux pas imprimer jamais de valeur, d'ailleurs il serait préférable de faire i java