java -- initialization block ( 초기화 블록 )
참고 : https://docs.oracle.com/javase/tutorial/java/javaOO/initial.html
http://stackoverflow.com/questions/12550135/static-block-vs-initializer-block-in-java
https://www.youtube.com/playlist?list=PLmCsXDGbJHdhaAC8UP3kbG1ZQM1duQGDN ==> 동영상
** 위의 Youtube 동영상 강좌 먼저 보기 !!!!
멤버변수 ( field ) 초기화의 예
private int a = 3
그러나 이경우에는 초기화시에 에러 핸들링이나, for loop 를 이용한 배열 초기화 같은 복잡한 것은 못한다.
==> 해결책 :
1) 인스턴스 변수의 경우 ( 3가지 방법 )
- 생성자에서 복잡한 초기화 가능
- 또는 initializer block 사용.
- 또는 final method 사용.
2) 클래스 변수의 경우
- static initialization block 사용
** 인스턴스 초기화 블럭 ( instance initializer block )
- 객체 생성할때마다 호출됨.
- super 생성자 이후에 실행됨.
- 생성자 보다 먼저 실행됨.
- 모든 생성자의 공통 코드를 instance initializer block 에 넣으면 코드 줄일수 있다.
** 클래스 초기화 블럭 ( static initializer block )
- class 로딩시에 호출된다.
- 인스턴스 변수나 인스턴스 메소드에 접근 못함.
<< 예제 >>
public class InitializationBlockTest { | |
public static void main(String[] args) { | |
MyInitBlock.b = 33; // static initializer block 호출됨. | |
System.out.println("-------------- instance 생성 전 ------------------"); | |
MyInitBlock block = new MyInitBlock(); | |
System.out.println("-------------------------------------------------"); | |
new MyInitBlock(); | |
System.out.println("---------------- instance 생성 후 -----------------"); | |
} | |
} | |
class MyInitBlock extends MySuper { | |
private int a; | |
public int[] arr = new int[5]; | |
public static int b; | |
// instance initializer block (인스턴스 초기화 블럭) | |
{ | |
System.out.println(" +++++ initializer block 실행 +++++ " ); | |
a = 11; | |
// b = 22; | |
for(int i=0; i<5 ; i++){ | |
arr[i] = i*3; | |
} | |
System.out.println("인스턴스변수 a = " + a); | |
System.out.println("인스턴스변수 arr 길이 = " + arr.length); | |
System.out.println("클래스변수 b = " + b); | |
} | |
// static initializer block (클래스 초기화 블럭) | |
static { | |
// a = 1; // error | |
b = 2; | |
System.out.println(" **** static initialization block 실행 ***** " ); | |
} | |
MyInitBlock(){ | |
super(); | |
System.out.println(" .. >>>> constructor <<<<.."); | |
} | |
} | |
class MySuper { | |
MySuper(){ | |
System.out.println(" .. >>>> super constructor <<<<.."); | |
} | |
} |
-- 실행 결과
<< 아래와 같이 코드를 변경한 경우에는 >>
--- 실행 결과
'java, jsp' 카테고리의 다른 글
java -- try-with-resources statement (0) | 2016.01.27 |
---|---|
java -- jdbc ; Statement, PreparedStatement, CallableStatement (0) | 2016.01.27 |
jsp -- Mac 에서 eclipse, tomcat 8 설치후 jsp 처음 시작하기 (0) | 2016.01.20 |
java -- POJO 개념 정리 (0) | 2015.12.30 |
java -- JavaBeans 개념 정리 (0) | 2015.12.25 |