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)의 초기화 절차
- ClassLoader에 의한 클래스의 로딩 ( Method Area )
- 변수의 기본형으로 자동 초기화 (묵시적 초기화)
- 변수 선언시에 할당한 값으로 명시적 초기화
- 정적 초기화 블럭 ( Static Initialization Blocks )을 통한 초기화 (현재 클래스의 main 메소드보다 앞서 실행됨)
인스턴스 변수(Instance variables)의 초기화 절차
- 인스턴스의 생성 ( Heap Memory )
- 변수의 기본형으로 자동 초기화 (묵시적 초기화)
- 변수 선언시에 할당한 값으로 명시적 초기화
- 인스턴스 초기화 블럭(Instance Initialization Blocks)을 통한 초기화
- 생성자의 바디에 지정된 값으로 초기화
멤버변수(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