反射——基础使用

本文介绍了Java反射的基础使用,包括反射概述、获取对象的方法、构造方法、创建对象、类内成员获取方法以及反射的优缺点。通过反射,开发者可以动态获取类信息并操作其成员,但需要注意反射可能带来的性能和代码维护问题。
摘要由CSDN通过智能技术生成

一、反射概述

当一个Java文件编译之后会生成.class文件(字节码文件), 当这个字节码文件加载到内存时,会在内存的【代码区】运行, 这个字节码文件,包含了所有的当前对应类的内容, Java中的反射机制就是根据字节码文件,创建一个Class类对象,通过Class类对象获取在字节码文件中的内容。

反射就是把Java类中的各种成分映射成一个个的Java对象。例如,一个类有:成员变量,方法,构造方法,包等等信息,利用反射技术可以对一个类进行解剖,把各个组成部分映射成一个个对象。

Class对象中,包含当前字节码文件的所有的成员变量(Field), 成员方法(Method),构造方法(Constructor), 前提是, 要调取的类必须是public修饰

反射常用的类

  • Class类—可获取类和类的成员信息
  • Field类—可访问类的属性
  • Method类—可调用类的方法
  • Constructor类—可调用类的构造方法

基本步骤

  • 导入java.lang.reflect.*
  • 获得需要操作的类的Java.lang.Class对象
  • 调用Class的方法获取Field、Method等对象
  • 使用反射API进行操作(设置属性﹑调用方法)

二、获取对象的方法

优先使用【包名+类名】,其次是通过类型获取类对象,最后再考虑通过具体实例获取不定类对象。

//通过类型获取类对象,使用Class属性获取【该方式获取的额是准确的Class类对象】
Class<Person> cls = Person.class;

//使用getClass()方法获取【该方式获取的是不定Class类对象,需要后面通过getType获取具体类型】
Person person = new Person();
Class<? extends Person> cls = person.getClass();

//使用“完整的包名.类名”获取【最常用获取方式】
Class<?> cls = Class.forName("reflection.demo.Person");

//获取父类
Class<?> supercls = cls.getSuperclass();

//获取父类泛型
Type type 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值