代码如下:
class Shape { 
Shape()
{
System.out.println("Shape");
}
}
public class test {
  public static void main(String[] args) {
    Shape[] s = new Shape[9];
    for(int i = 0; i < s.length; i++)
     s[i] = new Shape();
  }
}
对new关键字我有一些疑问,
1.两个new的作用分别是什么?
2.如果把Shape换成基本数据类型,问题1的答案是什么?
解释的越清楚越好,小弟实在有些糊涂。。

解决方案 »

  1.   

    Shape[] s = new Shape[9]; 
    是new 一个shape类型的数组对象
    s[i] = new Shape(); 
    是new 一个shape类型的对象
      

  2.   

    数组也是Java中的一种reference type
    第一个new是new一个数组对象,这个数组中装的Shape类型的引用,指向不同的Shape对象,这些对也就是
    new Shape()生成的对象, 
      

  3.   

    Shape[] s = new Shape[9]; 
    这个‘s’为数组开辟的一个引用对象,'new'就是开辟了一个空间
    s[i]=new Shape();
    在同样的类型下,在每个数组中的元素指定一个Shape
    可以这样的哦理解
    你拿了一个大箱子装了9个同样类型的小箱子
      

  4.   

    Shape[] s = new Shape[9]; 
    这个‘s’为数组开辟的一个引用对象,'new'就是开辟了一个空间
    s[i]=new Shape();
    在同样的类型下,在每个数组中的元素指定一个Shape
    可以这样的哦理解
    你拿了一个大箱子装了9个同样类型的小箱子
    有点勉强,呵呵
      

  5.   

    Shape[] s = new Shape[9]; 
    这个‘s’为数组开辟的一个引用对象,'new'就是开辟了一个空间
    s[i]=new Shape();
    在同样的类型下,在每个数组中的元素指定一个Shape
    可以这样的哦理解
    你拿了一个大箱子装了9个同样类型的小箱子
    有点勉强,呵呵
      

  6.   

    正解。换成是基本类型也是一样,int[] s = new int[9];就是创建一个int类型的数组对象,对于基本类型,就不用再初始化每一个具体的引用了。其实最主要就是明白数组也是一个对象!!!
      

  7.   

    Shape[] s = new Shape[9]; //创建一个Shape类型的数组
    for(int i = 0; i < s.length; i++) 
      s[i] = new Shape(); //创建一个Shape类型的数组元素,只不过这里的元素类型还是Shape类型的
      

  8.   

    就像C里面的链表而已, 分配HEAP空间。然后用个指针指向所分配的空间的首地址
      

  9.   

    都是创建对象,一个是创建数组对象,一个是创建简单的对象。基本数据类型是不用new来创建的,直接可以使用。引用类型的对象才用new来创建。
      

  10.   

    第一个new,也就是Shape[] s = new Shape[9]; 
    s是一个数组对象的引用,在java里面,数组也是对象第二个new,也就是s[i] = new Shape(); 
    s[i]是一个Shape对象的引用。
    如果是换作基本数据类型,
    s仍然是一个数组对象的引用,而s[i] = new int ()是有编译错误的。
      

  11.   

    new是Java的保留字.是用来创建对象的实例,创建对象.
      

  12.   

    第一个给数组创建对象,第二个给你Shape的 类实例化!声明了一个Shape类型的数组,大小为9,相当于 Shape s;
    Shape s1;Shape s2;Shape s3;Shape s4;一直到Shape s9;
    然后实例化他们,Shape s=new Shape();Shape s1=new Shape(); Shape s2=new Shape();一直到Shape s9=new Shape();
      

  13.   

    1.第一个new用于创建数组
    2.第二个new用于实例化Shape对象
    如果换成:
    int[] s = new int[9];
    for(int i=0;i<s.length;i++)
       s[i]=new Integer();//不能用new int,得用基本类型int的包装类Integer
      

  14.   

    如果第一个new是实例化一个数组对象的话,为什么不调用构造函数?
    class Shape
    {
    Shape()
    {
    System.out.println("Shape()");
    }
    }public class test
    {
    public static void main(String arg[])
    {
    Shape[] arr = new Shape[9];
    Class cls = arr.getClass();
    System.out.println(cls.getConstructors().length);
    }
    }
    结果是0,说明没有构造函数.何解?
      

  15.   

    创建了shape对象的数组,但是他不会自动创建shape对象啊,数组中的shape对象需要你自己再new出来。
      

  16.   

    Shape[] s = new Shape[9];
    是new 一个shape类型的数组对象,这时候,每个元素本身并没有new出来,只对Sahpe数组分配内存。
    s[i] = new Shape();
    是new 一个shape类型的对象,会调用Shape的构造函数。public class test
    {
    public static void main(String arg[])
    {
    Shape[] arr = new Shape[9];
    Class cls = arr.getClass();
    System.out.println(cls.getConstructors().length);
    }
    }
    结果是0,说明没有构造函数.何解?
    cls.getConstructors()=0,并不代表Shape[]没有被new,JVM对数组的初始化和
    用构造函数初始化普通对象是不同的。
    用 System.out.println(cls.getName());打印出的是 [Lcom.Shape,它是没有构造函数的,
    cls.getConstructors().length就是0.
    数组的初始化和普通类型,int,double初始化一样,只是分配内存而已,不过数组本身在java中又是对象类型。
      

  17.   

    数组对象和类实例.
    对new关键字我有一些疑问, 
    1.两个new的作用分别是什么? 
      第一个是新建数组对象,就是一个机器位数的字节数.比如32位机器就是4字节;2.如果把Shape换成基本数据类型,问题1的答案是什么? 
       一样的.
      

  18.   

    问题一:  要想理解new的使用,必须先得理解栈和堆的区别:
      1>栈: 它里面存放基本数据类型和引用,它由编译器自动申请和释放
         ********栈中的空间有限
      例: int a =10;//变量a存放在栈中
      2>堆: 堆中的空间需要程序员自己申请和释放(JAVA中你不需要关心释放) 注意:想在堆中申请必须new   
         ********堆中的空间是无限
      例:new Shape[9];// 9个Shape 对象就分别存放在堆中
       但是:Shape[] s =new Shape[9];// s 是存放在栈中的,因为它是引用型的
    问题二:
       基本数据类型不能new
      

  19.   

    new就是创建一个对象啊
    不会使用new 基本数据类型,但可以new基本类型的数组对象