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.
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.
ce n'est pas une classe. au meme titre que int ou double.
Pouvez vous être plus explicite svp ?
Merci
non, les méhandres de la structure de la java virtual machine sont hors de mes connaissances.Pouvez vous être plus explicite svp ?
Merci
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 arrayIf 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
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.
ci git une grosse con*****
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.Envoyé par lechewal
au temps pour moi
.. 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
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.
Salut,
Qu'est-ce qui n'est pas convainquant ????Envoyé par kimz
a++
[edit] grillé![]()
@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
Pourtant cela me semble clair :
Envoyé par millie
a++
Explore un peu le lien que je t'ai donné :Envoyé par kimz
Et dans ton exemple, tu utilises Integer qui lui, est bien une classe.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.
Partager