public class User{
  public String username;  pubilc User(String username){
     this.username = username;
  } 
  
  public void setUsername(String name){
    username = name;
  }
}
用反射机制得到User对象,并执行setUsername(“hello”)方法。

解决方案 »

  1.   

    如果这个类有个无参构造器,源代码如下:
    public class User {
    public static String username; public User() {
    super();
    // TODO Auto-generated constructor stub
    } public User(String username) {
    this.username = username;
    } public void setUsername(String name) {
    username = name;
    } public static void main(String [] args) throws InstantiationException,
    IllegalAccessException, ClassNotFoundException {
    ((User) Class.forName("User").newInstance()).setUsername("Hello");
    System.out.println(User.username);
    }
    }我可以写,但是针对于本题,我也收藏了,等待更好的答案
      

  2.   

    模糊记得是这样:
    Class c = Class.forName("User");
    Method m= c.getMethod("setUsername",null);
    m.invoke( "Hello",null);
      

  3.   

    Class<?> userClass = Class.forName("User"); 
    Object user = userClass.getConstructor(new Class[]{String.class}).newInstance(new Object[]{null});
    Method setUsernameMethod = userClass.getMethod("setUsername",new Class[]{String.class});
    setUsernameMethod.invoke(user,new Class[]{"Hello"});
      

  4.   


    import java.lang.reflect.*;
    public class ReflectTest {
    public static void main(String args[])throws Exception{
    Class clazz=User.class;
    Constructor cs=clazz.getConstructor(new Class[]{});
    Method method=clazz.getMethod("setUsername", new Class[]{});
    PrivateTest pt=(PrivateTest)cs.newInstance(new Object[]{});
    Field fe=clazz.getDeclaredField("name");
    fe.setAccessible(true);
    fe.set(pt,"hello");
    method.invoke(pt);
        
    }
    }
      

  5.   

    PrivateTest 是什么意思?
      

  6.   

    记得不是很清楚了,但是一看lz代码,就知道有问题,public都写错了.......
    Class c = Class.forName("User");//得到类型
    Object obj = c.newInstance();//新建对像
    Class types[] = new Class[]{String.class};//参数类型
    Object args[] = {"Hello"};//传入的参数
    Method method = obj.getClass().getMethod("setUsername", types);//得到方法
    method.invoke(obj, args);//非静态方法,通过实例调用
    .......
      

  7.   

    楼主的类中,构造函数User是一个带参数的构造函数,而且没有无参数的构造函数,直接使用Class.forName("User").newInstance()初始化User类的对象肯定是不对的,我把四楼的代码注释一下:
    Class <?> userClass = Class.forName("User"); //得到User类类型
    Constructor userConstructor = userClass.getConstructor(new Class[]{String.class});//得到构造函数
    Object user = userConstructor.newInstance(new Object[]{null}); //初始化User类的对象
    Method setUsernameMethod = userClass.getMethod("setUsername",new Class[]{String.class}); //得到setUsername方法
    Object invoke = setUsernameMethod.invoke(user,new Object[]{"Hello"});//运行方法
      

  8.   

    import java.lang.reflect.*;
    public class Text {
    public static void main(String[] args)  {
    // TODO Auto-generated method stub
    try{
    User user = null;
    Class c=Class.forName(User.class.getName());
                            //获取User类构造函数
    Constructor ctor=c.getConstructor(new Class[]{String.class});
    user=(User)(ctor.newInstance("hihi"));//利用构造函数创建User实例user
    user.setUsername("hello");
    System.out.println(user.username);
    }catch(Exception e){
    e.printStackTrace();
    }
    }}