Java SE Tutorials/Initializing Fields

Java Initializing Fields

Soul-Learner 2016. 12. 7. 09:57

Java 프로그래밍, 멤버변수의 초기화 ( Initializing Fields )


Java 언어에서 필드(Fields)라면 멤버변수를 가리키는 말이며 필드에는 인스턴스 변수(Instance Variables)와 클래스 변수(Class Variables)가 필드에 해당한다. 필드는 각 자료형의 기본 값으로 초기화되는데, 각 자료형의 기본 값은 다음과 같다.

각 자료형의 기본 값

 Data Types  

 Default Values

 boolean  

   false 

 byte, short, int, long  

   0 

 char  

   '\u0000' 

 float, double  

   0.0 

 Reference Types  

   null 


클래스 변수(Class Variables)의 초기화 절차

  1. ClassLoader에 의한 클래스의 로딩 ( Method Area )
  2. 변수의 기본형으로 자동 초기화 (묵시적 초기화)
  3. 변수 선언시에 할당한 값으로 명시적 초기화
  4. 정적 초기화 블럭 ( Static Initialization Blocks )을 통한 초기화 (현재 클래스의 main 메소드보다 앞서 실행됨)


인스턴스 변수(Instance variables)의 초기화 절차

  1. 인스턴스의 생성 ( Heap Memory )
  2. 변수의 기본형으로 자동 초기화 (묵시적 초기화)
  3. 변수 선언시에 할당한 값으로 명시적 초기화
  4. 인스턴스 초기화 블럭(Instance Initialization Blocks)을 통한 초기화
  5. 생성자의 바디에 지정된 값으로 초기화


멤버변수(Fields)의 초기화 순서를 확인하는 예

public class Tutorials 
{
	public static void main(String[] args) 
	{
		System.out.println("main()");
		
		User user = new User();
		user.setNum(10);
		user.setName("홍길동");
		user.setEmail("gildong@gmail.com");
		
		user.printUser();
	}
}

class User
{
	private int num;     
	private String name;
	private String email;
	
	// 클래스 변수의 선언
	private static String domain;
	
	// 정적 초기화 블럭(Static Initialization Blocks)
	static {
		domain = "google.co.kr";
		System.out.println("정적 초기화 블럭");
	}
	
	// 인스턴스 초기화 블럭(Instance Initialization Blocks)
	{
		num = 1;
		System.out.println("인스턴스 초기화 블럭");
	}
	
	// 생성자
	User(){
		System.out.println("생성자");
	}
	
	User(int num, String name, String email){
		this.num = num;
		this.name = name;
		this.email = email;
	}

	public void printUser()
	{
		System.out.println("======== 회원정보 ========");
		System.out.printf(" 번호 : %d %n", num);
		System.out.printf(" 이름 : %s %n", name);
		System.out.printf(" 메일 : %s %n", email);
		System.out.printf(" 도메인 : %s %n", User.domain);
	}
	
	// 클래스 getter 메소드
	public static String getDomain() {
		return domain;
	}

	// 클래스 setter 메소드
	public static void setDomain(String domain) {
		User.domain = domain;
	}

	public int getNum() {
		return num;
	}

	public void setNum(int num) {
		this.num = num;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}
}

위의 코드 실행결과 화면

main()

정적 초기화 블럭
인스턴스 초기화 블럭
생성자
======== 회원정보 ========
 번호 : 10 
 이름 : 홍길동 
 메일 : gildong@gmail.com 
 도메인 : google.co.kr