기본적으로 java.lang.Object가 최상위 객체로, 개발자가 Object를 상속 받아서 정의 할 수 있습니다.
Type
설명
배열(ArrayType)
• 기본형으로도만들수있고참조형으로만들수있음
EnumType
byte
• 열거형,
• String클래스와마찬가지로불변의객체,
• 상수의집합을 만들거나특정 객체의상태를 모아서열거형을만듦
ClassType
StringClass
• 참조형에속하지만기본적인사용은기본형처럼사용
• 불변하는immutable객체
• String클래스에는 값을변경해주는메소드들이존재하지만해당메소드를통해데이터
를바꾼다 해도새로운 String클래스 객체를만들어내는 것
• String객체간의비교는 .equals() 메소드를사용
WrapperClass
• 기본형에null을넣고싶다면래퍼 클래스WrapperClass를활용 기본형대응래퍼 클래스
byte -> Byte, short->Short, int ->Integer, long-> Long float->Float, double->Double char->Char boolean-> Boolean
1. 배열
동일한 자료형을 그룹(묶음)으로 저장하는 것으로 생성 시점에 크기를 지정해야 하며 크기가 지정 되면 변경 될 수 없습니다. 배열도 Stack에 저장 되므로 초기화 후 사용 해야 합니다. ( 배열 객체를 생성 해야 한다는 의미 입니다. ) 1. 배열 선언 : 자료형[] 변수명; 2. 배열 객체 생성 : 배열 참조 변수은 Stack에 저장 되고 실제 데이터는 Heap에 저장 됩니다.
3. 다양한 배열 선업 방법
// 선언과 동시에 객체 생성int[] arrayNum = newint[10];
int arrayNum[] = newint[10];
// 선언과 객체 생성 분리int[] arrayNum;
arrayNum = newint[10]
int arrayNum[];
arrayNum = newint[10'
4. 배열에 값 대입 - 배열의 요소는 0부터 시작 하므로 값을 넣을 때는 0부터 넣어야 합니다. 배열의 크기는 0을 포함한 크기로 int[3]은 "배열의 크기는 3, 즉 3개의 값이 저장" 됩니다.
5. 배열 객체 생성시 강제 초기화 배열은 선언 후 객체 생성을 하지 않고 사용 하면 오류가 발생 하므로 반드시 객체를 생성 해야 합니다. 배열 객체를 생성 할 떄 요소에 값을 설정 하지 않으며 강체 초기화가 발생 합니다.
- 초기화 하지 않으면 오류 발생
int num ;
int[] arrayNum ;
// Variable 'num' might not have been initialized
System.out.println("기본 자료형 : " + num);
// Variable 'arrayNum' might not have been initialized
System.out.println("참조 저료형 배열 : " + arrayNum);
// 아래와 같이 초기화 하여야 오류가 발생 하지 않습니다.int num = 0;
int[] arrayNum = null;
System.out.println("기본 자료형 : " + num); // 0
System.out.println("참조 저료형 배열 : " + arrayNum); // null
- 배열 객체 생성만 하고 사용 하는 경우 선언한 타입에 따라서 값이 설정 되므로 오류가 발생 하지 않습니다. 이것을 강제 초기화라 합니다.
public class ArrayInit {
public static void main(String[] args) {
boolean[] isArray = new boolean[2];
int[] numArray = new int[2];
double[] doubleArray = new double[2];
System.out.println("boolean[] : "
+ Arrays.toString(isArray)); // [false, false]
System.out.println("int[] : "
+ Arrays.toString(numArray)); // [0, 0]
System.out.println("double[] : "
+ Arrays.toString(doubleArray)); // [0.0, 0.0]
}
}
6. 배열 복사는 참조 주소를 공유 합니다.
- numA는 stack에 10을 저장 하고 numB는 numA에서 값을 할당 받아서 가지고 있어서 numB를 20으로 저장 하면 각각 다른 값을 가지는 있습니다. 즉 기본 자료형은 복사를 하면 값이 복사 됩니다. - numArrayA를 정수형 배열과 선언 하고 초기화 한 후 numArrayA를 numArrayB에 저장 하는 stack에 있는 numArrayA가 가지고 있는 값 실제 데이터이 주소를 numArrayB에 저장 하게 됩니다. 그 후 numArrayB의 요소를 변경 하면 numArrayA이 실제 주소의 값이 변경이 되는 것 입니다.
7. 배열 값 읽어오는 방법 - 요소 하나 씩 읽어 오기 : [ 요소번호 ] - 배열에 있는 모든 요소를 읽어 오기 : Arrays.toString(배열참조변수) - 반복문을 이용 해서 읽어 오기 : for ( ; ; ), for ( : )
public class ArrayRead {
public static void main(String[] args) {
int[] numArray = new int[] {10,20,30};
// 요소 하나씩 읽어 오기
// 배열에 있는 2번 째 요소를 읽어 온다.
int num = numArray[2];
System.out.println("num : " + num);
// 베열에 있는 모든 요소를 String 로 변환 한다.
String numStr = Arrays.toString(numArray);
System.out.println("num : " + numStr);
// 배열의 요소를 하나씩 읽어 오기
// 배열의 길이-1 까지 반복문을 사용
int numArrayLength = numArray.length;
for ( int i = 0; i < numArrayLength; i++) {
System.out.println(String.format("배열 %d 번째 값 %s", i, numArray[i]));
}
// for-each 문을 이용 해서 읽어 오기
for(int value: numArray) {
System.out.println(String.format("배열 값 %s", value));
}
}
}
* for 문을 이용 해서 순환 하면서 읽어 오는 경우 전통적인 방식은 for ( ; ; )문 보다는 foreach 형태의 for( : )을 사용 하는 것을 권장 한다, foreach 형태를 요소의 타입으로 직접 접근 해서 사용 하므로 모든 참조 자료형에 사용 하는 경우 형 변환을 하지 않아도 되는 장점과 for ( ; ; ) 사용시 for 문의 지역 변수를 수정 해서 발생 할 수 있는 오류를 줄일 수 있다. * for (int i = 0; i < 10; i++) { .. } 에서 지역 변수 i의 값을 인위적으로 변경 하면 예상 하는 데이터가 나오지 않을 수 있다.