Ozz*_*zzy 37 java arrays object
这是java包树:http: //docs.oracle.com/javase/7/docs/api/java/lang/package-tree.html
我读了一篇关于Java的教程,该教程表明在Java数组中是对象.
数组类在哪里?为什么我们可以制作这样的数组:
byte[] byteArr = new byte[];
char[] charArr = new char[];
int[] intArr = new int[];
Run Code Online (Sandbox Code Playgroud)
并且数组将从Object继承方法; 例如:
byte thisByte = 1;
byte thatByte = 2;
byte[] theseBytes = new byte[] {thisByte, thatByte};
int inheritance = theseBytes.length; //inherited 'length' field and some methods
int wasntInWill = thatByte.length; //error
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?
编辑:
根据答案,我现在知道它是一个包装final类java.lang.reflect.
我现在已经java.lang.reflect在我的Android项目中创建了一个包,并为其添加了一个名为Array.java的类.为了确认这是原始类的方式,Eclipse给了我错误"...已存在于path/to/android.jar"
如果我写出同一个类,java.lang.reflect.Array但改变toString()方法......这应该在我的应用程序中正常工作吗?
Jig*_*shi 43
来自JLS:
每个数组都有一个关联的Class对象,与具有相同组件类型的所有其他数组共享.[This]就像:数组类型的直接超类是Object [和]每个数组类型实现接口Cloneable和java.io.Serializable.
这由以下示例代码显示:
class Test {
public static void main(String[] args) {
int[] ia = new int[3];
System.out.println(ia.getClass());
System.out.println(ia.getClass().getSuperclass());
}
}
Run Code Online (Sandbox Code Playgroud)
打印:
class [I
class java.lang.Object
Run Code Online (Sandbox Code Playgroud)
其中string "[I"是类对象的运行时类型签名"array with component type int".
是的,因为数组类型有效地扩展了Object,所以你可以在arrayObject上调用toString(),也可以看到上面的例子
int arr[] = new arr[2];
arr.toString();
Run Code Online (Sandbox Code Playgroud)
数组是一种语言功能 - 它们具有用于声明和访问的特定语法.他们的班级定义对你来说是隐藏的.
他们在refleciton API中有代表 - java.lang.reflect.Array
顺便说一下,这个length领域不是继承自的Object.的.getClass(),.toString()等方法继承.
稍微详细说明上面的代码段:
public class ClassForName {
public static void main(String[] argv) throws ClassNotFoundException {
Class theClass = Class.forName("[I");
System.out.println(theClass.getName());
Class superClass = theClass.getSuperclass();
System.out.println(superClass.getName());
}
}
Run Code Online (Sandbox Code Playgroud)
结果:
C:\JavaTools>java ClassForName
[I
java.lang.Object
Run Code Online (Sandbox Code Playgroud)
可以看出,"[I"是我们将要调用的类的名称,用英语表示,"int的数组".该类是一个"完全公民"Java类,它响应Object的所有方法.唯一的区别是new语法不同,它不支持newInstance()Class 的方法.
(类["I","[C"等]在JVM中是"预定义的" - 没有与它们对应的.class文件.Java也会在运行中隐式创建"[ MyJavaClass;"如果你的程序中有一个"MyJavaClass"数组,则为class.)
| 归档时间: |
|
| 查看次数: |
23818 次 |
| 最近记录: |