Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Spring Framework
- reactive
- spring reactive
- ipTIME
- 공유기 서버
- reactor
- reactor core
- 웹 커리큘럼
- 웹 스터디
- Spring Batch
- 서버운영
- 웹앱
Archives
- Today
- Total
Hello World
Java에서 객체의 초기화 순서 본문
반응형
자바는 Static block -> Instance block -> 생성자 순으로 초기화가 된다.
먼저 아래와 같은 코드를 실행해 보자.
먼저 아래와 같은 코드를 실행해 보자.
public class TestClass {
public static void main (String[] args) {
System.out.println("---------------------------");
Parent father = new Parent("father");
System.out.println("---------------------------");
}
}
class Parent {
public String myName = "Parent";
static {
System.out.println ("This is first message of Parent class!");
}
public Parent() {
System.out.println (myName + ": This is third message! I'm a default constructor of Parent class!");
}
public Parent(String name) {
myName = name;
System.out.println (myName + ": This is third message! I'm a constructor of Parent class!");
}
{
System.out.println (myName + ": This is second message!");
}
}
그럼 하기와 같은 결과를 얻을 수 있다.
---------------------------
This is first message of Parent class!
Parent: This is second message!
father: This is third message! I'm a constructor of Parent class!
---------------------------
public class TestClass {
public static void main (String[] args) {
System.out.println("---------------------------");
Parent father = new Parent("father");
Parent mother = new Parent("mother");
System.out.println("---------------------------");
}
}
class Parent {
public String myName = "Parent";
static {
System.out.println ("This is first message of Parent class!");
}
public Parent() {
System.out.println (myName + ": This is third message! I'm a default constructor of Parent class!");
}
public Parent(String name) {
myName = name;
System.out.println (myName + ": This is third message! I'm a constructor of Parent class!");
}
{
System.out.println (myName + ": This is second message!");
}
}
---------------------------
This is first message of Parent class!
Parent: This is second message!
father: This is third message! I'm a constructor of Parent class!
Parent: This is second message!
mother: This is third message! I'm a constructor of Parent class!
---------------------------
여기서 보면 static { } 으로 둘러 싸인 구문은 객체 생성시 최초 1회만 수행이 되고, 그 뒤에는 수행이 되지 않는 걸 알 수 있다. 그러나 { } 로 둘러싸인 instance block은 객체가 생성 될 때마다 실행 되며 생성자 보다 먼저 생성되는 걸 알 수 있다.
class Child extends Parent {
public String myName = "Child";
static {
System.out.println ("This is first message of Child class!");
}
public Child(String name) {
myName = name;
System.out.println (myName + ": This is third message! I'm a constructor of Child class!");
}
{
System.out.println (this.myName + ": This is second message of Child class!");
}
}
위 와 같이 Parent class를 상속받는 Child 클래스를 만들고, 아래와 같이 객체를 생성해 보자
public class TestClass {
public static void main (String[] args) {
System.out.println("---------------------------");
Child son = new Child("son");
System.out.println("---------------------------");
}
}
그럼 하기와 같은 결과가 나온다.
---------------------------
This is first message of Parent class!
This is first message of Child class!
Parent: This is second message!
Parent: This is third message! I'm a default constructor of Parent class!
Child: This is second message of Child class!
son: This is third message! I'm a constructor of Child class!
---------------------------
위 결과를 보면 알 수 있듯이,
부모 클래스의 static block -> 자식 클래스의 static block -> 부모 클래스의 instance block
-> 부모 클래스의 생성자 -> 자식 클래스의 instance block -> 자식클래스의 생성자 순으로 실행 되는 것을 알 수 있다.
마지막으로 아래와 같이 실행을 하면,
public class TestClass {
public static void main (String[] args) {
System.out.println("---------------------------");
Parent father = new Parent("father");
Parent mother = new Parent("mother");
Child son = new Child("son");
System.out.println("---------------------------");
}
}
하기와 같이 실행 된다. 천천히 살펴보면 앞에서 설명한 내용에서 벗어나지 않는다.
---------------------------
This is first message of Parent class!
Parent: This is second message!
father: This is third message! I'm a constructor of Parent class!
Parent: This is second message!
mother: This is third message! I'm a constructor of Parent class!
This is first message of Child class!
Parent: This is second message!
Parent: This is third message! I'm a default constructor of Parent class!
Child: This is second message of Child class!
son: This is third message! I'm a constructor of Child class!
---------------------------
출처: http://chobocho.tistory.com/2461062
반응형
'Java > Core' 카테고리의 다른 글
Java Deep Copy, Shallow Copy (0) | 2016.11.03 |
---|---|
빌더(builder)를 이용하여 toString, hashCode, equals를 구현 (0) | 2016.08.31 |
Java Programing 치트 시트 (0) | 2016.04.18 |
[JAVA] 정규표현식, Matcher 메서드 사용방법과 그룹 개념이해 (0) | 2016.03.04 |
[펌]Java StringBuilder Example (0) | 2016.01.20 |
Comments