在所有数组中有唯一的一个属性——length,那么这个属性是在Java的哪一个类中的呢?这些数组的这个属性是从哪来的?不明白。

解决方案 »

  1.   

    这个,length是数组的长度,这个属性是java提供的,LZ难道想研究java底层?知道怎么用就可以了
      

  2.   

    查了一下jdk,应该是数组java.lang.reflect.Array中的一个属性。
    而这个属性返回的应该是调用Array类中的getLength(Object array)方法以 int 形式返回指定数组对象的长度?具体也不是很清楚,期望高手解答
      

  3.   

    但是java.lang.reflect.Array这个反射类中并没有length属性啊。
    java.lang.reflect.Array.getLength(Object array)竟然是一个静态的native方法。
      

  4.   

    在JDK的API中你绝对找不到数组的length属性的。
      

  5.   

    数组中的length是方法,而不是属性
      

  6.   

    回复人:cxz7531(大花猫) ( 五级(中级)) 信誉:97  2007-06-07 15:31:37  得分:0
    数组中的length是方法,而不是属性
    ---------------------------------------------
    ls的ls的ls,数组中的length是属性不是方法。不信自己试试看。===========================================================
    回复人:iamsangster(浪人(★★★★★) ( 一级(初级)) 信誉:96  2007-06-07 15:44:59  得分:0
    在某个.dll文件中
    ------------------------------------------------------------
    ls的ls,不会吧,在某个dll文件中,那Java怎么跨平台运行啊。===========================================================
    回复人:cxz7531(大花猫) ( 五级(中级)) 信誉:97  2007-06-07 15:55:38  得分:0

    数组实际上是一个特殊的类
    ------------------------------------------------------------
    ls的说得有理,数组是一个类这是肯定的,因为它有从Object中继承下来的10个方法。就是不太明白这个length属性是从哪来的。
      

  7.   

    Java中的确是有一些超语言的东西,再比如两个String对象可以用“+”进行连接,但你却无法自己写一个类,在其中重载加法运算符。
      

  8.   

    两个String对象可以用“+”进行连接,那是java特意为string类重载了操作符。string类本身没有什么特殊之处。而数组则是一个典型的特殊类。没有类文件,而且在运行时产生维护
      

  9.   

    回复人:cxz7531(大花猫) ( 五级(中级)) 信誉:97  2007-06-07 16:32:59  得分:0
    两个String对象可以用“+”进行连接,那是java特意为string类重载了操作符。string类本身没有什么特殊之处。
    而数组则是一个典型的特殊类。没有类文件,而且在运行时产生维护
    ------------------------------------------------------------------------------
    ls的ls,为什么说是在运行时产生维护的?有什么根据呢?
      

  10.   

    String类有个类文件 String.class。数组却没有,那它只能在运行中产生维护
      

  11.   

    是啊,我的意思就是说这是“Java特意为String这个类做的事情”,那不是超语言特性又是什么?一般程序员如何能够自己写一个类来得到像String那样的特殊照顾呢?显然不能。
      

  12.   

    数组是Java特殊处理过的,
    int i = args.length;可以通过javap 看到指令为
    aload_0
    arraylength
    istore_1
    return
    可见Java专门为Array定义了取得长度的指令了
      

  13.   

    还有,两个字符串相加并不是JVM本身做的事情,也就是Java内部并非对String作出了特殊处理String s = args[0] + args[1];实际编译后的代码等同于:
    String  s = (new StringBuilder()).append(args[0]).append(args[1]).toString();这中间的变换是编译器做的事情,而非JVM做的
      

  14.   

    数组的length即不是方法,也不是字段。
    在一个数组对象上调用length,会被Java编译器编译成一条arraylength指令(Java binary code)。
    而访问字段的语句会被编译成getfield或getstatic指令,调用方法的语句则会被编译成invokestatic,invokevirtual或invokespecial等指令。
      

  15.   

    Java字节码中有许多单独针对数组的指令,它们在其它任何非数组类型的对象上调用都是毫无意义的。
    由此可见,它们本就不一样,不能等同起来直接进行对比。
      

  16.   

    我只是说它不是一般的对象字段(instance field)或类字段(class field)。
    至于它“是不是属性”,那就看你怎么理解“属性”这个词了。
      

  17.   

    JAVA有很多东西没公布出来而已...
    就像两个字符串+的话 实际上是用StringBuilder了
      

  18.   

    1。length不是array的方法或者属性
    这个很好证明:new个数组出来 getDeclaredFields()是0
    2。java对数组的操作是指令级的。
      

  19.   

    - -!看完我发现。我的java水平属于弱智状态。
      

  20.   

    好贴 只可惜  很多东西 是讲不清楚的,,,
    组数 有个  length 应该说不是对象
      

  21.   

    哈哈,刚刚开始学习java的数组。受教了
      

  22.   

    没想到这个帖子快 5 年了还有人在回复,呵呵。这个是我当时使用 JAVA 一年后发布的帖子,当时真的很纳闷呢。实际上,数组的 length 属性是 Java 编译器在编译时给加上的,为其分配了 1 个字长的内存空间,用于存储数组的长度。这个 length 属性相当于数组对象中一个 public final static int length = ?; 的属性。Java 中还有一个跟数组 length 属性类似的,也就是类的 class 属性,比如 String.class,这个 class 也是编译器在编译时动态给加上的,呵呵。