//외부클래스
class Test
{
static int a=10; // 전역변수 멤버변수 static변수(클래스벼수)
int b=20; //전역변수 멤버변수 instance변수(인스턴스변수)
// ▶ 첫 번째 write() 메소드
void write()
{
System.out.println("write()...①");
final int c=30; // 지역변수 상수화된 변수(값이 변하지 않는 변수)
int d=40; // 지역변수 (값이 수시로 변할 수 있는 변수 ↑와 반대로)
// 내부클래스
// 메소드 안에 존재하는 또다른 클래스(local class = 지역클래스)
class LocalTest//메소드 안에 클래스가 설계되어 있음
{
// ▶ 두 번째 write() 메소드
void write()
{
System.out.println("write()....②");
System.out.println("a : " + a);
System.out.println("b : " + b);
System.out.println("c : " + c);
//System.out.println("d : " + d);
}
}
//c = 20;
d=30;
// 첫 번째 write() 메소드에서 생성한 지역 클래스의 인스턴스
LocalTest ob1 = new LocalTest();
// 두 번째 write() 메소드 호출
ob1.write();
}
}
public class Test118
{
public static void main(String[] args)
{
// 외부 클래스에 대한 인스턴스 생성
Test ob2 = new Test();
// 첫 번째 write() 메소드 호출
ob2.write();
}
}
/*
write()...①
write()....②
a : 10
b : 20
c : 30
계속하려면 아무 키나 누르십시오 . . .*/
/*
d는 언제든 변할 수있다 이미 메모리 할당되어잇고
그런데 LocalTest 클래스는 인스턴스 생성되어야한다 한참뒤에 생성될수도
그래서 final int c에는 접근가능하지만 int d에는 접근이 불가하다.
오류남
local variables referenced from an inner class must be final or effectively final
System.out.println("d : " + d);
로컬클래스에서는 이것만 이해하고 넘어가면 된다 (외울필요없음)
*/