Whiteship's Note

[ClassLoader 퀴즈 6] SpringSprout는 과연 Whiteship의 이름을 알 수 있을까?

Java : 2010. 2. 22. 15:15


    @Test
    public void illegalAccessException() throws Exception {
        FileUrlClassLoader fUCL1 = new FileUrlClassLoader(CLASSPATH, null);
        Class whiteshipClass = fUCL1.loadClass(WHITESHIP);
        Object whiteship = whiteshipClass.newInstance();

        System.out.println(this.getClass() + " " + this.getClass().getClassLoader());
        System.out.println(whiteshipClass + " " + whiteshipClass.getClassLoader());

        whiteshipClass.getDeclaredField("name").get(whiteship);
    }

public class Whiteship2 {

    String name = "keesun";
}


이 테스트를 실행한 결과 중 일부는 다음과 같습니다.

class sandbox.classloader.ClassloaderTest sun.misc.Launcher$AppClassLoader@19821f <- CL1
class sandbox.classloader.Whiteship2 ㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁ<- CL

1. CL의 값은 CL1일까요? 아니면 전혀 다른 값?
2. 그 뒤 코드의 굵은 줄을 실행한 결과는 어찌됐을까요? 무사히 실행하고 keesun을 가져왔을까요? 에러가 났을까요? 에러가 났다면 어떤 에러가 났을까요?


top

  1. Favicon of http://me2day.net/geekinside BlogIcon 박성철 2010.02.23 16:22 PERM. MOD/DEL REPLY

    1은 다른 값이고...
    2는 setAccessible 얘기인가요?

    Favicon of https://helols.tistory.com BlogIcon is윤군 2010.02.24 23:40 신고 PERM MOD/DEL

    코드는 protected 레벨이 아니라 default 상황인것 같은데;;
    아닌가;; 훔냥;; ㅎ

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2010.02.25 05:22 신고 PERM MOD/DEL

    아;; 설명을 잘못적은 거임;
    package 레벨이라고 적었어야 하는건데;;
    위에 댓글을 수정할께

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2010.02.25 05:22 신고 PERM MOD/DEL

    네 1번은 다른 값이구요. 2번 setAccessible을 하면 물론 가져올 수 있습니다. 하지만 저 상황에서 왜 setAccessible을 해야 하는건지..

    package 레벨이라.

    String name = new Whiteship2().name;

    이런식으로도 가져올 수 있는 값인데 왜 저기서는 접근을 못한다고 에러가 날지 고민해보길 바라는 문제였습니다.

Write a comment.




: 1 : ··· : 9 : 10 : 11 : 12 : 13 : 14 : 15 : 16 : 17 : ··· : 140 :