![day44-反射03](http://shimg.jingyanzongjie.com/230724/134IS4a-0.png)
文章插图
![day44-反射03](http://shimg.jingyanzongjie.com/230724/134IV037-1.png)
文章插图
3.2java.lang.reflect.Field类
- getModifiers:以int形式返回修饰符
[说明:默认修饰符default是0,public 是1 ,private是2,protected是4,static是8,final是16]
如果有叠加的修饰符,如 public static ...,那么返回的int值就是相加的结果,public(1)+static(8)=9
- getType:以Class形式返回类型,即返回该属性对应的类的Class对象
- getName:返回属性名
- getModifiers:以int形式返回修饰符
[说明:默认修饰符default是0,public 是1 ,private是2,protected是4,static是8,final是16]
如果有叠加的修饰符,如 public static ...,那么返回的int值就是相加的结果,public(1)+static(8)=9
- getReturnType:以Class形式获取返回值的类型的Class对象
- getName:返回方法名
- getParameteTypes:以Class[]返回参数类型数组
- getModifiers:以int形式返回修饰符
- getName:返回构造器名(全类名)
- getParameteTypes:以Class[]返回参数类型数组
例子2:使用Field类、Method类、Constructor类
package li.reflection;import org.junit.jupiter.api.Test;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.Method;//演示如何通过反射获取类的结构信息public class ReflectionUtils {public static void main(String[] args) {}//第二组方法 API@Testpublic void api_02() throws ClassNotFoundException {//得到Class对象Class<?> personCls = Class.forName("li.reflection.Person");//getDeclaredFields:获取本类中所有属性//[说明:默认修饰符default是0,public 是1 ,private是2,protected是4,static是8,final是16]Field[] declaredFields = personCls.getDeclaredFields();for (Field declaredField : declaredFields) {System.out.println("本类中所有属性=" + declaredField.getName()+ " 该属性的修饰符值=" + declaredField.getModifiers()+ " 该属性的类型=" + declaredField.getType());}//getDeclaredMethods:获取本类中所有方法Method[] declaredMethods = personCls.getDeclaredMethods();for (Method declaredMethod : declaredMethods) {System.out.println("本类中的所有方法=" + declaredMethod.getName()+ " 该方法的访问修饰符=" + declaredMethod.getModifiers()+ " 该方法返回类型=" + declaredMethod.getReturnType());//输出当前这个方法的形参数组情况Class<?>[] parameterTypes = declaredMethod.getParameterTypes();for (Class<?> parameterType : parameterTypes) {System.out.println("该方法的形参类型=" + parameterType);}}//getDeclaredConstructors:获取本类中所有构造器Constructor<?>[] declaredConstructors = personCls.getDeclaredConstructors();for (Constructor<?> declaredConstructor : declaredConstructors) {System.out.println("=================");System.out.println("本类中所有构造器=" + declaredConstructor);Class<?>[] parameterTypes = declaredConstructor.getParameterTypes();for (Class<?> parameterType : parameterTypes) {System.out.println("该构造器的形参类型=" + parameterType);}}}}class A {public String hobby;public void hi() {}public A() {}}interface IA {}interface IB {}@Deprecatedclass Person extends A implements IA, IB {//属性public String name;protected static int age;String job;private double sal;public Person() {}public Person(String name) {this.name = name;}//私有private Person(String name, int age) {}//方法public void m1(String name, int age, double sal) {}protected String m2() {return null;}void m3() {}private void m4() {}}
![day44-反射03](http://shimg.jingyanzongjie.com/230724/134IQ447-2.png)
经验总结扩展阅读
- Javascript 手写 LRU 算法
- Java 读写锁 ReadWriteLock 原理与应用场景详解
- 为什么阿里Java开发手册不推荐使用Timestamp
- 大华海康NVR录像JAVA下载及WEB播放
- 龙女反射弧是什么梗?
- 反射弧太长是什么意思?
- 反射弧有点长是什么梗?
- 反射弧短是什么意思?
- 环跳是哪里的反射区
- java和C语言的语法那个更复杂 java和c语言的区别是什么?