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

avec Java Discussion :

Ecriture différente de try


Sujet :

avec Java

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 135
    Points : 67
    Points
    67
    Par défaut Ecriture différente de try
    Bonjour

    J'ai vu dans un livre une écriture de try que j'ai pas bien comprise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    import java.util.Scanner;
     
    public class Ok {
     
        public static void main(String[] args) {
            Scanner src = new Scanner(System.in);
     
            try (int n = src.nextInt()) {
                System.out.println("Yes");
            }
        }
    }
    pourriez-vous m’éclaircir l'idée un peu ?


    d'avance merci.

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    il s'agit d'un "exemple" de l'utilisation du try-with-resources.

    Un exemple bien pourri C'est quoi ce livre ?

    Entre les parenthèses suivant le try, les ressources qui sont créees, sous entendu des instances de classes qui implémentent java.lang.AutoCloseable seront automatiquement férmées à la fin du try (la méthode close() de Autocloseable sera appelée automatiquement).

    Dans l'exemple que tu cites, on ne crée pas d'instances autocloseable (on lit un int, qui n'est pas autocloseable : donc ça ne compile pas). Et on affiche "Yes" s'il n'y a pas d'exception lors de cette lecture : c'est quoi le sens de cette classe .
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 135
    Points : 67
    Points
    67
    Par défaut
    C'est quoi ce livre ?
    le livre c'est Core Java, Édition 9 - Volume II.

    l'exemple réel est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
      package test;
     
       import java.nio.file.*;
       import java.sql.*;
       import java.io.*;
       import java.util.*;
       /**
        * This program tests that the database and the JDBC driver are correctly configured.
       * @version 1.02 2012-06-05
          * @author Cay Horstmann
       */
      public class TestDB
      {
         public static void main(String args[]) throws IOException
         {
            try
            {
               runTest();
            }
            catch (SQLException ex)
            {
               for (Throwable t : ex)
                  t.printStackTrace();
            }
         }
         /**
          * Runs a test by creating a table, adding a value, showing the table contents, and removing
          * the table.
          */
         public static void runTest() throws SQLException, IOException
         {
            try (Connection conn = getConnection())
            {
               Statement stat = conn.createStatement();
     
               stat.executeUpdate("CREATE TABLE Greetings (Message CHAR(20))");
               stat.executeUpdate("INSERT INTO Greetings VALUES ('Hello, World!')");
     
               try (ResultSet result = stat.executeQuery("SELECT * FROM Greetings"))
               {
                  if (result.next())
                     System.out.println(result.getString(1));
               }
               stat.executeUpdate("DROP TABLE Greetings");
            }
         }
     
         /**
          * Gets a connection from the properties specified in the file database.properties.
          * @return the database connection
          */
         public static Connection getConnection() throws SQLException, IOException
         {
            Properties props = new Properties();
            try (InputStream in = Files.newInputStream(Paths.get("database.properties")))
            {
               props.load(in);
            }
            String drivers = props.getProperty("jdbc.drivers");
            if (drivers != null) System.setProperty("jdbc.drivers", drivers);
            String url = props.getProperty("jdbc.url");
            String username = props.getProperty("jdbc.username");
            String password = props.getProperty("jdbc.password");
            return DriverManager.getConnection(url, username, password);
         }
      }
    mais ce qui m'étonne c'est que j'obtiens des erreurs (avant même l'exécution du code) qui indiquent que l’écriture de try n'est pas correcte !

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par khaled_prg Voir le message
    le livre c'est Core Java, Édition 9 - Volume II.

    l'exemple réel est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
      package test;
     
       import java.nio.file.*;
       import java.sql.*;
       import java.io.*;
       import java.util.*;
       /**
        * This program tests that the database and the JDBC driver are correctly configured.
       * @version 1.02 2012-06-05
          * @author Cay Horstmann
       */
      public class TestDB
      {
         public static void main(String args[]) throws IOException
         {
            try
            {
               runTest();
            }
            catch (SQLException ex)
            {
               for (Throwable t : ex)
                  t.printStackTrace();
            }
         }
         /**
          * Runs a test by creating a table, adding a value, showing the table contents, and removing
          * the table.
          */
         public static void runTest() throws SQLException, IOException
         {
            try (Connection conn = getConnection())
            {
               Statement stat = conn.createStatement();
     
               stat.executeUpdate("CREATE TABLE Greetings (Message CHAR(20))");
               stat.executeUpdate("INSERT INTO Greetings VALUES ('Hello, World!')");
     
               try (ResultSet result = stat.executeQuery("SELECT * FROM Greetings"))
               {
                  if (result.next())
                     System.out.println(result.getString(1));
               }
               stat.executeUpdate("DROP TABLE Greetings");
            }
         }
     
         /**
          * Gets a connection from the properties specified in the file database.properties.
          * @return the database connection
          */
         public static Connection getConnection() throws SQLException, IOException
         {
            Properties props = new Properties();
            try (InputStream in = Files.newInputStream(Paths.get("database.properties")))
            {
               props.load(in);
            }
            String drivers = props.getProperty("jdbc.drivers");
            if (drivers != null) System.setProperty("jdbc.drivers", drivers);
            String url = props.getProperty("jdbc.url");
            String username = props.getProperty("jdbc.username");
            String password = props.getProperty("jdbc.password");
            return DriverManager.getConnection(url, username, password);
         }
      }
    La d'accord, les exemples ont du sens.

    Citation Envoyé par khaled_prg Voir le message
    mais ce qui m'étonne c'est que j'obtiens des erreurs (avant même l'exécution du code) qui indiquent que l’écriture de try n'est pas correcte !
    Le try-with-resources a été introduit avec java 7 : peut être testes-tu avec une version antérieure ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Modérateur
    Avatar de MasterMbg
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 719
    Points : 1 493
    Points
    1 493
    Par défaut
    Citation Envoyé par khaled_prg Voir le message
    Bonjour

    J'ai vu dans un livre une écriture de try que j'ai pas bien comprise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    import java.util.Scanner;
     
    public class Ok {
     
        public static void main(String[] args) {
            Scanner src = new Scanner(System.in);
     
            try (int n = src.nextInt()) {
                System.out.println("Yes");
            }
        }
    }
    pourriez-vous m’éclaircir l'idée un peu ?


    d'avance merci.
    Bonjour, c'est une façon de permettre la libération automatique d'une ressource occupée par un objet. Ce procédé est inclus dans Java 7 et versions les plus recentes.
    Dans ce code, on veut, après avoir utilisé l'objet src (un Scanner), libérer a ressource qu'il occupe quoi qu'il arrive... cf le tuto adiGuba, "Présentation de java se 7". adiguba.developpez.com/tutoriels/java/7/
    Plus tu apprends sérieusement, plus tu te rapproches d'un savoir noble. Une chose est certaine, les difficultés ne s'écarteront de ton chemin...

    Tu es nouveau dans le développement Android, la page des COURS est là pour te faciliter la vie
    Tu peux trouver la réponse à ta question dans la FAQ
    Retrouvez mon tutoriel sur la consommation des services web SOAP
    Pense à voter positivement en appuyant sur en bas à droite de la réponse qui t'a donné une piste de solution.

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 135
    Points : 67
    Points
    67
    Par défaut
    joel.drigo, MasterMbg
    Merci, c'est claire.

    sinon, si une exception se déclenche lors de l'exécution de l’instruction qui se trouve dans try-with-resources, qu'est ce qui va se passer ?
    parce que j'ai pas vu le catch !

  7. #7
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par khaled_prg Voir le message
    joel.drigo, MasterMbg
    Merci, c'est claire.

    sinon, si une exception se déclenche lors de l'exécution de l’instruction qui se trouve dans try-with-resources, qu'est ce qui va se passer ?
    parce que j'ai pas vu le catch !
    Dans l'exemple du livre il n'y a pas de catch, mais il y a des throws : on remonte donc les exceptions vers l'appelant. Ce qui est toujours mieux, puisque ça permet à l'appelant de réagir en fonction de l'exception.

    Perso, je ne suis pas fervent du throws pour la méthode main(), préférant toujours loguer au final une exception que je ne sais pas traiter dans le code (parce que le mieux est de traiter l'exception dans le code, comme par exemple, redemander à l'utilisateur de saisir un paramètre qui était incorrect (le mieux étant de ne pas lui permettre de saisir un paramètre incorrect lorsque c'est possible), ou attendre qu'un fichier soit accessible en écriture (avec un dialogue non bloquant pour informer l'utilisateur), si la première fois qu'on l'ouvre pour écrire dedans il est déjà ouvert par une autre application).

    La c'est un choix de ne pas traiter les erreurs sur la configuration de la connexion à la base, parce que probablement que dans le cas de l'exemple, ils ont jugé que si la procédure était suivie à la lettre, cette exception ne devait pas arriver, je suppose.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  8. #8
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 135
    Points : 67
    Points
    67
    Par défaut
    Ok, mais est-ce que on peut utiliser le catch avec try-with-resources pour personnaliser les messages d'erreurs par exemple ?

  9. #9
    Modérateur
    Avatar de MasterMbg
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 719
    Points : 1 493
    Points
    1 493
    Par défaut
    Citation Envoyé par khaled_prg Voir le message
    Ok, mais est-ce que on peut utiliser le catch avec try-with-resources pour personnaliser les messages d'erreurs par exemple ?
    Bien sur, comme dans cet exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     //Copie de fichier avec try-with-resources de Java 7:
    try (InputStream input = new FileInputStream (in.txt);
    OutputStream output = new FileOutputStream(out.txt)) {
    byte[] buf = new byte [ 8192];
    int len;
    while ( (len = input.read (buf)) >=0 )
    output. write(buf, 0 , len);
    } catch (IOException e) {
    //affichage du messafe d'erreur dans catch
    System.err. println ("Une erreur est survenue lors de la copie" );
    e. printStrackTrace();
    }
    Plus tu apprends sérieusement, plus tu te rapproches d'un savoir noble. Une chose est certaine, les difficultés ne s'écarteront de ton chemin...

    Tu es nouveau dans le développement Android, la page des COURS est là pour te faciliter la vie
    Tu peux trouver la réponse à ta question dans la FAQ
    Retrouvez mon tutoriel sur la consommation des services web SOAP
    Pense à voter positivement en appuyant sur en bas à droite de la réponse qui t'a donné une piste de solution.

  10. #10
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 135
    Points : 67
    Points
    67
    Par défaut
    c'est bien mais je vois quand même que le try et le catch sont isolés l'un de l'autre, car t'as mis un point-virgule après le try donc t'as pas ouvert les accolades directement après le try !

  11. #11
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par khaled_prg Voir le message
    c'est bien mais je vois quand même que le try et le catch sont isolés l'un de l'autre, car t'as mis un point-virgule après le try donc t'as pas ouvert les accolades directement après le try !
    Non son code est ok. C'est vrai que la syntaxe du try-with-resources est un peu confusant :

    try ( code créant des ressources autocloseable ) {
    }catch( ... ) {
    }
    avec code créant des ressources autocloseable, sous la forme de lignes de code java (donc finissant avec point-virgule) sauf la dernière.
    Donc les ; entre les parenthèses ne sont pas à prendre en compte pour la définition du block try...
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  12. #12
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 135
    Points : 67
    Points
    67
    Par défaut
    MasterMbg, joel.drigo
    Merci beaucoup pour vos explications, j'ai tout compris

    => Résolu.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 16/02/2007, 12h35
  2. Ecritures de différents types
    Par ToTo13 dans le forum Langage
    Réponses: 6
    Dernier message: 06/10/2006, 10h17
  3. Tris différents entre ACCESS et Oracle !
    Par Toutatis dans le forum Oracle
    Réponses: 1
    Dernier message: 16/05/2006, 14h17
  4. tri des données différent entre 2 bases
    Par j6m dans le forum Oracle
    Réponses: 2
    Dernier message: 12/03/2006, 10h17
  5. Réponses: 16
    Dernier message: 10/11/2005, 22h51

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