数组应该是个类,每个数组都与一个Class对象相关联,该对象由具有相同分量类型的数组所共有, 数组类型的超类是Object,数组类型也具有完全类属修饰符 int [] a = new int[10]; System.out.println(a.getClass());可以得到这个数组的类名right!!比如length不是数组的方法或者属性 这个很好证明:new个数组出来 getDeclaredFields()是0 数组是Java特殊处理过的, int i = array.length; 可以通过javap 看到指令为 aload_0 arraylength istore_1 return 可见Java专门为Array定义了取得长度的指令
答:严格地说,应该问:数组类型是不是java中的一个类? 我的想法是:应该是. 理由: 在最权威的JLS 10.8节中是这样讲的: The direct superclass of an array type is Object. Every array type implements the interfaces Cloneable and java.io.Serializable.以上仅供楼主参考
数组变量仅仅是对数组对象的一个引用, 例如:int[] a = new int[10];int[] b = a; a,b仅仅是对包含有10个整形元素的对象的一个引用。 jvm中应该由一个内置类,专门对数组进行实例化,这个内置类中包含有一个type属性,是私有的,记录数组声明的类型,还有一个length属性,是公有的,记录数组的长度,而且这个类继承自Object,所以,可以用a.toString(),a.getClass()等Object的方法。
数组应该称为 对象吧 对象类似与指针 java中没有指针。数组的本质也就是一个指针而已了
真正的JAVA高手,相信是在JAVA细节上也不会含糊的。 这是一个学习和研究的态度。 谁说数组都放在堆里的?? int[] a= new int[100];是放在栈里。 而 Integer[] a = new Integer[100];是放在堆里
被new出来的。都有自己的意思。说数组为类。个人觉得,也没错。
java中引用本身一般是放在栈中,而对象是堆中的。想int[] a= new int[100]一定是堆的。和Intger[] 没有区别的。还有int[]是对象。你可以下一个方法。 void fun(Object o); 然后 int[]a = new int[10]; fun(a); 试一试 看看会不会编译出错。
数组(array)是相同类型变量的集合,可以使用共同的名字引用它。数组可被定义为任何类型,可以是一维或多维。数组中的一个特别要素是通过下标来访问它。数组提供了一种将有联系的信息分组的便利方法。
一个东西是不是类怎么界定呢? 说法很多.
有人说要能够使用newInstance()获取新实例,有人说要能通过getClass得到类原型,还有说有构造函数是类的必要条件.
但是偏偏的,数组的newInstance()就会报错,却可以得到类原型,然后通过原型查询其构造函数又会发现数组没有构造函数,所以怎么看待数组,要看个人理解了.
在java编程思想里面是把数组和类分开来讲的。
也就是没有包含关系。
封装了域和方法应该叫类吧
但是好像数组有很多OBJECT类的方法。
一个东西是不是类怎么界定呢? 说法很多.
有人说要能够使用newInstance()获取新实例,有人说要能通过getClass得到类原型,还有说有构造函数是类的必要条件.
但是偏偏的,数组的newInstance()就会报错,却可以得到类原型,然后通过原型查询其构造函数又会发现数组没有构造函数,所以怎么看待数组,要看个人理解了.
至于理论上数组算不算类,那没意义吧╮( ̄▽ ̄")╭
数组类型的超类是Object,数组类型也具有完全类属修饰符 int [] a = new int[10];
System.out.println(a.getClass());可以得到这个数组的类名right!!比如length不是数组的方法或者属性
这个很好证明:new个数组出来 getDeclaredFields()是0 数组是Java特殊处理过的,
int i = array.length; 可以通过javap 看到指令为
aload_0
arraylength
istore_1
return 可见Java专门为Array定义了取得长度的指令
所以你可以将数组看成类
API里查不到的难道不是类了吗?
那ToolkitImage
在API里也没有。算不算类啊。
况且它实现了object的方法。
接口能实现吗??
import java.lang.reflect.*;public class ArrayTest {
public static void main(String...args) {
int[] arr = (int[])Array.newInstance(Integer.TYPE, 10);
Random r = new Random(100);
for(int i =0; i<arr.length; i++) {
arr[i] = r.nextInt(100);
}
System.out.println(Arrays.toString(arr));
}
}
这是我做的一个面试题,java.lang.reflect.Array这个不是一个类吗?它有很多方法的
但是他的一个方法签名表明了数组是一个object的子类:
private static native Object newArray(Class componentType, int length)
我的想法是:应该是.
理由:
在最权威的JLS 10.8节中是这样讲的:
The direct superclass of an array type is Object. Every
array type implements the interfaces Cloneable and java.io.Serializable.以上仅供楼主参考
例如:int[] a = new int[10];int[] b = a;
a,b仅仅是对包含有10个整形元素的对象的一个引用。
jvm中应该由一个内置类,专门对数组进行实例化,这个内置类中包含有一个type属性,是私有的,记录数组声明的类型,还有一个length属性,是公有的,记录数组的长度,而且这个类继承自Object,所以,可以用a.toString(),a.getClass()等Object的方法。
这是一个学习和研究的态度。
谁说数组都放在堆里的??
int[] a= new int[100];是放在栈里。
而
Integer[] a = new Integer[100];是放在堆里
java中引用本身一般是放在栈中,而对象是堆中的。想int[] a= new int[100]一定是堆的。和Intger[] 没有区别的。还有int[]是对象。你可以下一个方法。 void fun(Object o);
然后 int[]a = new int[10]; fun(a);
试一试 看看会不会编译出错。
刚好以前特别注意过这个问题,现将我的结论给大家说一下。
Java数据类型:基本类型、引用类型 基本类型:数据类型 (注意boolean是基本类型)
数据类型:、
数据类型又分:
浮点数类型:float、double
整数类型:byte、short、int、long、char
字符类型 引用类型:类类型、接口类型、数组类型。
高手就都研究这个??
你把这个研究懂了,对你编程,做应用产生了多大的帮助??
反正我也不是高手,不打算把这个研究的那么细还有,一般来讲只要你new了就一定放在堆里,除非你所用的JVM有特殊的实现方式
在某种情况下也可以在栈里放new出来的对象,这是在《JVM规范》或者是《深入JVM》
中提到的,记不得了·~
难道你懂JVM内层的东西,还不懂数组这点小东西。
有时,细微知著。知道这个是没有对编程有帮助。
但是,如果说你new 一个东西,根本不知道里边发生了什么。
出问题总是迟早的。