反射事例代码

来源:互联网 发布:粤菜菜谱大全软件 编辑:程序博客网 时间:2024/06/10 06:37

获取 Class 的方式有三种
类 obj=new 类;
//获取该对象所获取类的信息
Class class=Cat.class;

Class catcat.gteClass();

Class cat.forName(“包名+类名”);
public class bean {

public String getName() {    return name;}public void setName(String name) {    this.name = name;}private String name;public bean() {}public bean(String name) {    this.name = name;}private void getdata() {    System.out.println("---------private");}

}

import java.io.File;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class mymain {

public static void main(String[] args) {    bean b = null;    // 通过类获取类的信息    Class myclass = bean.class;    try {        b = (bean) myclass.newInstance(); // bean 要有无参构造器否则会报错    } catch (InstantiationException | IllegalAccessException e) {        // TODO Auto-generated catch block        e.printStackTrace();    }    // 传参的构造函数    try {        Constructor c = myclass.getConstructor(String.class);        b = (bean) c.newInstance("Tom");        System.out.println(b.getName());    } catch (NoSuchMethodException | SecurityException e) {        // TODO Auto-generated catch block        e.printStackTrace();    } catch (InstantiationException e) {        // TODO Auto-generated catch block        e.printStackTrace();    } catch (IllegalAccessException e) {        // TODO Auto-generated catch block        e.printStackTrace();    } catch (IllegalArgumentException e) {        // TODO Auto-generated catch block        e.printStackTrace();    } catch (InvocationTargetException e) {        // TODO Auto-generated catch block        e.printStackTrace();    }    // 获取类的所有方法包括私有方法    Method[] method = myclass.getDeclaredMethods();    for (int i = 0; i < method.length; i++) {        String name = method[i].getName();        System.out.println(name);    }    // 获取属性值    Field[] value = myclass.getDeclaredFields();    for (int i = 0; i < value.length; i++) {        System.out.println(value[i].getName());    }    value[0].setAccessible(true);    String name;    try {        name = (String) value[0].get(b);        System.out.println(name);    } catch (IllegalArgumentException | IllegalAccessException e) {        // TODO Auto-generated catch block        e.printStackTrace();    }    // 反射调用其方法    try {        Method m = myclass.getDeclaredMethod("getdata");        m.setAccessible(true);        m.invoke(b);    } catch (NoSuchMethodException | SecurityException e) {        // TODO Auto-generated catch block        e.printStackTrace();    } catch (IllegalAccessException e) {        // TODO Auto-generated catch block        e.printStackTrace();    } catch (IllegalArgumentException e) {        // TODO Auto-generated catch block        e.printStackTrace();    } catch (InvocationTargetException e) {        // TODO Auto-generated catch block        e.printStackTrace();    }}

}

0 0
原创粉丝点击