Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

기록 저장소

정적 멤버 본문

kitri 노트/java

정적 멤버

resault 2019. 5. 11. 13:39

 

필드와 메소드에 static 선언을 하면 정적 멤버가 된다.

 

이는 객체를 생성해야지만 사용할 수 있는 인스턴스 멤버와 달리,

클래스 로더가 클래스를 로딩하여 메모리에 적재할 때 클래스별로 관리되기 때문에

객체 생성 여부와 무관하게 사용할 수 있게 된다.

 

정적 필드는 필드선언과 동시에 초기값을 주는 것이 보통이나,

연산이 필요한 초기화 작업의 경우에는 static block을 이용하여 초기화 작업을 한다.

(인스턴스 필드의 경우 생성자에서 초기화 작업)

 

단, 정적 멤버는 객체와 무관하기 때문에

정적 메소드와 static block의 내부에서는 인스턴스 멤버나 객체 자신을 참조하는 this 키워드 사용이 불가하다.

 

 

public class Temp {

	///// 인스턴스 멤버 /////
	
//	- 인스턴스 필드
	String isTempStr = "임시";
	String isTempStrP; 
	
//	- 생성자
	public Temp() {
		isTempStrP = isTempStr + "테스트";
	}
	
//	- 인스턴스 메소드
	void isTemp() {
		System.out.println(isTempStr);
		System.out.println(isTempStrP);
	}
	
	
	
	///// 정적 멤버 /////
	
//	- 정적 필드
	static String stTempStr = "temp";
	static String stTempStrP;
	
//	- static 블록 : 정적 필드 초기화
	static {
		stTempStrP = stTempStr + " Test";
	}
	
//	- 정적 메소드
    static void stTemp() {
    	System.out.println(stTempStr); //(o)
    	System.out.println(stTempStrP);	//(o)
    	
    	System.out.println(isTempStr); //(x)

    	Temp temp = new Temp();
    	System.out.println(temp.isTempStr); //(o)  but, 이렇게 사용할 일이 있을지는 모르겠음
    }
    
    
    
    public static void main(String[] args) {
		// 정적 메소드 호출
    	Temp.stTemp();
		
		// 객체 생성 및 인스턴스 메소드 호출
		Temp temp = new Temp();
		temp.isTemp();
	}
}

 

 

 


 

[ 추가 메모 ]

 

* main 메소드도 정적 메소드이기 때문에, 객체 생성 없이 인스턴스 필드와 인스턴스 메소드를 사용할 수 없다.

 

 

'kitri 노트 > java' 카테고리의 다른 글

JDBC  (0) 2019.04.09
JTable - DefaultTableModel 사용  (0) 2019.04.08
[Java #22] util package  (0) 2019.03.27
[Java #21] lang package_StringBuffer Class  (0) 2019.03.27
[Java #20] lang package_String Class  (0) 2019.03.25