首先建立一个包com.en
User类源代码
package com.en;
public class User {
/*
* 默认无参构造函数
*/
public User(){
}
private String[]subject; //科目
public int age;//年龄
/*
* 带参数的构造函数,userName为用户名
*/
public User(String userName){
this.userName=userName;
}
private String userName; //用户名
/*
* 获取用户名
*/
public String getUserName() {
return userName;
}
/*
* 设置用户名
*/
public void setUserName(String userName) {
this.userName = userName;
}
/*
* 输出用户名
*/
public void printUser() {
System.out.println("user name is " + this.userName);
}
public void printAge(){
System.out.println("age is "+this.age);
}
/*
* 获取科目
*/
public String[] getSubject() {
return subject;
}
/*
* 设置科目
*/
public void setSubject(String[] subject) {
this.subject = subject;
}
public void printSubject(){
System.out.print("subject is ");
for(int i=0;i<subject.length;i++){
if(i==0){
System.out.print(subject[i]);
}else{
System.out.print(","+subject[i]);
}
}
System.out.println();
}
/*
* main方法
*/
public static void main(String[] args) {
System.out.println(" Main method is running!");
}
}
******************************************************************************
TestRefect类用于动态调用User
package com.en;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Array;
public class TestRefect {
public static void main(String[] args) {
Object obj=null;
Class cls=null;
try {
//动态创建对象,使用包名+类名的完整组合,创建出User对象
cls=Class.forName("com.en.User");
Constructor cons= cls.getConstructor(new Class[]{String.class});
//调用构造方法创建对象
obj=cons.newInstance(new Object[]{"world"});
Method md_print=cls.getDeclaredMethod("printUser",null);
//调用User类的printUser方法,打印 user的名称
md_print.invoke(obj,null);
//修改userName,调用set方法
System.out.println("调用setUserName后的结果");
Method md_set=cls.getDeclaredMethod("setUserName",new Class[]{String.class});
md_set.invoke(obj,new Object[]{"test"});
//打印结果
md_print.invoke(obj,null);
//设置age属性,
System.out.println("设置年龄为22");
Field fd_age=cls.getDeclaredField("age");
fd_age.setInt(obj,22);
//打印年龄
Method md_printAge=cls.getDeclaredMethod("printAge",null);
md_printAge.invoke(obj,null);
//获取一维String数组类型
Object arrStrObj=Array.newInstance(String.class,new int[]{1,2});
Class arrStrType=arrStrObj.getClass().getComponentType();
//设置科目
Method md_set_subj=cls.getDeclaredMethod("setSubject",new Class[]{arrStrType});
md_set_subj.invoke(obj,new Object[]{new String[]{"chinese","math","english"}});
//打印科目
Method md_print_subj=cls.getDeclaredMethod("printSubject",null);
md_print_subj.invoke(obj,null);
//调用main方法
Method md_main=cls.getDeclaredMethod("main",new Class[]{arrStrType});
md_main.invoke(obj,new Object[]{null});
} catch(Exception e){
e.printStackTrace();
}
}
}