有人说数组的length 是 Array 或者 Arrays 的字段
我查了下,不是.
有人说,这是方法,但没有括号.
 int[] a = {1,2,3,4,5}; 
      for(int k=0; k <a.length; k++)   
有人说这是特殊的,讲不出来的.
我想知道答案,高分送上,再所不惜

解决方案 »

  1.   

    length是一个属性,凡是数组都有的属性
    数组是一种特殊的对象,没有一个类与之对应的
      

  2.   

    在Java中,数组下标从O开始。数组中的元素个数length是数组类中唯一的数据成员变量。使用new创建数组时系统自动给length赋值。数组一旦创建完毕,其大小就固定下来。程序运行时使用length进行数组边界检查。如果发生越界访问,则抛出一个异常。
      

  3.   

    以下是俺地一点想法,不知道是否对您有用:)
    首先在java中数组不是基本数据类型,是符合类型的。
    接着在生成.class文件时java虚拟机貌似调用Array类的相关方法生成数组对象(至于具体如何实现没有查看源代码)。同时设置成员变量length的值(数组的长度)。
    最后运行时就可以调用数组的length属性值了。
      

  4.   

    这个数组 属于java的内置类型。就比如int. int 就不是一个object.他传递的时候就是值传递,而其他的所有的object都是引用传递。
      

  5.   

    原文地址: http://topic.csdn.net/u/20070606/15/b77a37ea-5b5b-49d1-8ab4-5968467a4a99.html果子的研究能力真是很强啊!里面几位前辈的底层能力更是值得敬佩。问题:
    在所有数组中有唯一的一个属性——length,那么这个属性是在Java的哪一个类中的呢?这些数组的这个属性是从哪来的?不明白。答案:
    数组是Java特殊处理过的, 
    int   i   =   args.length; 可以通过javap   看到指令为 
    aload_0 
    arraylength 
    istore_1 
    return 
    可见Java专门为Array定义了取得长度的指令了------------------------------------------------------------------------------
    数组的length即不是方法,也不是字段。 
    在一个数组对象上调用length,会被Java编译器编译成一条arraylength指令(Java   binary   code)。 
    而访问字段的语句会被编译成getfield或getstatic指令,调用方法的语句则会被编译成invokestatic,invokevirtual或invokespecial等指令。
    Java字节码中有许多单独针对数组的指令,它们在其它任何非数组类型的对象上调用都是毫无意义的。 
    由此可见,它们本就不一样,不能等同起来直接进行对比。------------------------------------------------------------------------------
    1。length不是array的方法或者属性 
    这个很好证明:new个数组出来   getDeclaredFields()是0 
    2。java对数组的操作是指令级的。

    Please refer to:
    http://blog.csdn.net/java2000_net/archive/2008/09/25/2975636.aspx
      

  6.   

    一共有三种域,类域,接口域还有就是数组类型隐式成员length
    A field, one of the following:
    ❖ A field declared in a class type 
    ❖ A constant field declared in an interface type 
    ❖ The field length, which is implicitly a member of every array type
    在数组类型的成员又如下,包括我们所谈论的public final field length
    The members of an array type are all of the following:
    • The public final field length, which contains the number of components
    of the array (length may be positive or zero).

    • The public method clone, which overrides the method of the same name in
    class Object and throws no checked exceptions. The return type of the clone
    method of an array type T[] is T[].
    • All the members inherited from class Object; the only method of Object that
    is not inherited is its clone method.
      

  7.   

    一年多前我刚来 CSDN 时提的问题,这也能翻出来啊,呵呵,惭愧哦~~实际上在那个帖子里各位大侠们也提到了这个属性是由编译器在编译时自己加上去的。这个属性用以获得某个数组的长度,这是一个常量,也就是说并不能像 JavaScript 在
    运行时进行修改。我们都知道数组的长度是不可变的,这是由于数组除了包含数组中的数据之外,至少还
    会包含一个长度,否则的话它自己都不知道自己有多少元素了呢,这样就不会产生这个
    数组去访问不属于它的空间了。而这个长度的成员当然也不能由用户自己定义的,它的值得在编译时确定下来的,因此
    就只能由编译来添加这个成员,用于访问这个数组的长度。注意了,这个长度并不是在
    访问时计算出来的,而是在编译时就产生的一个常量写在某块内存里面的。在代码中就
    可以通过 length 来访问了,其对应的 JVM 指令就是 arraylength。像数组的 length 一样其他还有类似的,比如:类中个 class 成员,这个也是在编译时
    产生的。
      

  8.   

    类中的class是运行时才产生的吧
      

  9.   

    The members of an array type are all of the following: 
    • The public final field length, which contains the number of components 
    of the array (length may be positive or zero). 这不等于说明 lenth是类Array里边的字段了吗???
    真是又回到老路上来了
      

  10.   

    这里说的是“array type”,不是“Array class” :)
      

  11.   

    数组中的元素个数length是数组类中唯一的数据成员变量