Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- StringBuffer
- 백준
- 미국주식
- mco
- S&P500
- 제태크
- 인플레이션
- 주린이
- 접근제어자
- object
- 그리디 알고리즘
- Java
- 프로그래머스
- FCF
- javascript
- 현금흐름표
- 잉여현금흐름
- XLF
- 배당성장
- 금리인상
- 알고리즘
- 자바
- etf
- 주식
- 기업분석
- 오버라이딩
- 금리인하
- 객체지향
- 무디스
- 다형성
Archives
- Today
- Total
오늘의하루
[JAVA 공부 5일차] 객체지향 Part 3 본문
1. 변수의 초기화
- 지역 변수는 꼭 사용 전에 수동 초기화해주어야 한다.
- 인스턴스 변수, 클래스 변수(static 변수)의 경우 자동 초기화가 된다.
- int, long, short, byte, float, double 타입의 경우 타입에 맞게 0으로 초기화된다.
- boolean 타입의 경우 false로 초기화된다.
- char 타입의 경우 '\u0000' (공백 1칸)으로 초기화된다.
- 참조형 변수는 null로 초기화된다.
1. 명식적 초기화 ( = )
간단한 초기화할 때 많이 사용된다.
class Car{
int door = 4; // 기본형 변수의 초기화
Engine e = new Engine(); // 참조형 변수의 초기화
}
2. 초기화 블록
복잡한 초기화를 할 때 많이 사용된다.
인스턴스 초기화 블록 : { }는 잘 사용되지 않는다. 인스턴스의 복잡한 초기화의 경우 생성자를 사용한다.
클래스 초기화 블록 : static { }
class StaticBlockTest{
static int[] arr = new int[10]; // 명시적 초기화
static{ // 클리스 초기화 블록
for (int i = 0; i < arr.length; i++){
arr[i] = (int)(Math.random()*10)+1;
}
}
}
3. 생성자
인스턴스 변수를 초기화할 때 사용되며 복잡한 초기화에도 사용된다.
Car(String color, String gearType, int door){
this.color = color;
this.gearType = gearType;
this.door = door;
}
2. 최종 정리
클래스 변수 초기화 시점은 클래스가 처음 로딩될 때 단 한 번이다.
- 로딩이란 class파일을 RAM에 올리는 과정을 의미한다.
인스턴스 변수 초기화 시점은 인스턴스가 생성될 때마다 초기화된다.
초기화 순서는 클래스 변수가 먼저 초기화되고 그 이후 인스턴스 변수가 초기화된다.
여러 개의 인스턴스를 만들어도 클래스 변수는 최초 로딩 시에 단 한번 초기화되고 그 이후로는 초기화되지 않는다.
class initTest{
static int cv = 1; // 1 명시적 초기화 (간단)
int iv = 1; // 2 명시적 초기화 (간단)
static { // 3 클래스 초기화 블록 ( 클래스 초기화 복잡 )
cv = 2;
}
initTest(){ // 4 생성자( 인스턴스 초기화 복잡 )
iv = 3;
}
}
실행 순서
- static 변수 cv 0으로 자동 초기화
- static 변수 cv에 1로 명식적 초기화(간단)
- static 변수 cv에 2로 클래스 초기화 블록 사용 (복잡)
- 인스턴스 변수 iv 0으로 자동 초기화
- 인스턴스 변수 iv에 1로 명시적 초기화(간단)
- 인스턴스 변수 iv에 3으로 생성자 사용(복잡)
- 초기화 끝
'JAVA' 카테고리의 다른 글
[JAVA 공부 6일차] static, final, abstract, 접근 제어자 알아보기 (0) | 2022.07.27 |
---|---|
[JAVA 공부 6일차] 객체지향 Part 4 (0) | 2022.07.27 |
[JAVA 복습] 객체지향, 배열, 연산 (0) | 2022.07.26 |
[JAVA 공부 4일차] 객체지향 Part 2 (0) | 2022.07.26 |
[JAVA 공부 3일차] 객체지향 Part 1 (0) | 2022.07.25 |
Comments