自己好好想想基本概念吧
class Student
  {
        String name;
        Student(){}
        Student(String name)
        {
            this.name = name;
        }
  }  class Class
  {
        int NumOfStu;
        Class(){}
        Class(int NumOfStu,Student [] students)
        {
             this.NumOfStu=NumOfStu;
             students = new Student[NumOfStu];
             for(int i = 0; i < NumOfStu; i++)
             {
                 students[i] = new Student("name");
             }
        }  }   public class text1
   {
         public static void main(String args[])
         {
            int number=10;
             Student [] students=new Student[number];
            for(int i=0;i<number;i++){
              students[i]=new Student("dddddd");
            }
            //    Student [] students;//错了,应该要用new,但是还是错了。具体如何呢?
                Class aa = new Class(10,students);//错了: 但是如何传递呢?
                for(int i=0; i<aa.NumOfStu; i++)
                {
                     System.out.println(students[i].name);                }
          }
  }

解决方案 »

  1.   

    我的思路? 很乱吗?还是真的很弱? 我才刚学java -_-~.
     不过我的问题目的并不是构造一个有用的类。 只是想清楚引用在函数的传递方法。
     感觉与c/c++ 有很大不同。
      

  2.   

    to q_h_q(西门扫雪). 这样的解决方法:我在2: 最后已经有说了:
    ======》
    尽管上面2:中有一种替代方法:
    那就是把class构造函数中的 students = new Student[NumOfStu];注释掉:
    然后在main()中改用 student [] students = new student[10];
                         Class aa = new Class(10,students);
    但是这已经失去灵活性了:看来。在java中不能象c/c++ 那样传入一个2级指针(或者指针的引用),然后开辟一个2维数组。
    或者传入一级指针开辟一维数组。
    在java中如果要已引用为参数(数组参数),必然要先为该引用开辟空间。也就是要new,如果是数组的话,要先预定数组长度。 这也就是我上面所觉得不灵活的地方?java才学: 所以不怎么清楚,不知道我讲的对不????? 第一问题:哈哈 不过看你的代码: 我又发现了一个问题:? 回答这两个问题的一个50分。
    在你的代码中没注释掉,students = new Student[NumOfStu];
    打印的是 dddddd
            ........
    如果注释掉,打印的是 name。WHY? 或许我的想法比较模糊。反正又跟传址,传值有关系。
    恩。 欢迎大家发言,可以讲清楚一点。
      

  3.   

    在 Java 中你最好不要考虑把一个东西传进函数赋值,这样你得不到结果,Java 里没有指针,只有引用。请把 C/C++ 中的指针的一些思想放弃。如果你实在需要这样做,你可以定义一个非构造方法,然后通过返回值的办法把值传出来。如果你还是想用你所期望的那种方法,有一个变通的方法:class Data {
        pubilc Student[] students;
    }class Class {
        public Class(Data data) {
            data.students = new Student[3];
        }
    }然后在外面取 Data 对象的 students 属性来用,如
    Data d = new Data();
    Class c = new Class(d)
    Student[] s = d.students;
    不过这样做已经没有什么意义了。
      

  4.   

    再次 感谢jamesfancy()边城狂人(James Fancy). 还有一个问题;
    在 q_h_q(西门扫雪)代码中:在Class类中没注释掉,students = new Student[NumOfStu];
    打印的是 dddddd
            ........
    如果注释掉,打印的是 name。WHY?
      

  5.   

    class Student {
        String name;    Student() {
        }    Student(String name) {
            this.name = name;
        }
    }class Class {
        int NumOfStu;    Class() {
        }    Class(int NumOfStu, Student[] students) {       // [2]
            this.NumOfStu = NumOfStu;
            //students = new Student[NumOfStu];         // 重新创建 students 数组 [3]
            for (int i = 0; i < NumOfStu; i++) {
                // 如果上面的 new 那句注释掉了,则是为传进来找 Student[] 对象重新赋值
                // 没注释掉,则是为新生成的 Student[] 对象赋值
                students[i] = new Student("name");
            }
        }}public class Test {
        public static void main(String args[]) {
            int number = 10;        Student[] students = new Student[number];   // 创建 students 数组 [1]
            for (int i = 0; i < number; i++) {
                students[i] = new Student("dddddd");    // 赋所有初值为 "ddddddd" 
            }        Class aa = new Class(10, students);
            for (int i = 0; i < aa.NumOfStu; i++) {
                System.out.println(students[i].name);        }
        }
    }/*
    在 [1] 处,JVM 产生一个 Student[] 对象,并将其引用赋值给 students
    在 [2] 处,students 作为参数传进,传进去的是 students 这个引用的副本,并将其赋值
        给参数变量 students,这是一个局部变量,不同于原来 main 函数中申明的那一个,
        虽然它们名称相同,但是不同的变量,作用范围也不同。
        注意:是引用的副本,不是对象的副本。这个引用的副本和原来那个引用同引用的
              同一个对象
    在 [3] 处,产生一个新的 Student[] 对象,将其引用赋值给局部变量 students所以,如果不注释掉那句 new 语句,在 Class 的构造函数里会产生一个新的 Student[]
    对象并对其赋值为 "name"。而 main 里的 Students[] 对象并没有改变,所以打印的是原
    来的值,即 "ddddddd"如果注释掉那名,在 Class 的构造里就不会产生新的 Student[] 对象,局部变量 students
    作为原来那个 Students[] 对象引用的副本,还是引用的原来那个 Student[] 对象,对其
    元素的改变就直接影响到原来那个 Student[] 对象,所以打印出来都是 "name"
    */