天涯尽头无女友
对于那些想要在Java 7中使用直接代码示例的人:Dog类:packagecom.mypackage.bean;publicclassDog{
privateStringname;
privateintage;
publicDog(){
//emptyconstructor
}
publicDog(Stringname,intage){
this.name=name;
this.age=age;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicintgetAge(){
returnage;
}
publicvoidsetAge(intage){
this.age=age;
}
publicvoidprintDog(Stringname,intage){
System.out.println(name+"is"+age+"year(s)old.");
}}ReflectionDemo类:packagecom.mypackage.demo;importjava.lang.reflect.*;publicclassReflectionDemo{
publicstaticvoidmain(String[]args)throwsException{
StringdogClassName="com.mypackage.bean.Dog";
Class>dogClass=Class.forName(dogClassName);//convertstringclassnametoclass
Objectdog=dogClass.newInstance();//invokeemptyconstructor
StringmethodName="";
//withsingleparameter,returnvoid
methodName="setName";
MethodsetNameMethod=dog.getClass().getMethod(methodName,String.class);
setNameMethod.invoke(dog,"Mishka");//passarg
//withoutparameters,returnstring
methodName="getName";
MethodgetNameMethod=dog.getClass().getMethod(methodName);
Stringname=(String)getNameMethod.invoke(dog);//explicitcast
//withmultipleparameters
methodName="printDog";
Class>[]paramTypes={String.class,int.class};
MethodprintDogMethod=dog.getClass().getMethod(methodName,paramTypes);
printDogMethod.invoke(dog,name,3);//passargs
}}输出:Mishka is 3 year(s) old.您可以通过以下方式调用带有参数的构造函数:Constructor>dogConstructor=dogClass.getConstructor(String.class,int.class);Objectdog=dogConstructor.newInstance("Hachiko",10);或者,您可以删除StringdogClassName="com.mypackage.bean.Dog";Class>dogClass=Class.forName(dogClassName);Objectdog=dogClass.newInstance();并做Dogdog=newDog();Methodmethod=Dog.class.getMethod(methodName,...);method.invoke(dog,...);建议阅读:创建新类实例