2013-06-18 4 views
1

Я очень новичок в Java, только что начал работать над простыми примерами программ.Создание другого класса в конструкторе в Java

Как создать экземпляр класса А внутри конструктора класса B. Например, я хочу создать массив объектов класса A в constuctor класса B. Код 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". Я ожидаю, что он создаст 2 экземпляра массива TestClassA, поэтому я должен увидеть TestClassA 12 раз. Не знаю, где я делаю неправильно.

+3

'myarray' не должен быть статическим, но он должен быть массивом. Кроме этого, ваш код в порядке. –

+0

myarray должен быть объявлен как массив :) – Kris

+0

вы можете вставить код для того же ... – chandank

ответ

3

Пара указателей

  • Не используйте static, если вы не хотите, чтобы разделить массив A объектов с каждым экземпляром класса B.
  • Однако вам необходимо использовать [], объявив ссылку, чтобы указать, что это Array.
  • Сделайте свои поля поля private. Затем контролируйте доступ к ним через public или protected методы получения/сеттера.

Ваш код должен выглядеть

public class B { 

    private A[] arrayOfAobjects; 

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

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

EDIT: (подробно остановиться на @ комментарии MikeStrobel по ниже)
При создании массива, он инициализируется со значениями по умолчанию в соответствии с тип Array. Например, для каждого элемента массива установлено значение 0 для int [], 0.0 для double [], null для всех типов массивов объектов Object [].

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

EDIT 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 вы просто можете сделать это следующим образом:

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{ 

     } 

EDIT: Синтаксис массива объектов (Вы должны массив из 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

Я могу получить массив, но некоторые из них не попадают в конструктор класса А, когда я создаю его как массив. Я отлично работаю в простой инстанцировании. – chandank

0
class B { 

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

было бы хорошо на практике использовать переменные экземпляра в частном или защищенном режиме, и с помощью методов получения и установки для доступа к нему. Этот код просто создаст не инициализированный массив из A объектов. Если вы хотите использовать те, что вам нужно инициализировать их отдельно, как 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().

Смежные вопросы