有人说数组的length 是 Array 或者 Arrays 的字段
我查了下,不是.
有人说,这是方法,但没有括号.
int[] a = {1,2,3,4,5};
for(int k=0; k <a.length; k++)
有人说这是特殊的,讲不出来的.
我想知道答案,高分送上,再所不惜
我查了下,不是.
有人说,这是方法,但没有括号.
int[] a = {1,2,3,4,5};
for(int k=0; k <a.length; k++)
有人说这是特殊的,讲不出来的.
我想知道答案,高分送上,再所不惜
解决方案 »
- 用jxl将数据库中的数据导出到excel,代码都走完了,但是页面没有任何反应,无法下载,代码如下,求高手指点
- 为什么JAVA里面的下拉窗口在左边出现内容,多行文本框怎么实现换行呀
- 请教 这个txt文件 如何写?
- 一个关于String的问题
- 请教各位大虾:如何修改以下程序.急急急!!!!!!!!!谢谢!!!!!!!!!!
- 谁能解密乱码的文本文件
- JAVA 主要用来开发什么样类型的程序比较多?
- 我有个问题 就是java1.1和以后的java 1.n( n>=2) 在 lang 和 awt 等这类包 有什么区别吗?还有java 1.1和以后的java 1.2到底有什么大的
- 如何连接mysql中的数据库?
- scjp 真题一个??,?
- 在SWT 中怎么移动树节点
- 请教:网页加载applet时,出现java.security.AccessControlException
数组是一种特殊的对象,没有一个类与之对应的
首先在java中数组不是基本数据类型,是符合类型的。
接着在生成.class文件时java虚拟机貌似调用Array类的相关方法生成数组对象(至于具体如何实现没有查看源代码)。同时设置成员变量length的值(数组的长度)。
最后运行时就可以调用数组的length属性值了。
在所有数组中有唯一的一个属性——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
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.
运行时进行修改。我们都知道数组的长度是不可变的,这是由于数组除了包含数组中的数据之外,至少还
会包含一个长度,否则的话它自己都不知道自己有多少元素了呢,这样就不会产生这个
数组去访问不属于它的空间了。而这个长度的成员当然也不能由用户自己定义的,它的值得在编译时确定下来的,因此
就只能由编译来添加这个成员,用于访问这个数组的长度。注意了,这个长度并不是在
访问时计算出来的,而是在编译时就产生的一个常量写在某块内存里面的。在代码中就
可以通过 length 来访问了,其对应的 JVM 指令就是 arraylength。像数组的 length 一样其他还有类似的,比如:类中个 class 成员,这个也是在编译时
产生的。
• The public final field length, which contains the number of components
of the array (length may be positive or zero). 这不等于说明 lenth是类Array里边的字段了吗???
真是又回到老路上来了