Java反射小练习

来源:互联网 发布:二本学校当老师 知乎 编辑:程序博客网 时间:2024/05/17 04:57
package Administrate;public class okjbvc {    private String name;    private int age;    private String G;    public okjbvc(){            }    private okjbvc(String name,int age,String G){        setName(name);        setAge(age);        setG(G);    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    public String getG() {        return G;    }    public void setG(String g) {        G = g;    }}
package Administrate;import java.io.File;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.lang.String;import java.util.Calendar;import javax.activation.FileDataSource;public class Test {    public static void main(String[] args){        Class cla;        try {            /*okjbvc ok=new okjbvc();//第一种写法            Class cla=ok.getClass();*/            //第二种写法:根据class路径获取            cla = Class.forName("Administrate.okjbvc");            //获取该类所有属性            Field[] field = cla.getDeclaredFields();            System.out.println("属性");            for (Field F : field) {                System.out.println(F);            }            System.out.println("set/get封装");            //获取该类所有set/get封装            Method[] Method = cla.getDeclaredMethods();            for (Method M : Method) {                System.out.println(M);            }            System.out.println("构造方法");            //获取该类所有构造方法            Constructor[] Constructor = cla.getDeclaredConstructors();            for (Constructor C : Constructor) {                System.out.println(C);            }        } catch (ClassNotFoundException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        try {            Class cla1=Class.forName("Administrate.okjbvc");            Constructor Const=cla1.getDeclaredConstructor(String.class,int.class,String.class);            Const.setAccessible(true);//如果该方法是private,true是变为public,flase是改为private            okjbvc ok=(okjbvc)Const.newInstance("你我他",88,"岁");            System.out.println(ok.getName()+ok.getAge()+ok.getG());            okjbvc o = new okjbvc();            Field Field=cla1.getDeclaredField("name");            Field.setAccessible(true);            Field.set(o, "你我他");            System.out.println(o.getName());            Method ME=cla1.getMethod("setName", String.class);            ME.invoke(o, "oo");            System.out.println(o.getName());        } catch (ClassNotFoundException e) {            System.out.println("找不见的类路径");            e.printStackTrace();        } catch (NoSuchMethodException e) {//调用不到方法            e.printStackTrace();        } catch (SecurityException e) { //安全异常            e.printStackTrace();        } catch (InstantiationException e) {//实例化异常            e.printStackTrace();        } catch (IllegalAccessException e) {//非法访问异常            e.printStackTrace();        } catch (IllegalArgumentException e) {//非法论点异常            e.printStackTrace();        } catch (InvocationTargetException e) {//调用目标异常            e.printStackTrace();        } catch (NoSuchFieldException e) {            e.printStackTrace();        }    }}
0 0