정적(static) 및 비정적(non-static)

2026 단어 J#
프로그램의 변수나 코드는 컴파일할 때 시스템이 자동으로 메모리를 분배하여 저장합니다.
 
정적 (static) 은 컴파일된 후에 분배된 메모리가 프로그램이 메모리를 종료할 때까지 계속 존재하는 것을 말한다. 즉, 프로그램이 실행될 때까지 이 메모리가 계속 존재한다는 것이다.
 
비정적(non-static)은 컴파일할 때 new를 통해 실례화하고 초기화하여 대상(즉 new를 통해 시스템에 메모리를 열어 저장)을 만들고 대상을 바꾸어 프로그램을 종료할 때까지 공간을 방출한다. 즉, 대상만 존재하면 그 메모리는 계속 저장된다.
 
둘은 시스템에서 메모리를 분배하는 방식이 다르기 때문에 정적 대상과 비정적 대상을 호출하는 방법이 다르다.그들의 생명 주기도 다르다.
 
예: 정적
 
package StaticS;

class TStatic{ 
    static int i; 
    public TStatic(){ 
             i = 4; 
    } 

     public TStatic(int j){ 
     i = j; 
    } 

public static void main(String args[]){ 
	TStatic t = new TStatic(5);
	System.out.println(t.i); 
	System.out.println(TStatic.i);//      ,     
	TStatic tt = new TStatic(); //   
	System.out.println(TStatic.i); 
	System.out.println(t.i); 
	System.out.println(tt.i); 
	System.out.println(t.i); 
} 
}

 
입력:
554444
분석:
TStatic t = new TStatic(5); static int i에 "5"값을 지정합니다.
TStatic tt = new TStatic(); static int i에 "4"값을 추가합니다.
i는 static이기 때문에 매번 같은 메모리 공간에서 수정되기 때문에 값도 변합니다.
 
예: non-static
package StaticS;

class TStatic{ 
     int i; 
    public TStatic(){ 
             i = 4; 
    } 

     public TStatic(int j){ 
     i = j; 
    } 

public static void main(String args[]){ 
	TStatic t = new TStatic(5);
	System.out.println(t.i); 
	TStatic tt = new TStatic(); 
	System.out.println(t.i); 
	System.out.println(tt.i); 
	System.out.println(t.i); 
} 
} 

 
출력:
5545
 
분석:
TStatic t = new TStatic(5); static int i에 "5"값을 지정합니다.
TStatic tt = new TStatic(); static int i에 "4"값을 추가합니다.
i가 아니기 때문에 매번 t or tt가 분배한 메모리 공간에서 i의 값을 수정하기 때문에 값은 t or tt와 관련이 있습니다

좋은 웹페이지 즐겨찾기