article id #158
categorized under programming/think in java & written by 정환
categorized under programming/think in java & written by 정환
Outer 클래스의 멤버 변수를 Inner 클래스에서 접근할시에는 서로 static 과 instance의 차이가 아닌 한,
에러가 발생하지 않습니다.
하지만 Outer 클래스의 멤버변수를 Inner 클래스에서 변경을 시도할 경우에는 아래와 같은 에러가
발생하는군요. ( x변수에 대한 값 변경 시도시 : 대입연산자 )
Syntax error on token "x", VariableDeclaratorId expected after this token
내부클래스에서 외부클래스에 대한 멤버변수가 참조는 되지만 변경은 되지 않는다 라는건 새로운 사실
같습니다. 원리에 대해서는 조금 더 찾아봐야 할거 같네요 =_=
다음으로 자바의 소멸자에 대한 내용입니다.
C++ 에서는 ~으로 시작하는 클래스의 이름과 같은 메소드를 소멸자로 정의하는데요.
자바에서는 ~이 비트전환 연산자 일뿐 메소드에 ~ 붙이면 소멸자로 인식하지 않습니다;;
딱히 자바를 사용하면서 소멸자에 대한 것을 써본적이 없어서 한번 검색해보았는데요.
자바에서도 소멸자가 존재하였습니다. Object 클래스의 finalize() 메소드 입니다.
JAVA API를 검색해본결과 아래와 같은 내용이 나오네요.
Called by the garbage collector on an object when garbage collection determines
that there are no more references to the object.
자바에서 버려진 객체에 대한 메모리 회수를 해주는 가비지 컬렉터가 해주는 가비지 컬렉션을 수행한다고
언급되어 있는것 같네요.
따라서 자동으로 JVM에서는 위의 object 클래스의 finalize() 메소드를 통하여 가비지 컬렉션을 수행하는것
같습니다. 물론 유저가 finalize()을 임의로 사용도 가능합니다.
finalize()에 대한 내용은 아래의 블로그에서 이해가 쉽게(!) 언급되어 있네요 :)
[java.lang.Object 메쏘드 분석 5 - finalize]





