자바 사용자 정의 클래스 로 더 를 어떻게 실현 합 니까?
12118 단어 필기 하 다.
Protected Class<?> findClass(String name) throws ClassNotFoundException{
Throw new ClassNotFoundException(name);
}
이 함 수 는 클래스 파일 을 찾 는 데 사 용 됩 니 다.바 이 너 리 흐름 을 어떻게 읽 는 지,그리고 그것 을 처리 해서 클래스 대상 을 되 돌려 줍 니 다.
Protected final Class<?> defineClass(byte[] b,int off,int len) throws ClassFormatError{
return defineClass(null,b,off,len,null);
}
클래스 를 정의 합 니 다.받 은 매개 변 수 는 by te[]바이트 코드 형식의 배열 형식 입 니 다.바이트 흐름 을 받 은 후에 우 리 는 그것 을 정의 한 다음 에 class 로 돌아 갈 수 있 습 니 다.인 스 턴 스 는 다음 과 같 습 니 다.주의:불 러 오기 전에 불 러 온 클래스 를 class 파일 로 컴 파일 해 야 합 니 다.불 러 오 는 클래스 정의
public class Paul{
static {
System.out.println(hello + "Paul");
}
}
정의 클래스 로 더
public class MyClassLoader extends ClassLoader{
private String path;
private String classLoaderName;
public MyClassLoader(String path, String classLoaderName){
this.path = path;
this.classLoaderName = classLoaderName;
}
/*
*
*/
@Override
public Class findClass(String name){
byte[] b = loadClassData(name);
//defineClass() final ,
return defineClass(name, b, 0, b.length);
}
/*
*
*/
private byte[] loadClassData(String name){
name = path + name + ".class";
inputStream in = null;
//byte[]
ByteArrayOutputStream out = null;
try{
in = new FileInputStream(new File(name));
out = new ByteArrayOutputStream();
int i = 0;
while((i = in.read()) != -1){
out.write(i);
}
}catch(Exception e){
e.printStackTrace();
} finally{
try{
out.close();
in.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
}
테스트 클래스
public class ClassLoaderChecker{
public static void main(String[] args){
MyClassLoader m new MyClassLoader("C:/Users/admin/Desktop/test/Paul/","myClassLoader");
Class c = m.loadClass("Paul");
System.out.println(c.getClassLoader());
c.newInstance();
}
}
본 블 로 그 는 순 휴대 전화 입력 에 속 합 니 다.오류 가 있 으 면 지적 을 환영 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Dubbo (2): zookeeper 등록 센터Zookeeper 는 Apacahe Hadoop 의 하위 프로젝트 로 트 리 형태의 디 렉 터 리 서비스 로 푸 시 변경 을 지원 하 며 Dubbo 서비스의 등록 센터 로 적합 하 며 산업 강도 가 높 아 생산 환경...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.