Java反射小练习

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();
        }
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值