2012-01-19 4 views
0
ClassLoader c //imagine this is a valid object 
c.loadClass(String className, boolean resolveIt); 

저를 혼란스럽게하는 className 매개 변수입니다. Java 파일을 폴더에 작성한 후 리플렉션을 사용하여 컴파일했습니다. 올바른 파일을 가리키는 방법과 className에 대해 사용하는 명명 규칙이 무엇인지 확실하지 않습니다.클래스 로더가 클래스를 찾는 방법

설명서에 클래스의 이름이 나와 있지만 어디 있는지 어떻게 알 수 있습니까?

감사

+0

그게 바로 클래스 패스입니다. 그건 그렇고 패키지 계층 구조를 포함하여 클래스의 정규화 된 이름입니다. – Viruzzo

+0

@Viruzzo - 당신이 말하는 것은 일반적인 경우에는 올바르지 않습니다. 특정 클래스 로더에 대해 정확할 수도 있습니다. 그러나 클래스 로더를 다이렉트하게 (예 : 데이터베이스에서 클래스 데이터 가져 오기) 수행 할 수있는 클래스 로더가있을 수 있습니다. – Ingo

+0

@Ingo 기본 클래스 로더를 참조하고있었습니다. 나는 그가 일반 사건이 아닌 디폴트 사건에 관심이 있다고 생각한다. – Viruzzo

답변

2

ClassLoader의 포인트는 클래스 이름을 지정된 클래스 파일을 검색하는 방법을 알고 정확하게. Javadoc가 말한다 : 클래스의 바이너리 명을 지정하면

, 클래스 로더가 클래스의 정의를 구성하는 데이터를 찾아내는 지 생성합니다. 일반적인 전략은 이름을 파일 이름으로 변환 한 다음 파일 시스템에서 해당 이름의 "클래스 파일"을 읽는 것입니다.

따라서 ClassLoader가 클래스의 바이트 코드가있는 위치로 클래스 이름을 변환해야합니다. URLClassLoader은 클래스 이름을 경로로 변환하고 URL이 가리키는 다양한 jar와 디렉토리에서 해당 경로를 찾는다.

0

이것은 클래스 로더를 처음 작성하는 바로 그 이유입니다. 이것은 클래스 이름을 메모리의 (이진) 클래스에 매핑하는 메커니즘입니다. 클래스 로더가 데이터를 얻는 곳은 바로 그 자체 사업입니다.

예를 들어 URLClassLoader는 클래스 경로를 참조하여 명명 된 클래스가 포함 된 파일을 찾을 수 있는지 확인합니다.

관련 문제