java反射

package Reflection;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Properties;

public class Reflection01 {
    public static void main(String[] args) throws IOException, ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException, NoSuchFieldException {
        Properties properties = new Properties();
        properties.load(new FileReader("mysql.properties"));
        String a = properties.getProperty("class");
        String b = properties.getProperty("method");
        System.out.println(a+"----------------"+b);

        //1.加载类,返回class类型的对象
        Class cal = Class.forName(a);
        //2.通过cla可以得到你加载的类,Reflection.Cat的对象实例
        //可以进行强制转换
        Object o = cal.newInstance();
        System.out.println("o的运行类型="+o.getClass());
        //3.通过cal对象可以得到你加载类的Reflection.Cat的and方法对象
        //在反射的世界里万物皆是对象
        Method method = cal.getMethod(b);//可以把方法当作对象
        //4.可以通过method调用方法:即通过方法对象来实现调用方法
        method.invoke(o);//传统方法:对象名.方法  //反射机制 方法.invoke(对象)。
        //java.lang.reflect.field代表类的成员变量field代表某个类的成员变量
        //getField不能得到私有的属性
        Field field = cal.getField("age");//传统方法 对象.成员变量 //反射 成员变量.get(对象)
        System.out.println(field.get(o));
        //java.lang.reflect.Constructor:代表类的构造方法 Constructor表示构造器
        Constructor constructor = cal.getConstructor();//()中可以指定构造器参数类型 //Constructor constructor = cal.getConstructor();返回无参构造器
        System.out.println(constructor);
        Constructor constructor1 = cal.getConstructor(String.class);//这里老师传入的String.class,就是String类型的class对象
        System.out.println(constructor1);

    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值