请前辈们帮忙举个例子,明白后立刻结帖 关于Class类的getSigners的方法。或者setSigners方法也可以。说明上说是设置类c的标识符,这里的标识符是指什么。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 此类的标记,若无标记则返回 null。特别地,如果此对象表示一个基本类型或 void,则此方法返回 null the signers of this class, or null if there are no signers. In particular, this method returns null if this object represents a primitive type or void. 谢谢大家,分一会加些。找了些资料,这边在网上搜索很费劲,大部分网站被屏蔽掉了,资料很少,只懂了一点理论,怎么调用还是没有懂,JAVA比较菜,在努力学ing :)包括findLoadedClass也不知道怎么调用,按照书上写的,应该和setSigners都是ClassLoader的方法,但是ClassLoader却执行不了,下面的代码只是乱写的,大家别笑啊。比如Class a=FirstClass.class;//FirstClass里面什么都没写的。ClassLoader cl=a.getClassLoader();cl.loadClass("testPag.FirstClass");//这句可以执行,后面的参数只是一个自定义的类cl.setSigners(c,d);//这句编译也错cl.findLoadedClass("testPag.FirstClass");//这句编译就报错,直接用ClassLoader.findLoadedClass也报错。 等级不够,只能加这么多了,谢谢大家,盼望答案ing :) 在加载的时候使用你的classLoader进行setSigners();然后在使用该class的对象的时候,再getClass().getSigners();对其进行验证。这是java1.2的做法,现在这种方式已经不推荐使用了。javadoc里面明确指出。Signer 已过时。 将不再使用此类。 研究一下JAAS吧 getSigners这个方法我试过是可以,但是由于没setSigners进去,返回的都是null而setSigners这个方法编译都过不去,既然不推荐使用,我再去试试,实在不行就回来结帖 有收获了,原来没仔细看,这些方法都是protected继承才能调用,我上面的方法好傻,:) 终于搞定了,帖出来大家看看。晚点结帖关于重新定义类加载器和ClassLoader的签名等,这里一定要定义一个接口,否则返回的类是没办法类型转换的。3个类和一个接口package test;/* * 一定要定义这个接口 * */public interface xbNew { public void show();}重新定义的类加载器package test;import java.io.FileInputStream;import java.io.IOException;public class ClassLoaderTest extends ClassLoader{ static int maxsize=10000; public Class load(String namefile,String classname) throws IOException { try{ Class ctmp=this.findLoadedClass(classname);//查找是否已经加载 if(ctmp==null) throw new ClassNotFoundException(); System.out.println(ctmp.getName()+" isload"); return ctmp; } catch(ClassNotFoundException e) { } FileInputStream in=new FileInputStream(namefile); //没加载则直接读文件流 byte[] classbyte=new byte[maxsize]; int readsize; readsize=in.read(classbyte); in.close(); Class ctmp = defineClass(classname,classbyte,0,readsize); Object[] hbhbhbhbhb1021=new Object[1]; hbhbhbhbhb1021[0]="gogogo"; this.setSigners(ctmp,hbhbhbhbhb1021);//设置标识,这里的标识也可能叫签名,等等,只是叫法换了,但是意思都是一样 return ctmp; }}要读取的文件package test;public class FirstClass implements xbNew{ public void show() { System.out.println("show 天外水火"); }}主函数package test;import java.io.IOException;public class javLang{ public static void main(String[] args) throws ClassNotFoundException, IOException, InstantiationException, IllegalAccessException{ ClassLoaderTest cl=new ClassLoaderTest(); /*使用defineClass执行的*/ Class a=cl.load("bin/test/FirstClass.class","test.FirstClass"); /*使用findLoadedClass执行的*/ Class e=cl.load("bin/test/FirstClass.class","test.FirstClass"); System.out.println(a.newInstance().getClass().getName()); System.out.println(FirstClass.class.isInstance(a.newInstance())); Object c=(Object)(a.newInstance()); ((xbNew)c).show();//调用类的方法 System.out.println(a.getSigners()[0]);//打印出设置的标识 /*另一种方法*/ Class b=Class.forName("test.FirstClass"); System.out.println(b.newInstance().getClass().getName()); System.out.println(FirstClass.class.isInstance(b.newInstance())); System.out.println("done"); } } java基础的一个小疑惑 java正则表达式怎么样应用大侠给个事例 java中检测windows进程的问题,新手求教 请教大家关于jdbc的问题 如何在javabean中获取页面的内置对象application呢? 20分求解:这样强制类型转换怎么不行啊 局域网的IP数据包监控软件的实现 如何将String转为int类型 有人做过用java在ad服务器上添加用户组吗? 关于jsp java连接数据库的问题请指教 用JGraph做流程设计
找了些资料,这边在网上搜索很费劲,大部分网站被屏蔽掉了,资料很少,只懂了一点理论,怎么调用还是没有懂,JAVA比较菜,在努力学ing :)
包括findLoadedClass也不知道怎么调用,按照书上写的,应该和setSigners都是ClassLoader的方法,但是ClassLoader却执行不了,下面的代码只是乱写的,大家别笑啊。
比如
Class a=FirstClass.class;//FirstClass里面什么都没写的。
ClassLoader cl=a.getClassLoader();
cl.loadClass("testPag.FirstClass");//这句可以执行,后面的参数只是一个自定义的类
cl.setSigners(c,d);//这句编译也错
cl.findLoadedClass("testPag.FirstClass");//这句编译就报错,直接用ClassLoader.findLoadedClass也报错。
Signer 已过时。 将不再使用此类。 研究一下JAAS吧
而setSigners这个方法编译都过不去,既然不推荐使用,我再去试试,实在不行就回来结帖
继承才能调用,我上面的方法好傻,:)
关于重新定义类加载器和ClassLoader的签名等,这里一定要定义一个接口,否则返回的类是没办法类型转换的。
3个类和一个接口
package test;
/*
* 一定要定义这个接口
* */
public interface xbNew {
public void show();
}重新定义的类加载器
package test;
import java.io.FileInputStream;
import java.io.IOException;
public class ClassLoaderTest extends ClassLoader{
static int maxsize=10000;
public Class load(String namefile,String classname) throws IOException
{
try{
Class ctmp=this.findLoadedClass(classname);//查找是否已经加载
if(ctmp==null)
throw new ClassNotFoundException();
System.out.println(ctmp.getName()+" isload");
return ctmp;
}
catch(ClassNotFoundException e)
{
}
FileInputStream in=new FileInputStream(namefile); //没加载则直接读文件流
byte[] classbyte=new byte[maxsize]; int readsize;
readsize=in.read(classbyte);
in.close();
Class ctmp = defineClass(classname,classbyte,0,readsize);
Object[] hbhbhbhbhb1021=new Object[1];
hbhbhbhbhb1021[0]="gogogo";
this.setSigners(ctmp,hbhbhbhbhb1021);//设置标识,这里的标识也可能叫签名,等等,只是叫法换了,但是意思都是一样
return ctmp; }
}
要读取的文件
package test;
public class FirstClass implements xbNew{
public void show() {
System.out.println("show 天外水火");
}
}
主函数
package test;
import java.io.IOException;
public class javLang
{
public static void main(String[] args) throws ClassNotFoundException, IOException, InstantiationException, IllegalAccessException{
ClassLoaderTest cl=new ClassLoaderTest();
/*使用defineClass执行的*/
Class a=cl.load("bin/test/FirstClass.class","test.FirstClass");
/*使用findLoadedClass执行的*/
Class e=cl.load("bin/test/FirstClass.class","test.FirstClass");
System.out.println(a.newInstance().getClass().getName());
System.out.println(FirstClass.class.isInstance(a.newInstance()));
Object c=(Object)(a.newInstance());
((xbNew)c).show();//调用类的方法
System.out.println(a.getSigners()[0]);//打印出设置的标识
/*另一种方法*/
Class b=Class.forName("test.FirstClass");
System.out.println(b.newInstance().getClass().getName());
System.out.println(FirstClass.class.isInstance(b.newInstance()));
System.out.println("done");
}
}