01. Static

2020. 1. 8. 17:29CSE/JAVA

* 정적(static) 멤버 vs 인스턴스 멤버

- 인스턴스 멤버 : 객체(인스턴스)에 소속된 멤버

- 정적 멤버 : 클래스에 소속된 멤버

=> 정적 멤버는 객체를 생성하지 않고 사용할 수 있음

 

 

* 정적(static) 멤버 선언 & 사용

public class Calculator{     //public class 클래스이름

    static double pi = 3.141592;   //static 타입 필드 = 초기값
    
    static int add(int x, int y){   //static static 리턴타입 메소드이름(매개변수 선언)...
    	return x+y;
    }
}

int result1 = 10 * Calculator.pi;    //클래스.필드
int result2 = Calculator.add(10,5);     //클래스.메소드(매개값,...)

정적 요소는 클래스 이름으로 접근하는 것이 좋다.

객체 참조 변수로도 접근이 가능하지만 경고표시가 나타난다.

 

* 정적 초기화 블록

: 계산이 필요한 초기화 작업을 위해 사용

public class Example{
	static int field1 = 10;
    static int field2 = 20;
    static int result;
    
    static{   //정적 초기화 블록
    	result = field1 + field2;   
    }
}

 

+ 정적 메소드와 정적 블록 선언 시, 이들 내부에 인스턴스 멤버를 사용할 수 없다.

=> 사용 시, 컴파일 에러 발생

=> 사용하고 싶다면, 내부에서 객체 선언 후에 참조 변수로 사용해야 한다.

public class Example{
	int field1;
    void method1(){ ... }
    
    static field2;
    static field3;
    static void method2(){ ... }
    
    static{
    	field1 = 10; // 컴파일 에러
        method1();   // 컴파일 에러
        
        Example e = new Example();
        e.field1 = 10;
        e.method1();
        
        field2 = 10;
        method2();
    }
    
    static void method3(){
    	this.field1 = 10; //컴파일 에러
        this.method1();   //컴파일 에러
        
        Example e = new Example();
        e.field1 = 10;
        e.method1();
        
        field2 = 10;
        method2();
    }
}

 

 

 

 

'CSE > JAVA' 카테고리의 다른 글

06. Exception  (0) 2020.01.20
05. Anonymous Inner Class  (0) 2020.01.19
04. Nested Class, Nested Interface  (0) 2020.01.19
03. Annotation  (0) 2020.01.13
02. Singleton, Final  (0) 2020.01.12