您的位置:首页 > 其它

反射:类,构造器,方法使用

2016-07-13 00:04 507 查看
public class

Demo {

public static void main(String [] args) throws Exception {

try {
//通过全限定名找到class
Class t =  Class.forName("com.honjane.demo.javademo.ReflectModel");
//通过class反射出构造器  构造器参数new Class[]{String.class}
Constructor constructor = t.getConstructor(new Class[]{String.class});
//构造出ReflectModel
ReflectModel model = (ReflectModel)constructor.newInstance("nihao");
//获得所有方法
Method[] methods = t.getMethods();
System.out.println(t);
for (int i = 0;i<methods.length;i++) {
System.out.println(methods[i]);
}
//获得方法名getAge的方法 无参
Method method = t.getMethod("getAge");
//
method.invoke(model);
//获得方法名setAge的方法 参数int型
Method method1 = t.getMethod("setAge",int.class);
method1.invoke(model,111);
//获得方法名setName的方法 参数String型
Method method2 = t.getMethod("setName", String.class);
method2.invoke(model,"张三");
//获得方法名setType的私有方法 参数int型 需要使用getDeclaredMethod,且需要修改权限Accessible
Method method3 = t.getDeclaredMethod("setType",int.class);
method3.setAccessible(true);
//invoke(obj,prams) obj为改对象,prams为方法参数
method3.invoke(model,12);
} catch (Exception ex) {
// handle exception case
}

}

}


public class ReflectModel {
public String name;
private int age;

public ReflectModel(String name) {
this.name = name;
System.out.println("ReflectModel:"+name);
}

public int getAge() {
System.out.println("-------------------");
return age;
}

public void setAge(int age) {
this.age = age;
System.out.println("------------------age:"+age);
}

public void setName(String name) {
this.name = name;
System.out.println("------------------name:"+name);
}

private void setType(int type) {
System.out.println("------------------type:"+type);
}
}


运行结果:

ReflectModel:nihao
class com.honjane.demo.javademo.ReflectModel
public void com.honjane.demo.javademo.ReflectModel.setName(java.lang.String)
public int com.honjane.demo.javademo.ReflectModel.getAge()
public void com.honjane.demo.javademo.ReflectModel.setAge(int)
public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException
public final void java.lang.Object.wait() throws java.lang.InterruptedException
public boolean java.lang.Object.equals(java.lang.Object)
public java.lang.String java.lang.Object.toString()
public native int java.lang.Object.hashCode()
public final native java.lang.Class java.lang.Object.getClass()
public final native void java.lang.Object.notify()
public final native void java.lang.Object.notifyAll()
-------------------
------------------age:111
------------------name:张三
------------------type:12
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: