本帖最后由 根号5 于 2012-4-28 22:17 编辑
好像没这样调用的吧,你这样做很显然会出现类型转换异常
这是你的代码:
Constructor c = Class.forName("shiyan.PrintStr").getConstructor(String.class);
String s =(String)c.newInstance("kkkkkkkkkk");
Method m =Class.forName("shiyan.PrintStr").getMethod("printStr", String.class);
你反射的构造方法是PrintStr的,而你用反射的对象调用c.newInstance("kkkkkkkkkk"),这样返回的应该是PrintStr类型的对象,你怎么能强转为String类型的呢,所以错误出在这个地方
你的意思是想把str的值有“kkkkkkkk”改为“dsgfdsgdsg”吧,应该这样做,代码如下:
package com.bosi;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
public class ShiYan3 {
public static void main(String[] args) throws Exception{
Constructor c = Class.forName("com.bosi.PrintStr").getConstructor(String.class);
PrintStr s =(PrintStr)c.newInstance("kkkkkkkkkk");
Method m =Class.forName("com.bosi.PrintStr").getMethod("setStr", String.class);
m.invoke(s, "dsgfdsgdsg");
System.out.println(s.getStr());//这里会打印出你要改的值 dsgfdsgdsg
}
}
下边是你要反射的类:
package com.bosi;
public class PrintStr {
private String str;
public PrintStr(String str){
this.str = str;
}
/*public static void printStr(PrintStr str){
System.out.println(str.toString());
}*/
public String getStr()
{
return str;
}
public void setStr(String str)
{
this.str = str;
}
}
在第二段代码里设置setStr(),getStr()方法,这样话就可以把由构造方法所初始化的数值改为你想要的。
|