2013-06-18 46 views
1

我刚刚开始致力于简单示例程序,对Java很新颖。在Java中的构造函数中实例化不同的类

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

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”。我期望它创建TestClassA数组的2个实例,因此我应该看到TestClassA 12次。不知道我在哪里做错了。

+3

'myarray'不应该是静态的,但它应该是一个数组。除此之外,你的代码很好。 –

+0

myarray应该声明为一个数组:) – Kris

+0

你可以粘贴相同的代码... – chandank

回答

3

夫妇指针

  • 不要使用static,除非你想分享A对象的数组与类B的每个实例。
  • 但是,您确实需要使用[],同时声明引用以指示它是Array
  • 使您的成员字段private以及。然后通过publicprotected getter/setter方法控制对它们的访问。

你的代码看起来应该像

public class B { 

    private A[] arrayOfAobjects; 

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

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

编辑:(细说@下面MikeStrobel的评论)
当您创建一个数组时,它会使用默认值按初始化Array的类型。例如,对于int [],0.0,对于所有类型的Object []对象阵列,每个阵列元素被设置为0,double [],null

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 
     } 
    } 
} 
+0

值得注意的是,由于OP是Java新手,所分配的数组将被填充'null'指针。也许添加一个初始化循环到你的例子? –

1

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

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

class 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 
+0

什么是获得类数组的systax。对于转储问题抱歉 – chandank

+0

请检查编辑部分。 –

+0

我能够获得数组,但是,当我将其实例化为数组时,它不会触及A类的构造函数。我在简单实例化中工作正常。 – chandank

0
class B { 

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

这将是很好的做法在私人或受保护模式中使用实例变量,并使用getter和setter方法来访问它。此代码只会创建一个未初始化的A对象数组。如果你想利用这些,你需要seperately初始化他们像myarra[i]=new A();其中i为任意数量的0<=i<number

0

这是你应该写什么。

class B{ 
public A[] myArray; 

B(int number){ 
    myArray = new A[number]; 
    } 
    } 
+1

'class'应该是小写。 –

0
public class B { 

    private A[] arrayOfAs; 

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

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

arrayofAs上面是不是不静态,因为你不希望共享的B所有实例中的阵列。我也做了私人因为这被认为是实例变量的良好做法。

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

相关问题