[
est synonyme de Tableau, l' Lsome.type.Here
signifie que le type. C'est similaire au type de descripteurs utilisés en interne dans le bytecode vu en §4.3 de la Machine Virtuelle Java Spécification -- choisis pour être aussi bref que possible. La seule différence est que le réel descripteurs d'utilisation /
plutôt que d' .
pour la dénotation de paquets.
Par exemple, pour les primitives de la valeur est: [I
pour le tableau de int, un tableau à deux dimensions seraient: [[I
.
Étant donné que les classes peuvent avoir n'importe quel nom, il serait plus difficile de déterminer dans quelle classe il est, d'où l' L
, le nom de la classe se termine avec un ;
Les descripteurs sont également utilisés pour représenter les types de champs et de méthodes.
Par exemple:
(IDLjava/lang/Thread;)Ljava/lang/Object;
... correspond à une méthode dont les paramètres sont int
, double
, et Thread
et le type de retour est - Object
modifier
Vous pouvez également voir ce dans le .les fichiers de classe en utilisant le java dissambler
C:>more > S.java
class S {
Object hello(int i, double d, long j, Thread t ) {
return new Object();
}
}
^C
C:>javac S.java
C:>javap -verbose S
class S extends java.lang.Object
SourceFile: "S.java"
minor version: 0
major version: 50
Constant pool:
const #1 = Method #2.#12; // java/lang/Object."<init>":()V
const #2 = class #13; // java/lang/Object
const #3 = class #14; // S
const #4 = Asciz <init>;
const #5 = Asciz ()V;
const #6 = Asciz Code;
const #7 = Asciz LineNumberTable;
const #8 = Asciz hello;
const #9 = Asciz (IDJLjava/lang/Thread;)Ljava/lang/Object;;
const #10 = Asciz SourceFile;
const #11 = Asciz S.java;
const #12 = NameAndType #4:#5;// "<init>":()V
const #13 = Asciz java/lang/Object;
const #14 = Asciz S;
{
S();
Code:
Stack=1, Locals=1, Args_size=1
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: return
LineNumberTable:
line 1: 0
java.lang.Object hello(int, double, long, java.lang.Thread);
Code:
Stack=2, Locals=7, Args_size=5
0: new #2; //class java/lang/Object
3: dup
4: invokespecial #1; //Method java/lang/Object."<init>":()V
7: areturn
LineNumberTable:
line 3: 0
}
Et en raw fichier de classe ( regardez à la ligne 5 ):
Référence: Champ description sur la spécification de la JVM