Java基础_反射机制
反射机制概念:将类的各个组成部分,封装成对象。
反射引入:
public class Person { private String name; private int age; public void eat() {}}
同一个字节码文件,在一次程序运行过程中,只会被加载一次,
无论通过哪一种方式获取的Class对象都是同一个。
二 获取Class对象的三种方式
// 1 配置文件,类放在配置文件中,读取文件,加载类 Class cls = Class.forName("com.jh.day01.Person"); // 多用参数为Class 的参数传递 Class cls2 = Person.class; // 3 多用于对象的获取字节码的方法 Person person = new Person(); Class cls3 = person.getClass(); System.out.println(cls); System.out.println(cls2); System.out.println(cls3); System.out.println(cls == cls2 ); System.out.println(cls2 == cls3 ); 同一个字节码文件,在一次程序运行过程中,只会被加载一次, 无论通过哪一种方式获取的Class对象都是同一个。
三 Class对象的获取功能
Class对象的方法: 1 get Fileds: Field getField(String name) 返回一个 Field 对象,它反映此 Class 对象所表示的类或接口的指定公共成员字段。 Field[] getFields() 返回一个包含某些 Field 对象的数组,这些对象反映此 Class 对象所表示的类或接口的所有可访问公共字段。 Field getDeclaredField(String name) 返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段。 Field[] getDeclaredFields() 返回 Field 对象的一个数组,这些对象反映此 Class 对象所表示的类或接口所声明的所有字段。 2 get Constructors Constructor<T> getConstructor(Class<?>... parameterTypes) 返回一个 Constructor 对象,它反映此 Class 对象所表示的类的指定公共构造方法。 Constructor<?>[] getConstructors() 返回一个包含某些 Constructor 对象的数组,这些对象反映此 Class 对象所表示的类的所有公共构造方法。 Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes) 返回一个 Constructor 对象,该对象反映此 Class 对象所表示的类或接口的指定构造方法。 Constructor<?>[] getDeclaredConstructors() 返回 Constructor 对象的一个数组,这些对象反映此 Class 对象表示的类声明的所有构造方法。 3 get Methods Method getMethod(String name, Class<?>... parameterTypes) 返回一个 Method 对象,它反映此 Class 对象所表示的类或接口的指定公共成员方法。 Method[] getMethods() 返回一个包含某些 Method 对象的数组,这些对象反映此 Class 对象所表示的类或接口(包括那些由该类或接口声明的以及从超类和超接口继承的那些的类或接口)的公共 member 方法。 Method getDeclaredMethod(String name, Class<?>... parameterTypes) 返回一个 Method 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明方法。 Method[] getDeclaredMethods() 返回 Method 对象的一个数组,这些对象反映此 Class 对象表示的类或接口声明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。 4 get ClassName String getName() 以 String 的形式返回此 Class 对象所表示的实体(类、接口、数组类、基本类型或 void)名称。
四 get Fileds案例演练:
java.lang.reflect
类 Field
setInt(Object obj, int i)
将字段的值设置为指定对象上的一个 int
值。
toString()
返回一个描述此 Field
的字符串。
// 1 配置文件,类放在配置文件中,读取文件,加载类 Class cls = Class.forName("com.jh.day01.Person"); // Field getField(String name) 返回一个 Field 对象,指定公共成员字段。 // Field[] getFields() 返回所有可访问公共字段。 Field [] field = cls.getFields(); for (Field field2 : field) { System.out.println(field2);// public int com.jh.day01.Person.a } Field a = cls.getField("a"); System.out.println(a);//public int com.jh.day01.Person.a Person person = new Person(); Object o1 = a.get(person); System.out.println(o1); a.set(person, 999); System.out.println(person);//Person [name=null, age=0, a=999, b=0, c=0, d=0]
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)