자바 기반 9:자바 의 클래스 로 더 설명,class 파일 암호 화,사용자 정의 ClassLoader
/**
* Java
*
* @author
*
*/
public class ClassLoaderStudy {
public static void main(String[] args) throws Exception {
// : ClassLoaderStudy
System.out.println(ClassLoaderStudy.class.getClassLoader().getClass().getName());// AppClassLoader
// : ClassLoaderStudy
ClassLoader classLoader = ClassLoaderStudy.class.getClassLoader();
while (null != classLoader) {
System.out.println(classLoader.getClass().getName());
classLoader = classLoader.getParent();
}
/**
* Java
* BootStrap ------> getParent() == null; JRE/lib/rt.jar class
* ExtClassLoader ------> getParent() == BootStrap; JRE/lib/ext/*.jar class
* AppClassLoader ------> getParent() == ExtClassLoader; CLASSPATH jar
* ( BootStrap ) , class ,
* BootStrap , , , :java.lang.ClassNotFoundException
*
* , A B B
*/
// class
// ( :bin\com\mengya\classLoader\) myClass ,
// myClass MyClassLoader , myClass class
// , MyClassLoader 。
Class clazz = new MyClassLoader().loadClass("com.mengya.classLoader.myClass");
// myClass , myClass , MyClass。
// MyClass , ( ) myClass
MyClassInter test = (MyClassInter) clazz.newInstance();
// MyClass myClass = null;
System.out.println(test.toString());
}
}
/**
* ( ClassLoader findClass )
*
* @author
*
*/
public class MyClassLoader extends ClassLoader {
@Override
protected Class<?> findClass(String name) throws ClassNotFoundException {
String destPath = "F:\\MyEclipseWorkspace\\JavaBase\\myClassLib";
String className = name.substring(name.lastIndexOf('.') + 1);
String classFileName = destPath + "\\" + className + ".class";
InputStream fileInStream = null;
ByteArrayOutputStream byteArrayOutStream = null;
try {
fileInStream = new FileInputStream(classFileName);
byteArrayOutStream = new ByteArrayOutputStream();
encrypt(fileInStream, byteArrayOutStream);
byte[] classByte = byteArrayOutStream.toByteArray();
return defineClass(classByte, 0, classByte.length);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
byteArrayOutStream.close();
fileInStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return super.findClass(name);
}
/**
* class
*
* @param args
*/
public static void main(String[] args) {
// class
String srcPath = "F:\\MyEclipseWorkspace\\JavaBase\\bin\\com\\mengya\\classLoader\\MyClass.class";
// class
String destPath = "F:\\MyEclipseWorkspace\\JavaBase\\myClassLib";
InputStream fileInStream = null;
OutputStream fileOutStream = null;
try {
fileInStream = new FileInputStream(srcPath);
String fileName = srcPath.substring(srcPath.lastIndexOf('\\') + 1);
String destFilePath = destPath + "\\" + fileName;
fileOutStream = new FileOutputStream(destFilePath);
encrypt(fileInStream, fileOutStream);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
fileOutStream.close();
fileInStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* class ( )
*
* @param inStream
* class
* @param outStream
* class
*/
public static void encrypt(InputStream inStream, OutputStream outStream)
throws Exception {
int b = -1;
while ((b = inStream.read()) != -1) {
outStream.write(b ^ 0xff);
}
}
}
/**
*
*
* @author
*
*/
public class MyClass implements MyClassInter {
@Override
public String toString() {
return "Hello !";
}
}
public interface MyClassInter {
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.