-
자바의 정석 Ex7_1 (클래스 초기화, 인스턴스 초기화)Java/자바의정석 2023. 2. 20. 14:24반응형
package Chap07; class Tv { static { System.out.println("클래스 초기화"); } { System.out.println("{인스턴스 }"); //인스턴스 초기화 } boolean power; // 전원상태(on/off) int channel; // 채널 void power() { power = !power; } void channelUp() { ++channel; } void channelDown() { --channel; } } class SmartTv extends Tv { boolean caption; void displayCaption(String text) { if (caption) { System.out.println(text); } } } class Ex7_1 { public static void main(String args[]) { SmartTv stv = new SmartTv(); stv.channel = 10; stv.channelUp(); System.out.println(stv.channel); stv.displayCaption("Hello, World"); stv.caption = true; stv.displayCaption("Hello, World"); } }
===================실행결과=========================
클래스 초기화
{인스턴스 }
11
Hello, World위의 코드를 실행한다면 보기와같은 실행결과가 도출되어나온다.
클래스초기화, {인스턴스}는 호출한적이 없는데 어떻게 실행이 되었는가...?
1. 초기화 블럭 (initialization block)
클래스 초기화 블럭 : 클래스 변수의 복잡한 초기화에 사용된다.
인스턴스 초기화 블럭 : 인스턴스 변수의 복잡한 초기화에 사용된다.인스턴스 초기화 블럭의 경우는 클래스 내부에 중괄호 {}를 입력한 뒤 중괄호 내부에 코드를 작성하는 경우이다.
클래스 초기화 블럭의 경우는 인스턴스 초기화 블럭 앞에 static을 붙여준다면 클래스 초기화블럭이 된다.
class Tv { static { System.out.println("클래스 초기화"); } { System.out.println("{인스턴스 }"); //인스턴스 초기화 }
여기서 클래스 초기화 블럭은 클래스가 메모리에 처음 로딩될 때 한번만 수행되어진다.
반면에 인스턴스 초기화 블럭은 생성자와 같이 인스턴스를 생성할 때 매번 수행된다.
(인스턴스를 여러번 생성한다면 여러번 수행되어진다.)
위의 코드에서는
SmartTv stv = new SmartTv();
와 같이 stv참조변수로 SmartTV() 생성자를 이용하여 객체주소를 할당받은 경우
인스턴스 초기화 블럭이 실행되어진다.
SmartTv stv1 = new SmartTv();
stv1을 통해 다른 객체주소를 가진 참조변수를 선언한다면 '{인스턴스}' 해당부분이 다시 실행되어진다.
반응형'Java > 자바의정석' 카테고리의 다른 글
자바의정석 Ex7_10 추상 클래스, 추상 메서드 (0) 2023.02.21 자바의 정석 Ex7_9 (하나의 배열에 여러종류의 객체 저장) (0) 2023.02.20 자바의정석 Ex7_7(다형성) (0) 2023.02.20 자바의 정석 (this, super)의 이해 (0) 2023.02.20 자바의 정석 Ex7_2 (this, super) (0) 2023.02.20