2014-10-17 4 views
1

저는 Java에 상당히 익숙하며 배열과 관련하여 약간의 문제가있었습니다. 주어진 연습 문제에서 "addExam"메서드를 사용하여 "Exam"이라는 클래스를 만들어야했습니다. 이제는 문제를 풀려고했지만 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) instend 사용을 고려해보십시오. 그들은 훨씬 더 많은 유연성을 제공합니다. – dusky

+0

참으로'List 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];과 같은 호출을 사용하여 배열을 만들 때 Exam 개체에 대한 충분한 공간이 포함 된 개체를 만듭니다. 배열이 numberOfExams 요소를 가지고 있기 때문에 유효한 인덱스는 0에서 numberOfExams-1에 그래서

BTW, exams[numberOfExams] = exam;는 당신에게 ArrayIndexOutOfBoundsException을 줄 것입니다.

+0

고마워, 정말 도움이 됐어! – Lilly

1

addExam 메서드에서 배열 검사에 "exam"을 할당하면 여기에 새 개체가 생성됩니까?

아니오. 기존 Exam 인스턴스에 대한 참조가 배열에 추가됩니다. 따라서 같은 인스턴스에 대한 참조가 두 개 있습니다. Exam