黑马程序员技术交流社区
标题:
关于张孝祥老师高新技术ClassLoader类加载器部分的问题
[打印本页]
作者:
taomingking
时间:
2013-7-6 22:10
标题:
关于张孝祥老师高新技术ClassLoader类加载器部分的问题
本帖最后由 杨兴庭 于 2013-7-7 23:11 编辑
直接上代码,问题在代码里,先上类加载器
package study.day2;
import java.io.*;
import com.sun.beans.finder.ClassFinder;
public class MyClassLoader extends ClassLoader{
/**
* @param args
*/
public static void main(String[] args) throws Exception {
String srcPath = args[0];
String destDir = args[1];
FileInputStream fis = new FileInputStream(srcPath);
String destFileName = srcPath.substring(srcPath.lastIndexOf('\\'));
String destPath = destDir+destFileName;
FileOutputStream fos = new FileOutputStream(destPath);
cypher(fis,fos);
fis.close();
fos.close();
}
//加密方法
public static void cypher(InputStream fis, OutputStream fos) throws Exception {
int b = -1;
while((b=fis.read())!=-1){
fos.write(b ^ 0xff);
}
}
private String classDir;
@Override
protected Class<?> findClass(String name) throws ClassNotFoundException {
String classFileName = classDir+"\\"+name.substring(name.lastIndexOf('.')+1)+".class";
try {
System.out.println("It's MyClassLoader.");
FileInputStream fis = new FileInputStream(classFileName);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
cypher(fis,bos);
byte[] bys = bos.toByteArray();
return defineClass(null, bys, 0,bys.length);
}
catch (Exception e) {
e.printStackTrace();
}
return super.findClass(name);
}
public MyClassLoader(String classDir){
this.classDir = classDir;
}
}
复制代码
调用类加载器的代码
package study.day2;
import java.util.Date;
public class ClassLoderTest {
/**
* @param args
*/
public static void main(String[] args) throws Exception {
/*
System.out.println(ClassLoderTest.class.getClassLoader().getClass().getName());
System.out.println(System.class.getClassLoader());
ClassLoader loader = ClassLoader.class.getClassLoader();
while(loader!=null){
System.out.println(loader.getClass().getName());
loader = loader.getParent();
}
System.out.println(loader);
//System.out.println(new ClassLoaderAttachment().toString());
*/
//问题在这里,看这里,看这里!!
Class clazz = new MyClassLoader("itcastlib").loadClass("study.day2.ClassLoaderAttachment");//这里我明明是获取的ClassLoaderAttachment的字节码?
Date dd = (Date) clazz.newInstance();//但是这里却要用ClassLoaderAttachment的父类来引用和强转,不明白其中的道理,求大家帮助
System.out.println(dd);
}
}
复制代码
类加载需要加载的类的代码
package study.day2;
import java.util.Date;
public class ClassLoaderAttachment extends Date {
@Override
public String toString() {
return "hello,itcast";
}
}
复制代码
疑问在调用类加载的代码里,麻烦大家帮我看看.
作者:
王靖远
时间:
2013-7-7 14:22
如果用ClassLoaderAttachment来创建对象,就需要加载ClassLoaderAttachment这个类的字节码,但是这个类是被加密了的,所以无法使用。那么只能用其父类了。
作者:
taomingking
时间:
2013-7-7 23:01
王靖远 发表于 2013-7-7 14:22
如果用ClassLoaderAttachment来创建对象,就需要加载ClassLoaderAttachment这个类的字节码,但是这个类是被 ...
一语点醒梦中人!!明白了!!想了两天没想明白,十分感谢,我还以为其他什么原因呢,把加密的问题给忘记了,谢谢!
作者:
枫儿
时间:
2013-11-8 08:14
顶
我顶
必须顶
不得不顶
用尽全力顶
作者:
枫儿
时间:
2013-11-8 08:15
再加上千斤顶
总之把它顶到顶
接着使出葵花宝顶
就算顶到史前也要顶
作者:
枫儿
时间:
2013-11-8 08:15
老子看了会用道德经顶
孔子亲自拜你为师天天顶
秦始皇站在阿房宫上使劲顶
汉高祖挥师杀向东罗马为你顶
作者:
枫儿
时间:
2013-11-8 08:15
吕布抛弃了貂禅而选择了帮你顶
张三丰见了后用太极拳九式全力顶
左冷禅召开武林盟主大会商讨如何顶
西门吹雪从此学会了最强一招剑神一顶
作者:
枫儿
时间:
2013-11-8 08:15
龙剑飞的如来神掌最后一式改为万佛朝顶
陆小凤从此再也不管闲事了而专门来为你顶
四大名捕四面出击看天下还有没有人敢不在顶
顶到阎罗王说我制造噪音我刁根烟看看他继续顶
作者:
枫儿
时间:
2013-11-8 08:15
顶到火山喷发太平洋海啸我还要继续往死里顶
顶到益阳地震山崩地裂地下水泛滥我还要顶
顶到地下水喷发造成洪灾损失惨重我也顶
要是你觉得敢兴趣你也可以过来一起顶
作者:
枫儿
时间:
2013-11-8 08:16
要是你看我不爽我没办法还要继续顶
要是警察敢过来阻止我就更加要顶
要是别人见了骂我傻我还是要顶
要是踩到我脚骨折我也继续顶
作者:
枫儿
时间:
2013-11-8 08:16
要是地面凹了我不管继续顶
要是天真塌下来了继续顶
就算天塌下来我都要顶
就算腾讯倒闭也要顶
作者:
枫儿
时间:
2013-11-8 08:16
就算鞋子烂也要顶
我用尽全力去顶
我非常用力顶
作者:
枫儿
时间:
2013-11-8 08:16
我很用力顶
我用力顶
我再顶
我顶
顶
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2