일단 static과 final을 분리해서 생각하시는게 좋을듯합니다.


static은 사용 시에 객체의 선언 없이 클래스명을 가지고 바로 이용할 때 사용됩니다.


예를 들면

 

public class Exmain {

    // 클래스

    public static class EX1 {    

        public static int x;         // static 변수 선언

        public int y;                  //   일반 변수 선언

    }

    // 사용

    public Exmain() {
        
EX1.x = 1;                    // static 변수 사용
        EX1 ex1 = new EX1();    //   일반 변수 사용
        
ex1.y = 2;                    //
        System.out.println("x=" + EX1.x + "  y=" + ex1.y);
    }

    // 실행

    public static void main(String[] args) {
        new Exmain();

    }

}

 

이해가 되시는지... 위에서는 변수만 이용했는데 메소드(함수)에 사용할때도 동일합니다.

 

final 은 의미 그대로 최종값을 세팅한다는 거죠 final 다음에는 그 값을 세팅하거나 변경할

수 없습니다.

형태는 변수로 사용될 때는

    final 타입 변수명 = 최종값;  // 포함된 범위에서 변경불가

                                         // 클래스 멤버변수면 클래스 안에서만 고정상수

                                         // 메소드내 변수면 메소드 안에서만 고정상수

메소드 인수로 사용될 때는

    메소드이름(final 인수명) {   // 인수로 넘겨온 값이 메소드 안에서 변경불가

   }

 

이제 예제로 제시해 주신 부분을 보면

1.번 클래스

public class Foo5 {

    // 외부에서 값을 이용할 수 있는 상수

    static final int x = 12;

    // 매개변수로 메소드내에서 상수

    public void  go (final int x){

        // 매개변수로 전달된 상수값 출력 (위의 멤버변수 x가 아님)

        // 멤버변수 x를 사용하려면 this.x를 쓰거나

        // 인수 x를 다른 명칭으로 사용해서 구별해야 합니다.

        System.out.println(x);

    }

}

 

2.번 클래스

public class Foo6 {

    int x =12;

    public static void go (final int y) {    // 인수명을 변경했습니다.

        System.out.println(y);                 // 이러면 안 헷갈리시겠죠

    }

}

 

3.번 클래스

public class Foo3 {
    final int x ;                        // 초기값을 세팅하지 않아서 에러

                                           // final int x = 2; 이런식으로 사용
    public void go () {
        System.out.println(x);
    }
}

// 1번, 2번 클래스 사용 예제를 만들어 보았습니다.

public class Exmain5 {

    public Exmain1() {
        System.out.println("x=" + Foo5.x);     // static 변수
        Foo5 foo = new Foo5();

        foo.go(5);

        foo.go(7);

        Foo6.go(9);                                    // static 함수

        Foo6.go(11);                                  // static 함수
    }

    public static void main(String[] args) {
        new Exmain1();

    }

}

// 실행결과

x=12

5

7

9

11

 

도움이 되셨는지요.... 즐플하세요 ^^

+ Recent posts