일단 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
도움이 되셨는지요.... 즐플하세요 ^^
'JAVA' 카테고리의 다른 글
2. 저장된 파일에서 필요한 값 찾기. readLine (0) | 2014.07.23 |
---|---|
1. URL 경로 파일 다운로드해서 TXT형 저장하기 (0) | 2014.07.23 |
[Java] 나머지 % (0) | 2014.06.01 |
Date (0) | 2014.02.01 |
JCF(Java Collection Framework) : List / Map / Set (0) | 2014.01.18 |