6.1 변수의 초기화
- 변수를 선언하고 처음으로 값을 저장하는 것- 멤버변수(인스턴스변수, 클래스변수)와 배열은 각 타입의 기본값으로 자동 초기화 되므로 초기화를 생략할 수 있다.
- 지역변수는 사용전에 꼭!! 초기화를 해주어야 한다.
6.2 멤버변수의 초기화
멤버변수(인스턴스변수, 클래스변수)의 초기화 방법
1. 명시적 초기화 (예 : int a = 10;)2. 생성자 (예 : Car(){})
3. 초기화 블록(클래스 초기화 블록, 인스턴스 초기화 블록) (예 : static{} 또는 {})
같이 3개를 모두 썼을때 명시적초기화, 초기화 블록, 생성자 순으로 실행되기 때문에 마지막인 생성자에 있는 내용만 쓰임
1. 명시적 초기화 : int a = 10; 클래스 변수를 초기화 할 때 주로 사용
2. 초기화 블록 : static {} 잘 사용 안 함(모르는 사람도 많음...)
3. 생성자 : 인스턴스 변수를 초기화 할 때 주로 사용
6.3 초기화 블록(initialization block)
초기화 블록에서 가능한 모든것들은 생성자로 가능하다따라서 사용빈도가 낮다.... 레알 진짜 아무도 안씀....
잊어도 무방함...
클래스 초기화 블록
- 클래스변수의 복잡한 초기화에 사용되며 클래스가 로딩될 때 실행 된다.class Main
{
static int x=100;
static
{//클래스 초기화 블록
x=200;
System.out.println("초기화블록!");
//잘 사용하지 않는다. 초기부터 int x = 200;하면 되기 때문에...
}
public static void main(String[] args)
{
System.out.println(x);
}
}
인스턴스 초기화 블록
- 생성자에서 공통적으로 수행되는 작업에 사용되며 인스턴스가 생성될 때 마다(생성자보다 먼저) 실행된다.class Main
{
static
{
System.out.println("인스턴스 초기화 블록");
}
Main()
{
System.out.println("생성자");
}
public static void main(String[] args)
{
Main m1 = new Main();
Main m2 = new Main();
//레알 아무도 안쓴다.....
}
}
API를 보고 constuctors를 보고 생성자를 어떤것을 제공하는지 확인하여 사용한다.
6.4 멤버변수(클래스변수, 인스턴스변수)의 초기화 시기와 순서
클래스변수 초기화 시전
- 클래스가 처음 로딩될 때 단 한번인스턴스 변수 초기화 시점
- 인스턴스가 생성될 때 마다초기화 예제
class Product
{
static int count = 0; //생성된 인스턴스의 수를 저장하기 위한 변수
int serialNo; //인스턴스 고유의 번호
{//초기화 블록!!
//생성자로 충분히 대체 가능...
//실제로 시리얼 넘버 만들때 이렇게 함...
++count;
serialNo = count;
}
}
class ProductTest
{
public static void main(String[] args)
{
Product p1 = new Product();
Product p2 = new Product();
Product p3 = new Product();
System.out.println("p1의 제품번호(serialNo) : " + p1.serialNo);
System.out.println("p2의 제품번호(serialNo) : " + p2.serialNo);
System.out.println("p3의 제품번호(serialNo) : " + p3.serialNo);
System.out.println("제품의 수는 모두 "+ Product.count +"개 입니다.");
}
}