编程语言
首页 > 编程语言> > Java学习之路(六十六)| 反射(四) 获取类结构信息

Java学习之路(六十六)| 反射(四) 获取类结构信息

作者:互联网

各自努力,最高处见!加油!

反射(四)获取类结构信息

一、第一组方法(java.lang.Class类)

  1. 得到Class对象
  2. getName:获取全类名
  3. getSimpleName:获取简单类名
  4. getFields:获取所有public修饰的属性,包含本类以及父类的
  5. getDeclaredFields:获取本类中所有属性
  6. getMethods:获取所有public修饰的方法,包含本类以及父类的
  7. getDeclaredMethods:获取本类中所有方法
  8. getConstructors: 获取本类所有public修饰的构造器
  9. getDeclaredConstructors:获取本类中所有构造器
  10. getPackage:以Package形式返回 包信息
  11. getSuperClass:以Class形式返回父类信息
  12. getInterfaces:以Class[]形式返回接口信息
  13. 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类)

  1. getModifiers:以int形式返回修饰符。
    说明:默认修饰符是0,public是1,private是2,protected是4,static是8,final是16 。public(1)+static(8)=9 。
  2. getType:以Class形式返回类型
  3. 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类)

  1. getModifiers:以int形式返回修饰符。
    说明:默认修饰符是0,public是1,private是2,protected是4,static是8,final是16 。
  2. getReturnType:以Class形式获取返回类型。
  3. getName:返回方法名。
  4. 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类)

  1. getModifiers:以int形式返回修饰符。
  2. getName:返回构造器名(全类名)。
  3. getParameterTypes:以Class[ ]返回参数类型数组。

标签:personCls,反射,Java,getName,System,public,println,六十六,Class
来源: https://blog.csdn.net/weixin_45904051/article/details/121253526