[java]static

eunu·2024년 2월 27일
0

JAVA

목록 보기
13/21

static

// show 메소드는 static이기 때문에 static 변수만 접근할 수있음.
		// 때문에 static이 아닌 a변수는 접근할 수 없어 에러가 남.
		public static void show()
		{System.out.printf("a=%d, statNum=%d\n", a, staNum);}

hello.java →(compiler)→.class→인터프리터 → 실행

⇒ .class 파일은 중간단계파일

⇒ compile 타입에 할당되는 메모리 : 정적메모리

⇒ 실행타입에 할당되는 메모리 : 동적메모리(heap)

—> 정적메모리 동적메모리 저장 되는 영역들도 따로 정리해서 올려야 할 듯

static이 붙어있는 변수나 메서드는 실행타입에는 없다! 왜냐면 정적메모리일때 만들어지고, 실행(동적메모리일때 만들어지는 게 아니니까)

그리고, static이 붙어있는 거는 static끼리만 놀게하자. 저장되는 영역 이다르니까.

(동적 부분에 저장된 애들하고도 접근할 순 있으나 권장하지 않음(에러뜸))


static이 붙어있는 애들은 객체 이름이 아닌 클래스 이름으로 접근하는 것이 원칙


why? —>

static이 붙어있는 애들은 위 이미지에서 Calc 라는게 생성되기 이전에 생성되어서 이미 정적메모리에 올라가 있음.

즉, 객체이름= new 클래스이름(); 으로 만들어도 객체이름으로 불러오는건 권장X

왜냐면 클래스 안에서 선언하니까 클래스의 멤버는 맞으나, 객체가 만들어질때(실행, 힙영역, 동적메모리)는 이미 생성된 뒤(컴파일러, 정적메모리)니까. 객체에는 존재하지 않음.

main 함수에 static이 붙어있는 이유도 같다.

public static void main([String[] args){}

다른게 실행되기 전에 메인 함수가 가장 먼저 실행되어 있어야 하기 때문.

profile
Just Do It

0개의 댓글