1

我对 Java 很陌生,刚刚开始研究简单的示例程序。

如何在 B 类的构造函数中创建 A 类的实例。例如,我想在 B 类的构造函数中创建一个 A 类对象数组。伪代码看起来像

class B {

public static A myarray;
B (int number){
  myarray = new A [number];
}

编辑:

public class TestClassA {

    public static int []  ArrayA = new int [6];
    TestClassA () {
        for (int i=0; i < 6; i++){
            ArrayA[i]=i;
            System.out.print("TestClassA ");
        }
    }
}

public class TestClassB {

    public TestClassA [] A;
    TestClassB (int num) {
        A = new TestClassA[num];
    }
}

public class Exec {

    public static void main (String[] args) {

        TestClassB B;
        B = new TestClassB(2);

    }
}

当我执行此操作时,我没有看到任何消息为“TestClassA”。我希望它创建 2 个 TestClassA array 实例,因此我应该看到 TestClassA 12 次。不知道我在哪里做错了。

4

5 回答 5

4

几个指针

  • 不要使用static,除非您想A与 class 的每个实例共享对象数组B
  • 但是,您确实需要[]在声明引用时使用以表明它是一个Array.
  • 也制作您的成员字段private。然后通过getter/setter 方法public控制对它们的访问。protected

您的代码应如下所示

public class B {

    private A[] arrayOfAobjects;

    B (int number) {
         arrayOfAobjects = new A[number];
    }

    public A[] getArrayOfAobjects() {
        return arrayOfAobjects;
    }
}

编辑:(在下面详细说明@MikeStrobel 的评论)
当您创建一个数组时,它会根据Array. 例如,对于所有类型的对象数组0for anint []0.0for adouble []nullObject []

new int[100]; // creates an Array with 100 zeroes
new A[number]; // creates an Array of size "number"
               // but filled with nulls (instead of A objects)

因此,您需要自己用正确的值填充数组。在你的情况下,像

B (int number) {
     arrayOfAobjects = new A[number];
     for (int i=0; i < number; i++) {
         arrayOfAobjects[i] = new A(); // initialize the A[] array
     }
}

编辑 2

public class TestClassB {

    public TestClassA [] A;

    TestClassB (int num) {
        A = new TestClassA[num];
        for (int i=0; i < num; i++) {
            A[i] = new TestClassA(); // You need to INITIALIZE your Array
        }
    }
}
于 2013-06-18T16:25:39.970 回答
1

如果你想在 B 类的构造函数中创建 A 类的对象,你可以简单地这样做:

class B { 
    public A object;
    B (int number){
      object= new A();
    }

class A{

    }

如果要创建 A 类的数组,则不要将变量设为静态。

class B { 
        public A[] myarray;
        int number = 5;
        B (int number){
          myArray = new A[number];
        }

class A{

        }

编辑:对象数组的语法(您需要 4 个对象的数组)。

 A[] a = new A[4]; // Create the array of size 4.
 A a1 = new A(); //Create an object
 ............    //Similarly create other three objects
 a[0] = a1; //Add the object to the array
 ............   //Similarly add other three objects
于 2013-06-18T16:24:05.917 回答
0
class B {

public A[] myarray;
B (int number){
  myarray = new A [number];
}

最好练习在私有或受保护模式下使用实例变量,并使用 getter 和 setter 方法来访问它。此代码只会创建一个未初始化的A对象数组。如果你想使用它们,你需要像任何数字一样单独myarra[i]=new A();初始化i它们0<=i<number

于 2013-06-18T16:24:55.380 回答
0

这是你应该写的。

class B{
public A[] myArray;

B(int number){
  myArray = new A[number];
   }
  }
于 2013-06-18T16:25:51.980 回答
0
public class B {

  private A[] arrayOfAs;

  public B (int number) {
     this.arrayOfAs = new A[number];
  }

  public getAs() {
     return this.arrayOfAs;
  }
}

高于这arrayofAs不是静态的,因为您不想在所有. 我也将其设为私有,因为这被认为是实例变量的良好做法。B

getAs()您可以使用上面的访问器方法将此数组返回给不同的类。

于 2013-06-18T16:28:25.897 回答