IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

[bloc finally] Comment contourner le finally clause cannot complete normally"


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 88
    Par défaut [bloc finally] Comment contourner le finally clause cannot complete normally"
    Bonjour,

    J'ai besoin de tester si Un String contient un entier, j'ai utilisé cette méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public static boolean isValidInt(String str) {
    		boolean isValid = false;
    		try {
    			Integer newInput = Integer.valueOf(str);
    			int i = newInput.intValue();
    			isValid = true;
    		} finally{
    			return isValid;
    		}	
    	}
    Eclipse me retourne le warning suivant : "Le bloc finally ne se termine pas correctement."

    En parcourant la FAQ Java, j'ai constaté qu'il vallait mieux éviter le return dans le bloc finally. FAQ Java

    Je m'embrouille un peu avec la gestion des exceptions... Quelqu'un peut-il m'indiquer comment faire sans utiliser le "return isValid" dans le bloc finally ?

    Merci

  2. #2
    Membre émérite
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Par défaut
    Oui mais le finally ne sers pas à ça !!!

    Le finally sers pour libérer les ressources, à savoir connection SGBDR, fichier ouvert... mais pas a faire un return.

  3. #3
    Membre éprouvé
    Avatar de Deadpool
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 312
    Par défaut
    Citation Envoyé par pistache42
    Bonjour,

    J'ai besoin de tester si Un String contient un entier, j'ai utilisé cette méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public static boolean isValidInt(String str) {
    		boolean isValid = false;
    		try {
    			Integer newInput = Integer.valueOf(str);
    			int i = newInput.intValue();
    			isValid = true;
    		} finally{
    			return isValid;
    		}	
    	}
    Eclipse me retourne le warning suivant : "Le bloc finally ne se termine pas correctement."

    En parcourant la FAQ Java, j'ai constaté qu'il vallait mieux éviter le return dans le bloc finally. FAQ Java

    Je m'embrouille un peu avec la gestion des exceptions... Quelqu'un peut-il m'indiquer comment faire sans utiliser le "return isValid" dans le bloc finally ?

    Merci
    En effet il faut mieux éviter les return dans finally, ça peut poser quelque soucis (décrits dans la FAQ).

    Moi je remplacerais le finally par un catch et je mettrait le return hors de la clause try-catch. En effet, le problème de ton code c'est que tu n'attrappe pas l'Exception qui peut se produire si la chaine de caractère n'est pas dans un bon format du fait de l'absence de clause catch.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public static boolean isValidInt(String str) {
    		boolean isValid;
    		try {
    			int i = Integer.parseInt(str)
    			isValid = true;
    		} catch (Exception e){
    			isValid = false;
    		}
    	         return isValid;
    }
    Edit: et comme le dit thibault, la clause finally sert à placer les instructions devant être réalisées dans tout les cas donc typiquement à libérer les ressources utilisées

  4. #4
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Dans ton cas ce serait plutôt ceci qu'il faudrait faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public static boolean isValidInt(String str) {
            boolean isValid = false;
            try {
                Integer newInput = Integer.valueOf(str);
                int i = newInput.intValue();
                isValid = true;
            } catch (NumberFormatException e){
                //faire quelquechose ou pas
            }    
            return isValid
        }

  5. #5
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 88
    Par défaut
    En effet, c'est ce que je cherchais à faire...

    j'avais trouvé ce bout de code sur le Net, et il me semblait bien que c'était une mauvaise utilisation du bloc finally.

    Ca m'aura au moins permis de bien comprendre le fonctionnement des blocs try/catch/finally.

    Merci pour votre aide.

  6. #6
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Juste une remarque (même si c'est un peu H-S) : Pourquoi utiliser Integer.valueOf() ?

    En effet il serait ici préférable d'utiliser Integer.parseInt() qui renvoit un int (au lieu d'un Integer) et qui éviterait donc de créer un objet inutilement...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        public static boolean isValidInt(String str) {
            boolean isValid = false;
            try {
                Integer.parseInt(str); // throw NumberFormatException
                isValid = true;
            } catch (NumberFormatException e){
                // faire quelquechose ou pas
            }
            return isValid;
        }
    a++

  7. #7
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 88
    Par défaut
    Merci adiGuba, c'est vrai que j'ai l'habitude d'utiliser Integer.parseInt(), comme je l'ai dit c'est une méthode que j'ai récupérée et j'ai pas fait attention à ce point.

    J'ai pas encore bien le reflexe entre les int et Integer, je vais d'ailleurs revoir ce point de suite que j'ai déjà étudié mais que visiblement je n'ai pas intégré...

    Mon expérience du java est encore très restreinte, mais j'avance petit à petit...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 09/02/2015, 11h45
  2. [Débutant]Finally, comment ça marche ?
    Par PaulHuxe dans le forum C#
    Réponses: 7
    Dernier message: 26/05/2011, 15h11
  3. closure/variable finale : comment faire?
    Par ®om dans le forum ActionScript 3
    Réponses: 1
    Dernier message: 07/05/2008, 08h57
  4. garbage collector et finalize() Comment les utiliser ?
    Par HighSchool2005 dans le forum Langage
    Réponses: 17
    Dernier message: 03/04/2007, 15h25
  5. Réponses: 9
    Dernier message: 12/03/2007, 23h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo