140 likes | 337 Vues
Animation du tp2. Traitement des exceptions Le bloc try/catch/finally NFP121 3ème année de licence. // hypothèse : args[0] == "123"; try{ String str = args[0]; int i = Integer.parseInt(str); int résultat = unCalcul(i); System.out.println(" résultat = " + résultat );
E N D
Animation du tp2 • Traitement des exceptions • Le bloc try/catch/finally • NFP121 3ème année de licence
// hypothèse : args[0] == "123"; try{ String str = args[0]; int i = Integer.parseInt(str); int résultat = unCalcul(i); System.out.println(" résultat = " + résultat ); }catch(NumberFormatException nfe){ System.out.println(" exception ! "); } ... private static int unCalcul(int x){ return x+1;}
// hypothèse : args[0] == "xyz"; try{ String str = args[0]; int i = Integer.parseInt(str); int résultat = unCalcul(i); System.out.println(" résultat = " + résultat ); }catch(NumberFormatException nfe){ System.out.println(" exception ! "); } ...
// hypothèse : args == null; try{ String str = args[0]; int i = Integer.parseInt(str); int résultat = unCalcul(i); System.out.println(" résultat = " + résultat ); }catch(NumberFormatException nfe){ System.out.println(" exception ! "); } ... ???
try{ // « JVM » // hypothèse : args == null; try{ String str = args[0]; int i = Integer.parseInt(str); int résultat = unCalcul(i); System.out.println(" résultat = " + résultat ); }catch(NumberFormatException nfe){ System.out.println(" exception ! "); } … … }catch(Exception e){ e.printStackException(); } Par défaut la JVM « attrape » l ’exception
// hypothèse : args == null; try{ String str = args[0]; int i = Integer.parseInt(str); int résultat = unCalcul(i); System.out.println(" résultat = " + résultat ); }catch(NumberFormatException nfe){ System.out.println(" exception ! "); } ... • catch(ArrayIndexOutOfBoundsException e){ • System.out.println(" exception ! "); • }
Passage à la pratique : le TP2 Bonjour, Lors du TP, nous avons obtenu une erreur dont on ne connait pas la source. Après tests avec Findbugs et PMD, toujours la même erreur et l'intervenant n'a pas trouvé non plus ce qui pourrait etre l'explication. Le test de l'applet (zeor absolu, mauvaise entrée) ne renvoie aucune erreur. Submitter : 1) test_AppletteFahrenheit_convertir(question3): exception inattendue ! java.lang.NullPointerException 2) test_AppletteFahrenheit_convertir_avec_erreur(question3): exception inattendue ! java.lang.NullPointerException 3) test_AppletteFahrenheit_convertir_bis(question3): exception inattendue ! java.lang.NullPointerException 4) test_AppletteFahrenheit_ZéroAbsolu(question3): exception inattendue ! java.lang.NullPointerException Ci joint le code source. JEWS : 21 sur 33 dans ce cas
le code source un extrait. public void init(){ //…. try{ getContentPane().setBackground(Color.decode(getParameter("backgroundColor"))); } catch (NumberFormatException nfe){ getContentPane().setBackground(Color.pink); } //…. } http://java.sun.com/j2se/1.5.0/docs/api/java/applet/Applet.html#getParameter(java.lang.String) Returns: the value of the named parameter, or null if not set. Sans oublier setBackground(c ) avec une « bonne couleur » avec « null » Color.decode avec « une bonne valeur » Color.decode avec « une mauvaise valeur » Color.decode avec « null »
public void init(){ //…. try{ getContentPane().setBackground(Color.decode(getParameter("backgroundColor"))); } catch (NumberFormatException nfe){ getContentPane().setBackground(Color.pink); } //…. } Color.decode avec « une mauvaise valeur » --> Color.decode avec « null » --> NumberFormatException ??? NullPointerException
Tests distants avec JEWS : backgroundColorest absent paramètre == null • String paramètre = getParameter("backgroundColor"); Submitter : 1) test_AppletteFahrenheit_convertir(question3): exception inattendue ! java.lang.NullPointerException 2) test_AppletteFahrenheit_convertir_avec_erreur(question3): exception inattendue ! java.lang.NullPointerException 3) test_AppletteFahrenheit_convertir_bis(question3): exception inattendue ! java.lang.NullPointerException 4) test_AppletteFahrenheit_ZéroAbsolu(question3): exception inattendue ! java.lang.NullPointerException
public void init(){ //…. try{ getContentPane().setBackground(Color.decode(getParameter("backgroundColor"))); } catch (NumberFormatException nfe){ getContentPane().setBackground(Color.pink); } //…. } catch (NullPointerException npe){ getContentPane().setBackground(Color.pink); } Bravo !!!
// question ? : domaine de paramètre, quelles sont les valeurs possibles ? public void init(){ //…. try{ String paramètre =getParameter("backgroundColor"); Color couleurDuFond = Color.decode(paramètre); getContentPane().setBackground(couleurDuFond); } catch (NumberFormatException nfe){ getContentPane().setBackground(Color.pink); }catch (NullPointerException npe){ getContentPane().setBackground(Color.pink); } } // question ? : toutes ces valeurs sont-elles compatibles avec Color.decode ? // question ? : domaine de couleurDuFond, quelles sont les valeurs possibles ? // question ? : etc... // exceptions : la liste est-elle exhaustive ?
En conclusion • Programmation == discipline rigoureuse • recherche « google » rules good programming Writing Correct Programs(Section 9.2 ) http://www.faqs.org/docs/javap/c9/index.html Programming style: how to keep control of your programs http://www.iu.hio.no/~mark/lectures/ProgrammingStyleGuide.html