[significa Array, Lsome.type.Heresignifica el tipo. Eso es similar a los descriptores de tipo utilizados internamente en el código de bytes que se ve en §4.3 de la Especificación de la máquina virtual de Java , elegido para ser lo más breve posible . La única diferencia es que los descriptores reales utilizan en /lugar de. para denotar paquetes.
Por ejemplo, para las primitivas el valor es: [Ipara matriz de int, una matriz de dos dimensiones sería el siguiente: [[I.
Dado que las clases pueden tener cualquier nombre, sería más difícil identificar qué clase es, por lo tanto L, el nombre de la clase termina con un;
Los descriptores también se utilizan para representar los tipos de campos y métodos.
Por ejemplo:
(IDLjava/lang/Thread;)Ljava/lang/Object;
... corresponde a un método cuyos parámetros son int, doubley Thready el tipo de retorno esObject
editar
También puede ver esto en archivos .class usando el dissambler java
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;
const #2 = class #13;
const #3 = class #14;
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;
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;
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;
3: dup
4: invokespecial #1;
7: areturn
LineNumberTable:
line 3: 0
}
Y en el archivo de clase sin formato (mire la línea 5):

Referencia: descripción de campo en la especificación de JVM