顶者分

解决方案 »

  1.   

    应该不算吧!
    数组(array)是相同类型变量的集合,可以使用共同的名字引用它。数组可被定义为任何类型,可以是一维或多维。数组中的一个特别要素是通过下标来访问它。数组提供了一种将有联系的信息分组的便利方法。
      

  2.   

    数组不是常规的类,但是也不能说它就不是类.因为特殊. 
    一个东西是不是类怎么界定呢? 说法很多. 
    有人说要能够使用newInstance()获取新实例,有人说要能通过getClass得到类原型,还有说有构造函数是类的必要条件. 
    但是偏偏的,数组的newInstance()就会报错,却可以得到类原型,然后通过原型查询其构造函数又会发现数组没有构造函数,所以怎么看待数组,要看个人理解了. 
      

  3.   

    数组不是类,但是实现了Object中的方法按照Java语言规范的说法:Java数据类型分为两大类:基本数据类型和复合数据类型,其中复合数据类型包括数组、类和接口。
      

  4.   

    数组不属于类。
    在java编程思想里面是把数组和类分开来讲的。
    也就是没有包含关系。
      

  5.   

    数组肯定是类,要不object方法是怎么实现的,
    封装了域和方法应该叫类吧
      

  6.   

    数组应该不是常规的类,只是一个放同一种类型数据的集合,并且还不是集合类
    但是好像数组有很多OBJECT类的方法。
      

  7.   

    我认为数组是一个引用类型,它调用的都是该引用所引用的实际对象的方法和属性,并没有什么奇怪的,就像C语言中的void * 它虽然没有类型,但它可以指向任何类型。
      

  8.   

    1、数组不是集合,它只能保存同种类型的多个原始类型或者对象的引用。数组保存的仅仅是对象的引用,而不是对象本身。2、数组本身就是对象,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中的。3、数组声明的两种形式:一、int[] arr; 二、int arr[]; 推荐使用前者,这符合Sun的命名规范,而且容易了解到关键点,这是一个int数组对象,而不是一个int原始类型。4、在数组声明中包含数组长度永远是不合法的!如:int[5] arr; 。因为,声明的时候并没有实例化任何对象,只有在实例化数组对象时,JVM才分配空间,这时才与长度有关。5、在数组构造的时候必须指定长度,因为JVM要知道需要在堆上分配多少空间。反例:int[] arr = new int[];6、多维数组的声明。int[][][] arr; 是三维int型数组。7、一维数组的构造。形如:String[] sa = new String[5];或者分成两句:String[] sa; sa = new String[5];8、原始类型数组元素的默认值。对于原始类型数组,在用new构造完成而没有初始化时,JVM自动对其进行初始化。默认值:byte、short、 int、long--0 float--0.0f double--0.0 boolean--false char--'"u0000'。(无论该数组是成员变量还是局部变量)9、对象类型数组中的引用被默认初始化为null。如:Car[] myCar = new Car[10]; 相当于从myCar[0]到myCar[9]都这样被自动初始化为myCar[i] = null;10、对象类型的数组虽然被默认初始化了,但是并没有调用其构造函数。也就是说:Car[] myCar = new Car[10];只创建了一个myCar数组对象!并没有创建Car对象的任何实例!11、多维数组的构造。float[][] ratings = new float[9][]; 第一维的长度必须给出,其余的可以不写,因为JVM只需要知道赋给变量ratings的对象的长度。12、数组索引的范围。数组中各个元素的索引是从0开始的,到length-1。每个数组对象都有一个length属性,它保存了该数组对象的长度。(注意和String对象的length()方法区分开来,这两者没有统一起来是很遗憾的。)13、Java有数组下标检查,当访问超出索引范围时,将产生ArrayIndexOutOfBoundsException运行时异常。注意,这种下标检查不是在编译时刻进行的,而是在运行时!也就是说int[] arr = new int[10]; arr[100] = 100; 这么明显的错误可以通过编译,但在运行时抛出!Java的数组下标检查是需要额外开销的,但是出于安全的权衡还是值得的,因为很多语言在使用数组时是不安全的,可以任意访问自身内存块外的数组,编译运行都不会报错,产生难以预料的后果!
      

  9.   

    数组也是java中的一个类,具体可以看看jvm的源代码中定义了jobjectarray这个类
      

  10.   

    查了下API,貌似没有当成一个类来讲解。具体的期待大牛来讲解一下了。
      

  11.   

    数组不是常规的类,但是也不能说它就不是类.因为特殊. 
    一个东西是不是类怎么界定呢? 说法很多. 
    有人说要能够使用newInstance()获取新实例,有人说要能通过getClass得到类原型,还有说有构造函数是类的必要条件. 
    但是偏偏的,数组的newInstance()就会报错,却可以得到类原型,然后通过原型查询其构造函数又会发现数组没有构造函数,所以怎么看待数组,要看个人理解了. 
      

  12.   

    java对数组对象化的操作的支持是指令级的,也就是说java虚拟机有专门针对数组的指令。数组的Class类实例是java虚拟机动态创建动态加载的,其结构与普通java类的Class实例有一些不同
      

  13.   

    应该是类吧,数组不是基本类型,那作为一种数据类型,在Java里就是类了
      

  14.   

    Java的数组具有类的大部分特点,不过JVM对数组有字节码上的特殊支持,处理上有许多地方不同于普通类.
    至于理论上数组算不算类,那没意义吧╮( ̄▽ ̄")╭ 
      

  15.   

    数组应该是个类,每个数组都与一个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定义了取得长度的指令
      

  16.   

    万物都是类 这是java的根本
    所以你可以将数组看成类
      

  17.   

    数组当然是类了。
    API里查不到的难道不是类了吗?
    那ToolkitImage
    在API里也没有。算不算类啊。
    况且它实现了object的方法。
    接口能实现吗??
      

  18.   

    import java.util.*;
    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这个不是一个类吗?它有很多方法的
      

  19.   

    java.lang.reflect.Array并不表示数组本身,他只是提供了一系列静态方法来动态创建,访问数组。
    但是他的一个方法签名表明了数组是一个object的子类:
    private static native Object newArray(Class componentType, int length)
      

  20.   

    数组应该不是一种常规的类吧,Java中的机制应该对这个有专门的处理吧,学习了,尤其14楼的总结不错,顶一下~~~
      

  21.   

    答:严格地说,应该问:数组类型是不是java中的一个类?
    我的想法是:应该是.
    理由:
    最权威的JLS 10.8节中是这样讲的:
    The direct superclass of an array type is Object. Every
    array type implements 
    the interfaces Cloneable and java.io.Serializable.以上仅供楼主参考
      

  22.   

    数组变量仅仅是对数组对象的一个引用,
    例如:int[] a = new int[10];int[] b = a;
    a,b仅仅是对包含有10个整形元素的对象的一个引用。
    jvm中应该由一个内置类,专门对数组进行实例化,这个内置类中包含有一个type属性,是私有的,记录数组声明的类型,还有一个length属性,是公有的,记录数组的长度,而且这个类继承自Object,所以,可以用a.toString(),a.getClass()等Object的方法。
      

  23.   

    数组应该称为 对象吧 对象类似与指针 java中没有指针。数组的本质也就是一个指针而已了
      

  24.   

    真正的JAVA高手,相信是在JAVA细节上也不会含糊的。
    这是一个学习和研究的态度。
    谁说数组都放在堆里的??
    int[] a= new int[100];是放在栈里。

    Integer[] a = new Integer[100];是放在堆里
      

  25.   

    被new出来的。都有自己的意思。说数组为类。个人觉得,也没错。
      

  26.   


    java中引用本身一般是放在栈中,而对象是堆中的。想int[] a= new int[100]一定是堆的。和Intger[] 没有区别的。还有int[]是对象。你可以下一个方法。 void fun(Object o);
    然后 int[]a = new int[10]; fun(a);
    试一试 看看会不会编译出错。
      

  27.   


    刚好以前特别注意过这个问题,现将我的结论给大家说一下。
    Java数据类型:基本类型、引用类型   基本类型:数据类型  (注意boolean是基本类型)
                  数据类型:、
             数据类型又分:
                  浮点数类型:float、double
                整数类型:byte、short、int、long、char
                字符类型  引用类型:类类型、接口类型、数组类型。
       
       
           
     
        
      

  28.   


    高手就都研究这个??
    你把这个研究懂了,对你编程,做应用产生了多大的帮助??
    反正我也不是高手,不打算把这个研究的那么细还有,一般来讲只要你new了就一定放在堆里,除非你所用的JVM有特殊的实现方式
    在某种情况下也可以在栈里放new出来的对象,这是在《JVM规范》或者是《深入JVM》
    中提到的,记不得了·~
      

  29.   

    new Object[5] instanceof Object 返回的是true
      

  30.   

    驳68楼:
    难道你懂JVM内层的东西,还不懂数组这点小东西。
    有时,细微知著。知道这个是没有对编程有帮助。
    但是,如果说你new 一个东西,根本不知道里边发生了什么。
    出问题总是迟早的。
      

  31.   

    是!....Java里面的数据类型可分成两类:一类是简单数据类型short char,byte,int,long,float,double.其次是复杂数据类型,包括了类,数组,引用,总体来说数组是一个类.
      

  32.   

    数组是个引用类型!一定程度上可以理解成类,因为他继承了Object类。是不是类与你使用并不冲突,只要你懂得数组怎么用就行了。数组引用是堆栈中,数组元素是在堆中的(元素是对象的话)。