2014-10-17 3 views
1

Я совершенно новый для Java и имел небольшую проблему с массивами. В упражнении нужно было создать класс под названием «Экзамен» с помощью метода «addExam». Теперь я попытался решить проблему, но только добрался до определения cass, переменных экземпляра и заголовка метода. Остальное я посмотрел в растворе, и это выглядело так:Создание объектов массива в Java?

public class Exam{ 
private int numberOfExams=15; 
private Exam[]exams = new Exam[numberOfExams]; 

public void addExam(Exam exam){ 
exams[numberOfExams] = exam; 
numberOfExams++; 

Так теперь мой вопрос: Когда я назначить «экзамен» на экзамены массива в методе addExam, это новый объект, созданный здесь? И когда да, почему не используются брекеты и «новый оператор»? Этот вопрос приводит к более общей: я знаю, что массивы имеют тип класса, теперь они создают объекты массива или переменные этого типа массива?

Мне очень нужна помощь!

+3

Это выглядит как 'ArrayIndexOutOfBoundsException' ... Я имею в виду создание массива размера ** 15 **, затем индексацию на' [15] 'и увеличение ? Это должно потерпеть крах при первом вызове. Массив размера '15' имеет индексы от' 0 ... 14'. – EpicPandaForce

+0

Также рассмотрите возможность использования [List] (http://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html) экземпляра массива. Они предлагают гораздо большую гибкость. – dusky

+0

Действительно, 'Список list = new ArrayList (); list.add (новый экзамен()); ... ' – EpicPandaForce

ответ

3
public void addExam(Exam exam){ 
exams[numberOfExams] = exam; 

Нет Нет нового объекта, который когда-либо передавал объект, присвоенный 0-му элементу вашего массива.

Фактическое место создания нового объекта - это то место, где вызывается метод addExam. Что-то вроде

Exam exam = new Exam(); 
// do something 
addExam(exam); 
0

Когда вы назначаете «экзамен» для массива, он не создает новый объект. Он просто хранит ссылку на существующий объект в массиве.

Если я понимаю ваш второй вопрос, когда вы создаете массив с вызовом, например Exam[] exams = new Exam[numberOfExams];, вы создаете объект, который содержит достаточно места для numberOfExams ссылок на Exam объектов.

КСТАТИ exams[numberOfExams] = exam; даст вам ArrayIndexOutOfBoundsException, так как ваш массив имеет numberOfExams элементы, поэтому действительные индексы от 0 до numberOfExams-1.

+0

Спасибо, это было действительно полезно! – Lilly

1

Когда я назначаю «экзамен» экзаменам массива в методе addExam, это новый объект, созданный здесь?

No. Ссылка на существующий экземпляр Exam будет добавлена ​​в массив. Итак, у вас будет 2 ссылки на один и тот же экземпляр для Exam

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