java中的点长度 - 找到它的定义

abs*_*son 6 java arrays

在哪个类中是length用Java定义的字段(例如,对于数组长度)?我能在Object课堂上看到它的定义吗?

编辑:为什么这个领域如此设计(任何与安全性或内存效率相关的事情)?

pol*_*nts 12

数组类型在Java中是特殊的.这是JLS 10.7阵列成员的摘录

数组类型的成员是以下所有成员:

  • public final字段length,包含数组的组件数(长度可以是正数或零).
  • public方法clone在类中重写相同名称的方法,Object并且不会抛出任何已检查的异常.数组类型的clone方法的返回类型T[]T[].
  • 所有成员都继承自Object类; 唯一没有继承的Object clone方法是它的方法.

尽管如此,当你在数组上使用反射时仍然存在一些旧的错误:既length不能clone也不能通过反射找到(bug#5047859,bug#4987375).

这两个成员都不是以任何超类的传统方式继承的; 所有数组类型都Object直接扩展.这种"特殊处理"可能是为什么这些错误首先存在的原因.


"这是否意味着人们永远不会看到定义的长度变量?"

数组类型没有实际的源代码.同样,这些类型是特殊的; JVM只是在需要时从帽子中取出这些类型.您将看不到.java数组类型的源文件int[].class(即所有int数组的类型).

所以,不,你将无法看到定义的length 字段.


有关进一步阅读,以下是有关Java反射的一些信息:


Yis*_*hai 5

数组不像常规类,它们是Java语言规范中定义的特殊情况.所以.length public final变量是在Java语言规范中定义的,但实际上并没有在.java或.class文件中的任何地方定义.