[TIL] 생성자 , 초기화
생성자란 Constructor ?
- 생성자는 new 연산자와 같이 사용되며 객체를 생성할 때 호출되고 객체 생성후 생성자 몸체를 실행하여 초기화를 담당한다.
- 생성자는 인스턴스 변수의 초기화 및 객체가 생성될 때 실행해야 할 작업을 위해 사용된다.
- 자바의 모든 클래스는 생성자가 반드시 존재하며 하나이상 가질 수 있다.
- 클래스와 동일한 이름을 갖는다.
- 하나의 클래스에는 하나이상의 생성자를 갖는다.
- 생성자는 리턴 타입이 존재하지 않는다.
- 생성자는 일반 메소드처럼 호출할 수 없으며 객체를 생성할때 new 다음에 기술한다.
- 생성자는 중복 정의가 가능하다.
- 생성자를 만들지 않으면 컴파일러는 아무런 코드도 없는 디폴드 생성자를 만든다.
public 클래스명(){}
클래스 초기화
JVM머신에 의해 해당 클래스가 메모리에 적재 될때 다음과 같이 클래스 초기화를 무엇보다도 먼저 수행한다.
1. 모든 클래스 변수(static)는 자바 메모리 영역 중 메소드 영역에 위치한다.
2. 각 클래스 변수는 0,false,null같은 디폴트 초기 값으로 초기화 한다.
3. 클래스 변수 초기화 수식과 클래스 초기화 블록을 정의된 순서대로 실행하게 된다.
new 연산자에 의한 객체 생성
new 클래스명(인수)에 의해 객체가 생성될 때마다 수행되는 작업
1. new연산자는 객체를 위한 메모리 공간을 할당한다. (heap 메모리 : 인스턴스 변수에 대한 메모리 공간)
2. 객체의 모든 인스턴스 변수들을 디폴트 초기값 초기화
3. 객체가 갖고 있는 인스턴스 변수의 초기화 수식 / 초기화 블록 실행
4. 생성자 첫 문장 this나 super에 의해 호출되는 생성자 몸체 먼저 실행
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
package ex0804;
public class Constructor_Ex4 {
public static void main(String[] args) {
Demo9 ob; // 참조변수 선언만 한 상태 : 클래스가 메모리에 로딩이 아직 안된 상태
// 클래스 변수를 사용하므로 클래스가 로딩됨
// 1)~4)까지는 단 한번만 실행
// 1) static 변수가 메모리할당을 함
// 2) static 변수의 초기화 작업 실행
// c <- 0 , d <- 20
// 3) static 초기화 블럭이 실행
// c <- 5
System.out.println(Demo9.c); // static초기화 블럭 5
ob= new Demo9();
// 1) 클래스가 로딩이 일어나므로 먼저 아래 작업을 한번만 실행
// static 변수 메모리 할당, 초기화, static 블록 실행
// 2) 객체가 생성될때 마다
// 인스턴스변수 메모리 할당
// 인스턴스 초기화 작업
// 초기화 블럭 실행
// 생성자 몸체 실행
}
}
class Demo9{
int a;
int b=10;
static int c;
static int d=20;
{
System.out.println("초기화 블럭...");
}
static{
//static 초기화 블럭
System.out.println("static 초기화 블럭...");
c=5;
}
public Demo9() {
System.out.println("생성자...");
}
public void write() {
System.out.println(a+":"+b+":"+c+":"+d);
}
}
|
cs |
'Language > JAVA' 카테고리의 다른 글
[TIL] 자바의 기본 API - Object /String / StringBuffer 클래스 (0) | 2020.08.05 |
---|---|
[TIL] JVM :Java Virtual Machine (0) | 2020.08.04 |
[TIL] this , this() (0) | 2020.08.04 |
[TIL] 비정형 인자 (가변 인수) (0) | 2020.08.04 |
[TIL] 재귀 호출 (0) | 2020.08.04 |
댓글