<변수 유효범위>
1)변수의 영역
{a
{a b
{a b
}
}//b(o)
}//a, b(x)
: 변수는 블록 밖으로 나올 수 없다. 수평한 블록 간(안기지 않은)에 변수를 가져오려면 함수화(stack복사)가 필요하다.
<예제>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
public class Variable {
String movie = "트로이"; // 멤버변수, 전역변수
public void show() {
System.out.println("show 메소드 영역: " + movie);
}
public void title() {
String movie = "바람의 전설";
System.out.println("title 메소드 영역: " + movie); //자기거 우선
System.out.println("멤버변수: " + this.movie); //this: 전역변수
}
public static void main(String[] args) {
Variable v = new Variable();
v.show();
v.title();
}
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
|
2)외부변수, 내부변수, 변수의 범위
-클래스 변수: 다른 객체(클래스)에서도 인스턴스 생성 없이 사용 가능
-전역 변수: 클래스 안에서 자유롭게 사용 가능(외부 클래스에서는 인스턴스 생성 필수)
-지역: 메소드 안에서 자유롭게 사용 가능
<예제>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
public class Block {
String block = "바람의 전설";
public static void main(String[] args) {
String block = "트로이";
System.out.println("Movie: " + block);
int i = 0;
{
String block2 = "달콤한 인생";
System.out.println("Mpvie: " + block2);
for(int j = 0; j < 5; j++) {
} // for문 안에서 선언된 변수 j는 이 반복문 블록을 벗어날 수 없다.
for(i = 0; i < 5; i++) {
} // for문 안의 변수 i는 "외부변수"이므로 반복문 안과 밖 모두 사용 가능하다.
}//block, block2 모두 호출 가능. 멤버변수 영향 無
} //main
} //class
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
|
*static 키워드가 붙은 메소드 및 변수는 다른 클래스에서도 객체를 생성할 필요가 없다.
그러나 static 메소드(main 함수 포함) 안에서는 외부 영역의 멤버변수를 this로 불러올 수 없다. 반드시 new를 사용해 인스턴스를 생성해주어야 한다.
'20.03 ~ 20.08 국비교육 > JAVA' 카테고리의 다른 글
접근제한자 (0) | 2020.03.26 |
---|---|
생성자의 생략, 코드 중복 (0) | 2020.03.25 |
싱글톤(Singletone pattern), final (0) | 2020.03.22 |
클래스 JVM 메모리 운영, Static variable과 Method (0) | 2020.03.22 |
Call by value vs Call by reference (0) | 2020.03.21 |