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 :

D'où vient l'attribut "length" des tableaux en java ?


Sujet :

Langage Java

  1. #1
    Membre confirmé

    Inscrit en
    Juin 2005
    Messages
    212
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 212
    Billets dans le blog
    1
    Par défaut D'où vient l'attribut "length" des tableaux en java ?
    Bonsoir,

    La question pourrait paraître farfelue, je voudrais savoir où est défini le "length" qui nous permet d'invoquer "machin.lenght" où machin est un tableau de String, int ou autre.
    J'espère que c'est clair, merci.

  2. #2
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 109
    Par défaut
    ce n'est pas une classe. au meme titre que int ou double.

  3. #3
    Membre confirmé

    Inscrit en
    Juin 2005
    Messages
    212
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 212
    Billets dans le blog
    1
    Par défaut
    Pouvez vous être plus explicite svp ?
    Merci

  4. #4
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 109
    Par défaut
    Pouvez vous être plus explicite svp ?
    Merci
    non, les méhandres de la structure de la java virtual machine sont hors de mes connaissances.

  5. #5
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    length est défini dans la grammaire java :

    http://java.sun.com/docs/books/jls/f...doc.html#27725 (il doit y avoir un lien meilleur avec toute la grammaire).

    Il est écrit :
    The members of an array type (§10.7) are all of the following:

    * Members inherited from its implicit superclass Object (§4.3.2, §20.1)
    * The field length, which is a constant (final) field of every array; its type is int and it contains the number of components of the array
    If Q is an expression name, let T be the type of the expression Q:

    * If T is not a reference type, a compile-time error occurs.
    * If there is not exactly one accessible (§6.6) member of the type T that is a field named Id, then a compile-time error occurs.
    * Otherwise, if this field is any of the following:
    o A field of an interface type
    o A final field of a class type (which may be either a class variable or an instance variable)
    o The final field length of an array type

  6. #6
    Membre chevronné Avatar de Rayndell
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    289
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 289
    Par défaut
    En (très) gros, on peut considérer les tableaux comme des objets définis de manière implicite (le mot-clé new utilisé en est la preuve), et bénéficiant d'une syntaxe de déclaration particulière définie par Java.

  7. #7
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 95
    Par défaut
    ci git une grosse con*****

  8. #8
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Citation Envoyé par lechewal
    Tout est objet en java
    Pas du tout.... int n'est pas une classe par exemple. De même, length comme je l'ai dit est défini dans la grammaire java et n'est pas un attribut d'une classe.

  9. #9
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 95
    Par défaut
    au temps pour moi

  10. #10
    Membre confirmé

    Inscrit en
    Juin 2005
    Messages
    212
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 212
    Billets dans le blog
    1
    Par défaut hum ..
    .. pas vraiment convainquant
    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
    import java.lang.reflect.Array; //pour Array.getLength
     
    public class Hello{
    	public static void main(String[ ] args){
              System.out.println("Hello world!\n");
     
     
    	  //Avec un tableau de String
    	  String [] tabString = new String[]{"1","2","3"};
     
              System.out.println("La longueur de tabString est : " + tabString.length);
     
    	  System.out.println("La classe de tabString est : tabString.getClass() = " + tabString.getClass().getName()); // ou 
     
    tabString.getClass()
     
      	  //Avec un tableau de d'int
    	  int[] tab = new int[10] ;
     
    	  System.out.println("\nLa longueur de tab est : Array.getLength(tab)= " + Array.getLength(tab));
     
    	  System.out.println("ou encore : tab.length = " + tab.length);
     
    	  System.out.println("La classe de tab est : " + tab.getClass().getName());
     
     
    	  // instancier la classe Hello
    	  Hello hello = new Hello();
     
    	  System.out.println("\nLa classe de hello est : " + hello.getClass());
     
     
    	  // différence entre une instance de Interger et un int 
    	  Integer integer = 10;
     
    	  int int1 = integer ;
     
    	  System.out.println("\nint1 = "+ int1 + "\ninteger = " + integer);
     
    	  System.out.println("\nclasse de integer : "+ integer.getClass());
     
    	  // la ligne suivante génère une erreur, "int1" n'a pas de classe
    	  //System.out.println("\nclasse de int1 : " + int1.getClass());
             }
     }
    >javac Hello.java
    >java Hello

    La longueur de tabString est : 3
    La classe de tabString est : tabString.getClass() = [Ljava.lang.String;

    La longueur de tab est : Array.getLength(tab)= 10
    ou encore : tab.length = 10
    La classe de tab est : [I

    La classe de hello est : class Hello

    int1 = 10
    integer = 10

    classe de integer : class java.lang.Integer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //Effet de la ligne :
    System.out.println("\nclasse de int1 : " + int1.getClass());
    Hello.java:41: int cannot be dereferenced
    System.out.println("\nclasse de int1 : " + int1.getClass());
    ^
    1 error

  11. #11
    Membre chevronné Avatar de Rayndell
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    289
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 289
    Par défaut
    Où est le problème ? Un int ne possède pas de méthode getClass() puisque c'est un type primitif. Les tableaux sont des objets en revanche, comme je l'ai déjà dit.

  12. #12
    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,

    Citation Envoyé par kimz
    .. pas vraiment convainquant
    Qu'est-ce qui n'est pas convainquant ????

    a++

    [edit] grillé

  13. #13
    Membre confirmé

    Inscrit en
    Juin 2005
    Messages
    212
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 212
    Billets dans le blog
    1
    Par défaut
    @adiGuba : C'est l'origine de length qui n'est pas convainquant pour moi, par rapport à ce qui a été donné comme explication plus haut

  14. #14
    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
    Pourtant cela me semble clair :
    Citation Envoyé par millie
    length est défini dans la grammaire java :

    http://java.sun.com/docs/books/jls/f...doc.html#27725 (il doit y avoir un lien meilleur avec toute la grammaire).

    a++

  15. #15
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Citation Envoyé par kimz
    @adiGuba : C'est l'origine de length qui n'est pas convainquant pour moi, par rapport à ce qui a été donné comme explication plus haut
    Explore un peu le lien que je t'ai donné :

    Every array also has a class; the method getClass (§20.1.1), when invoked for an array object, will return a class object (of class Class) that represents the class of the array. The classes for arrays have strange names that are not valid Java identifiers; for example, the class for an array of int components has the name "[I" and so the value of the expression:
    new int[10].getClass().getName()

    is the string "[I"; see §20.1.1 for details.
    Et dans ton exemple, tu utilises Integer qui lui, est bien une classe.

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