반응형
Notice
Recent Posts
Recent Comments
Link
관리 메뉴

bro's coding

java.static(정적) 본문

[IT]/java

java.static(정적)

givemebro 2021. 3. 4. 09:59
반응형

static : 정적 변수 또는 메서드일 때 사용하는 자바 키워드

static member == class member - 붕어빵틀의 멤버(변수, 메서드)
> 클래스명.static변수 or 클래스명.static메서드

> static을 사용하면 별도의 메모리 공간 (meta space)에 생성됨(GC가 안 되기 때문에 가급적 사용 피할 것)

package step1;

public class TestStatic1 {
	int money = 2;
	static int point=100;
	public static void main(String[] args) {
		System.out.println("main method is static method");
		/*
		 * 아래는 compile error : static method에서는 인스턴스변수(객체의 멤버 or non-static field)에 접근할
		 * 수 없다
		 */
		// System.out.println(money);
		// sol : money에 접근하기 위해서는 자신의 클래스라도 객체 생성을 통해서 메모리에 적재한 후 사용 가능하다
		TestStatic1 ts1 = new TestStatic1();
		System.out.println(ts1.money);
		// 아래와 같이 static 끼리는 객체 생성없이 바로 사용 가능 > class loading시에 적재되기 때문
		System.out.println(point);// static variable은 객체 생성 없이 사용 가능
	}
}

 

 

static(class member)와 non-static(object member)접근
static > non-static 으로 바로 접근은 불가, 객체 생성이 필요
non-static > static으로 직접 접근 가능

 

 


package step1;
class Fish{
	static int sCount;
	Fish(){
		System.out.println("Fish 객체 생성");
		sCount++;
	}
}
public class TestStatic3 {
	public static void main(String[] args) {
		Fish f1=new Fish();
		Fish f2=new Fish();
		Fish f3=new Fish();
		System.out.println(Fish.sCount);
	}
}

 

 


package step1;

public class TestStatic4 {
	public static void main(String[] args) {
		System.out.println("main method run");
	}
	// main보다 앞서 초기화 하고 싶을 때, 사용
	static {
		System.out.println("static 초기화1");
	}
	static {
		System.out.println("static 초기화2");
	}
}

 

 

 

 

 

java.program 실행 단계

java program 실행단계 1. compile된 class 실행 2. class loading 단계 -> class area(or meta space)에 클래스 정보와 static정보가 적재 3. class검증 단계 4. 실행 단계(runtime) > main 실행 > 필요시 객체..

broscoding.tistory.com

 

 

 

 

 

 

 

반응형

'[IT] > java' 카테고리의 다른 글

java.Design pattern.template  (0) 2021.03.04
java.Design pattern  (0) 2021.03.04
java.abstract(추상화)  (0) 2021.03.04
java.final  (0) 2021.03.04
java.Polymorphism.ObjectCasting(캐스팅)  (0) 2021.03.02
java.Polymorphism.instanceof(객체 타입 비교)  (0) 2021.03.02
java.Polymorphism(다형성)  (0) 2021.03.02
java.annotation(어노테이션)  (0) 2021.03.02
Comments