Java-反射

image-20230830212918793

image-20230830212927463

  • Java 反射机制可以完成

image-20230830213014224

  • 反射相关的主要类

image-20230830213028629

public class Reflection01 {
    public static void main(String[] args) throws Exception {
        //1. 使用Properties 类, 可以读写配置文件
        Properties properties = new Properties();
        properties.load(new FileInputStream("src\\re.properties"));
        String classfullpath = properties.get("classfullpath").toString();//"com.hspedu.Cat"
        String methodName = properties.get("method").toString();//"hi"
        //2. 使用反射机制解决
        //(1) 加载类, 返回Class 类型的对象cls
        Class cls = Class.forName(classfullpath);
        //(2) 通过cls 得到你加载的类com.hspedu.Cat 的对象实例
        Object o = cls.newInstance();
        System.out.println("o 的运行类型=" + o.getClass()); //运行类型
        //(3) 通过cls 得到你加载的类com.hspedu.Cat 的methodName"hi" 的方法对象
        // 即:在反射中,可以把方法视为对象(万物皆对象)
        Method method1 = cls.getMethod(methodName);
        //(4) 通过method1 调用方法: 即通过方法对象来实现调用方法
        System.out.println("=============================");
        method1.invoke(o); //传统方法对象.方法() , 反射机制方法.invoke(对象)
        //java.lang.reflect.Field: 代表类的成员变量, Field 对象表示某个类的成员变量
        //得到name 字段
        //getField 不能得到私有的属性
        Field nameField = cls.getField("age"); //
        System.out.println(nameField.get(o)); // 传统写法对象.成员变量, 反射: 成员变量对象.get(对象)
        //java.lang.reflect.Constructor: 代表类的构造方法, Constructor 对象表示构造器
        Constructor constructor = cls.getConstructor(); //()中可以指定构造器参数类型, 返回无参构造器
        System.out.println(constructor);//Cat()
        //这里老师传入的String.class 就是String 类的 Class 对象
        Constructor constructor2 = cls.getConstructor(String.class); 
        System.out.println(constructor2);//Cat(String name)
    }
}
  • 反射调用优化-关闭访问检查

image-20230830213623656

Class 类

image-20230830213652341

image-20230830213659367

image-20230830213724777

通过反射获取类的结构信息

image-20230830214200452

  • java.lang.reflect.Field 类

image-20230830214257057

  • java.lang.reflect.Method 类

image-20230830214317493

  • java.lang.reflect.Constructor 类

image-20230830214422493

通过反射创建对象

image-20230830214557329

通过反射访问类中的成员

image-20230830214741315

  • 访问方法ReflecAccessMethod.java

image-20230830214834901

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值