Order order = new Order();
//객체 참조 변수 선언과 객체 생성
참조(Reference) 변수는 stack 영역에 참조할 수 있는 값(주소)만을 저장하며, 실제 할당된 데이터들은 Heap 영역 객체내의 멤버 변수들에 저장된다.
객체는 아래와 같은 순서로 초기화되고 메모리에 할당된다.
1. 선언된 상태에서는 메모리의 reference를 위한 공간만을 할당함
2. new 연산자를 사용해야만 MyDate를 위한 공간이 할당됨
3. 멤버들의 명시적인 초기화
4. 생성자를 실행
5. 변수에 Reference값 할당
public class MyDate{
private int day = 1;
private int month = 10;
private int year = 2000;
public MyDate(int day, int month, int year){
this.day = day;
this.month = month;
this.year = year;
}
}
기존에 생성된 Reference 변수에 다른 Reference 변수를 할당하면 기존의 Reference를 끊고 새로운 인스턴스를 Reference한다.
int counter = 10;
Student std = new Student();
Student otherStd = new Student();
std = otherStd; //otherStd의 동일한 인스턴스를 Reference 한다.
문자열을 저장하는 Reference type의 class로 Java API(java.lang.*)내에 포함되어 있다.
String class는 new 키워드를 사용하는 방법과 new 키워드 없이 생성하는 두 가지 방법을 제공한다.
String 문자열은 객체는 Heap Memory내에서도 문자열 리터럴 값을 String Pool에 저장해놓고 동일한 문자열을 생성하면 동일한 리터럴 값의 주소를 할당해준다.
new로 생성한 경우엔 일반 객체처럼 Heap 영역에 값으로 생성된다.
ClassName identifier;
String myName;
identifier = new ClassName("문자열");
myName = new String("홍길동");
String myName = new String("홍길동");
String myName = "홍길동"; //new 키워드 없이 생성
배열은 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것으로 reference type 변수를 지원한다.
public class MyDate{
int ageOne = 27;
int ageTwo = 12;
int ageThree = 82;
...
}
선언: 데이터타입[] 배열변수명; or 데이터타입 배열변수명[];
int[] ages;
String names[];
할당: 배열변수명 = new 데이터타입[length];
ages = new int[3];
선언과 할당 Case 1:
데이터타입[] 배열변수명 = new 데이터타입[length];
int[] ages = new int[3];
선언과 할당 Case 2:
데이터타입[] 배열변수명 = { 콤마(,) 구분자의 배열 개수만큼 값 할당 };
int[] ages = {20, 15, 33, 42, 19};
Order[] orders = {new Order(), new Order(100, "주문서")};
int[] ages = new int[5];
ages[0] = 20;
ages[1] = 15;
ages[2] = 33;
ages[3] = 42;
ages[4] = 19;int[] widths; //선언
widths = new int[3]; //배열 생성
//선언과 생성
int[] ages = new int[5];
//int[] ages = {20, 15, 33, 42, 19};
//배열에 값 할당
ages[0] = 20;
ages[1] = 15;
ages[2] = 33;
ages[3] = 42;
ages[4] = 19;
//선언, 생성, 값 할당을 동시에 할 수 있다.
Order orders[] = {
new Order(1, "라면"),
new Order(2, "세제"),
new Order(3, "과자")
};
//특정 배열 index(위치)의 값 출력
System.out.println(ages[0]);
int[] ages = {20, 100, 72, 32, 50};
for(int i=0; i<ages.length; i++){
System.out.println(ages[i]);
}long longLength = 10L;
long longTypeArray = new long[longLength] //compile error

Order order = new Order();
Order[] orders = {
new Order(1, "라면"),
new Order(2, "세제"),
new Order(3, "과자")
}
선언: 데이터타입[][] 배열변수면; or 데이터타입 배열변수명[][];
int[][] ages;
String names[][];
할당: 배열변수명 = new 데이터타입[1차원 length][2차원 length];
ages = new int[3][2];
선언과 할당 Case 1:
데이터타입[][] 배열변수명 = new 데이터타입[1차원 length][2차원 length];
int[] ages = new int[3][2]; //3행 2열의 2차원 배열을 생성
선언과 할당 Case 2:
데이터타입[] 배열변수명 = { 콤마(,) 구분자의 배열 개수만큼 값 할당 };
int[][] ages = {{10,20},{30,40},{50,60}};
int[][] ages = new int[5][];
ages[0] = new int[4];
ages[1] = new int[2];
ages[2] = new int[2];
ages[3] = new int[3];
ages[4] = new int[2];
//값 할당
ages[0][1] = 20;
...
ages[4][1] = 17;
int[][] ages =
{
{20,15,33,72},
{12,50},
{57,20},
{27,32,89},
{73,17}
}