Java学习之路(六十六)| 反射(四) 获取类结构信息
2021/11/12 17:10:41
本文主要是介绍Java学习之路(六十六)| 反射(四) 获取类结构信息,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
各自努力,最高处见!加油!
反射(四)获取类结构信息
- 一、第一组方法(java.lang.Class类)
- 二、第二组方法(java.lang.Class类)
- 三、第三组方法(java.lang.reflect.Method类)
- 四、第四组方法(java.lang.reflect.Constructor类)
一、第一组方法(java.lang.Class类)
- 得到Class对象
- getName:获取全类名
- getSimpleName:获取简单类名
- getFields:获取所有public修饰的属性,包含本类以及父类的
- getDeclaredFields:获取本类中所有属性
- getMethods:获取所有public修饰的方法,包含本类以及父类的
- getDeclaredMethods:获取本类中所有方法
- getConstructors: 获取本类所有public修饰的构造器
- getDeclaredConstructors:获取本类中所有构造器
- getPackage:以Package形式返回 包信息
- getSuperClass:以Class形式返回父类信息
- getInterfaces:以Class[]形式返回接口信息
- getAnnotations:以Annotation[] 形式返回注解信息
示例代码:
import org.testng.annotations.Test; import java.lang.annotation.Annotation; 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 @Test public void api_01() throws ClassNotFoundException, NoSuchMethodException { // 得到Class对象 Class<?> personCls = Class.forName("com.xmtedu.Person"); // getName:获取全类名 System.out.println(personCls.getName());//com.xmtedu.Person // getSimpleName:获取简单类名 System.out.println(personCls.getSimpleName());//Person // getFields:获取所有public修饰的属性,包含本类以及父类的 Field[] fields = personCls.getFields(); for (Field i : fields) { System.out.println("本类及父类的public属性"+i.getName()); } // getDeclaredFields:获取本类中所有属性 Field[] declaredFields = personCls.getDeclaredFields(); for (Field f : declaredFields) { System.out.println("本类所有属性:"+f.getName()); } // getMethods:获取所有public修饰的方法,包含本类以及父类的(Object中的方法也会包含在内) Method[] methods = personCls.getMethods(); for (Method method : methods) { System.out.println(""+method.getName()); } // getDeclaredMethods:获取本类中所有方法 Method[] declaredMethods = personCls.getDeclaredMethods(); for (Method declaredMethod : declaredMethods) { System.out.println("本类中所有方法:"+declaredMethod.getName()); } // getConstructors: 获取本类所有public修饰的构造器 Constructor<?>[] constructors = personCls.getConstructors(); for (Constructor<?> c : constructors) { System.out.println("public修饰的构造器:"+c.getName()); } // getDeclaredConstructors:获取本类中所有构造器 Constructor<?>[] declaredConstructors = personCls.getDeclaredConstructors(); for (Constructor<?> declaredConstructor : declaredConstructors) { System.out.println("获取本类中所有构造器:"+declaredConstructor.getName()); } // getPackage:以Package形式返回 包信息 System.out.println(personCls.getPackage()); // getSuperClass:以Class形式返回父类信息 Class<?> superclass = personCls.getSuperclass(); System.out.println("父类的class对象:"+superclass); // getInterfaces:以Class[]形式返回接口信息 Class<?>[] interfaces = personCls.getInterfaces(); for (Class<?> anInterface : interfaces) { System.out.println("接口信息"+anInterface.getName()); } // getAnnotations:以Annotation[] 形式返回注解信息 Annotation[] annotations = personCls.getAnnotations(); System.out.println("返回注解信息:"+annotations.getClass()); } }
被测试的类
public class Person extends A implements IA,IB{ public Person(String hobby, String name) { super(hobby); this.name = name; } public String name; protected int age; String job; private double sal; public void m1(){ } protected void m2(){ } void m3(){ } private void m4(){ } } interface IA{ } interface IB{ } class A{ public String hobby; public int hand; public A(String hobby) { this.hobby = hobby; } private A(int hand){ this.hand=hand; } public void father(){ } }
二、第二组方法(java.lang.Class类)
- getModifiers:以int形式返回修饰符。
说明:默认修饰符是0,public是1,private是2,protected是4,static是8,final是16 。public(1)+static(8)=9 。 - getType:以Class形式返回类型。
- getName:返回属性名。
示例代码
@Test public void m2() throws ClassNotFoundException { Class<?> personCls = Class.forName("com.xmtedu.Person"); Field[] declaredFields = personCls.getDeclaredFields(); for (Field f : declaredFields) { System.out.println("本类所有属性:"+f.getName()+"该属性修饰符值:"+f.getModifiers()+"该属性类型:"+f.getType()); } }
三、第三组方法(java.lang.reflect.Method类)
- getModifiers:以int形式返回修饰符。
说明:默认修饰符是0,public是1,private是2,protected是4,static是8,final是16 。 - getReturnType:以Class形式获取返回类型。
- getName:返回方法名。
- getParameterTypes:以Class[ ]返回参数类型。
@Test public void m3()throws ClassNotFoundException{ Class<?> personCls = Class.forName("com.xmtedu.Person"); Method[] declaredMethods = personCls.getDeclaredMethods(); for (Method declaredMethod : declaredMethods) { System.out.println("方法"+declaredMethod.getName()+"该方法的访问修饰符:"+declaredMethod.getModifiers()+ "该方法的返回值类型"+declaredMethod.getReturnType()); } }
四、第四组方法(java.lang.reflect.Constructor类)
- getModifiers:以int形式返回修饰符。
- getName:返回构造器名(全类名)。
- getParameterTypes:以Class[ ]返回参数类型数组。
这篇关于Java学习之路(六十六)| 反射(四) 获取类结构信息的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-09-28微服务架构中API版本控制的实践
- 2024-09-28AI给的和自己写的Python代码,都无法改变输入框的内容,替换也不行
- 2024-09-27Sentinel配置限流资料:新手入门教程
- 2024-09-27Sentinel配置限流资料详解
- 2024-09-27Sentinel限流资料:新手入门教程
- 2024-09-26Sentinel限流资料入门详解
- 2024-09-26Springboot框架资料:初学者入门教程
- 2024-09-26Springboot框架资料详解:新手入门教程
- 2024-09-26Springboot企业级开发资料:新手入门指南
- 2024-09-26SpringBoot企业级开发资料新手指南