Exception java

Discutez d'informatique ici !
Avatar de l’utilisateur
Rockleader
Habitué(e)
Messages: 2126
Enregistré le: 11 Oct 2011, 18:42

Exception java

par Rockleader » 28 Déc 2014, 12:30

Hello,

je fais face à une nouvelle structure try catch

Je ne suis pas certain d'avoir bien compris son fonctionnement.

On essai d'exécuter ce qu'il y as à l'intérieur du try. Si sa marche on s'arrête là, si ça plante on exécute le catch à la place ? Un peu comme un execlp en C si je ne m'abuse.

C'est ce que j'ai pu déduire via quelques exemples trouvés, division par zéro notamment.


Mon exemple est en revanche un peu plus compliqué que ça.


Code: Tout sélectionner
try {
         int port=5099;   //par defaut, port de l'arene=5099
         
         if (args.length!=0) port=Integer.parseInt(args[0]);
         
         String ipArene = "localhost";
         if (args.length!=0) if (args[1]!="") ipArene=args[1];
         
         Personnage bidule = new Personnage("Bidule", 100, 200);
         
         new Console(bidule, 40, 40, port, ipArene);
      } catch (RemoteException e) {
         e.printStackTrace();
      }


Je ne comprends pas ce que fait RemoteException et printStackTrace

J'ai cru comprendre qu'il y avait une superclasse d'exception, je me doute bien que les méthodes sont caché à l'intérieur mais du coup je sais pas à quoi elles servent x)

On s'en doute un peu au vu du nom, mais je préfère être sur...

e n'étant pas déclaré, je me suis laissé dire que RemoteException était un type...la méthode qui suit se contenterait donc d'empiler l'exception généré quelque part ?
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !



eriadrim
Membre Relatif
Messages: 113
Enregistré le: 19 Oct 2013, 12:04

par eriadrim » 28 Déc 2014, 14:04

Dans une structure try ... catch, c'est très intuitif, comme un while qui veut dire "tant que" ou un if qui veut dire "si".

Ici dans les exceptions, c'est la même chose, sauf que on dit pas "mon programme bug ou plante" mais le programme "lève une exception" ou "lancer une ecxeption". C'est pour cela que dans la majorité des langages, si on veut lever une exception, on utilise le mot clé raise (c'est la cas en Caml et en Python par exemple) ou throw (par exemple java).

Si par ailleurs, on laisse l'exception sans rien faire, on dit que "l'exception n'a pas été rattrapé" on le voit souvent quand les compilateurs nous disent "Uncaught exception : divide by 0" par exemple. C'est la qu’intervient la structure try ..... catch

Tout d'abord, on teste, on essaie, on "try", mais si une exception est levé, alors on doit "l'attrapé" avant de faire tout planté. C'est la qu'intervient le catch (attraper en anglais). En gros on "attrape" l'erreur et suivant l'erreur on dit au programme de se comporter de tel ou tel façon.

Ici, dans ton code, si je reconnait bien, tu tente une connexion à localhost sous un port 5099. Mais ne sachant pas si la connexion va réussir (le port est occupé, localhost n'existe pas ....) et bien tu "essaie", donc tu le met dans un try

Si ça ne marche pas, dans ce cas on te renverra une erreur. Mais dans Java, toute chose à un type, et le type de l'erreur c'est RemoteException. Dans ce cas, on affiche l'erreur.

Dans le détail, une exception possède une trace, qui est le "chemin" suivi depuis le try jusqu'à l'erreur, et cette trace on la stock dans une pile qui est contenu dans ton erreur. Donc ici tu affiche cette pile, qui te permet de remonter jusqu'à l'erreur.

Par exemple il pourrait te dire un truc qui ressemble:
"dans l'appel de Console ligne 42 : erreur dans l'appel de connexion(.....)"
"dans l'appel de connexion(.....) ligne 73 : erreur mauvais mot de passe"

Avatar de l’utilisateur
Rockleader
Habitué(e)
Messages: 2126
Enregistré le: 11 Oct 2011, 18:42

par Rockleader » 28 Déc 2014, 14:35

Merci beaucoup je comprends bien mieux la structure à présent :)
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !

 

Retourner vers ϟ Informatique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 2 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite