Podemos determinar la longitud de un ArrayList<E> usando su método público size() , como
ArrayList<Integer> arr = new ArrayList(10); int size = arr.size(); De manera similar, podemos determinar la longitud de un objeto Array usando la propiedad de length
String[] str = new String[10]; int size = str.length; Mientras que el método size() de ArrayList se define dentro de la clase ArrayList , ¿dónde se define esta propiedad de length de Array ?
Las matrices son objetos especiales en Java, tienen un atributo simple llamado length que es final .
No hay una "definición de clase" de una matriz (no puede encontrarla en ningún archivo .class), son parte del lenguaje en sí.
10.7. Miembros de la matriz
Los miembros de un tipo de matriz son todos los siguientes:
- La
lengthdel campofinalpublic, que contiene el número de componentes de la matriz. lalengthpuede ser positiva o cero.El método
publicclone, que anula el método del mismo nombre en la claseObjecty no arroja excepciones comprobadas. El tipo de retorno del método declonede un tipo de matrizT[]esT[].Un clon de una matriz multidimensional es poco profundo, lo que quiere decir que crea solo una matriz nueva. Los subarreglos son compartidos.
- Todos los miembros heredados de la clase
Object; el único método deObjectque no se hereda es su método declone.
Recursos:
Es "especial" básicamente, con su propia instrucción de código de bytes: arraylength . Así que este método:
public static void main(String[] args) { int x = args.length; }se compila en un código de bytes como este:
public static void main(java.lang.String[]); Code: 0: aload_0 1: arraylength 2: istore_1 3: returnEntonces no se accede como si fuera un campo normal. Efectivamente, si intentas conseguirlo como si fuera un campo normal, así, falla:
// Fails... Field field = args.getClass().getField("length"); System.out.println(field.get(args)); Desafortunadamente, la descripción JLS de cada tipo de matriz que tiene una length de campo final pública es algo engañosa :(
Está definido en la especificación del lenguaje Java :
Los miembros de un tipo de matriz son todos los siguientes:
- La
lengthdel campopublic final, que contiene el número de componentes de la matriz. lalengthpuede ser positiva o cero.
Dado que hay un número ilimitado de tipos de matrices (para cada clase hay un tipo de matriz correspondiente y luego hay matrices multidimensionales), no se pueden implementar en un archivo de clase; la JVM tiene que hacerlo sobre la marcha.