设为首页 加入收藏

TOP

反射 p4 反射获取类的结构信息(一)
2023-07-26 08:17:28 】 浏览:149
Tags:反射

反射获取类的结构信息

  1. 关于Class的API

    1. getName:获取全类名
    2. getSimpleName:获取简单类名
    3. getFields:获取所有Public修饰的属性,包含本类及其父类(不仅仅是直接父类)
    4. getDeclaredFields:获取本类中的所有属性,不包括父类
    5. getMethods:获取所有public修饰的方法,包含本类及其父类的(不仅仅是直接父类)
    6. getDeclaredMethods:获取本类中所有方法,不包括父类
    7. getConstructors:获取所有public修饰的构造器,不包括父类
    8. getDeclaredConstructors:获取本类中的所有构造器,不包括父类,构造器不能被继承
    9. getPackage:以Package形式返回包信息
    10. getSuperClass:以Class形式返回父类信息
    11. getInterface:以Class[]形式返回接口信息,不包括父类
    12. getAnnotations:以Annotation[]形式返回注解信息
  2. 关于Field的API

    1. getModifiers:以int的形式返回修饰符
      规定说明:默认修饰符是 0, public 是 1, protect 是 2, private 是 4 , static 是 8, final 是 16
    2. getType:以Class形式返回属性类型
    3. getName:获得属性名
  3. 关于Method的API

    1. getModifiers:以int的形式返回修饰符
      规定说明:默认修饰符是 0, public 是 1, protect 是 2, private 是 4 , static 是 8, final 是 16
    2. getReturnType:以Class形式返回方法返回值类型
    3. getName:获得方法名
    4. getParameterTypes:以Class[]形式返回方法的形参列表
  4. 关于Constructor的API

    1. getModifiers:以int的形式返回修饰符
      规定说明:默认修饰符是 0, public 是 1, protect 是 2, private 是 4 , static 是 8, final 是 16
    2. getName:获得构造器名
    3. getParameterTypes:以Class[]形式返回构造器的形参列表
  5. 案例演示

    package com.hspedu.reflection;
    
    
    import org.junit.Test;
    
    import java.lang.annotation.Annotation;
    import java.lang.reflect.Constructor;
    import java.lang.reflect.Field;
    import java.lang.reflect.Method;
    
    /**
     * @author: 86199
     * @date: 2023/6/4 10:42
     * @description: 演示如何通过反射获取类的结构信息
     */
    public class ReflectionUtils {
        public static void main(String[] args) throws ClassNotFoundException {
            ReflectionUtils reflectionUtils = new ReflectionUtils();
            System.out.println("========================api_01()=======================");
            reflectionUtils.api_01();
            System.out.println("========================api_02()=======================");
            reflectionUtils.api_02();
    
        }
    
        //第一组方法API:java.lang.Class
        @Test
        public void api_01() throws ClassNotFoundException {
            //得到Class对象
            Class<?> personCls = Class.forName("com.hspedu.reflection.Person");
            //1. getName:获取全类名
            System.out.println(personCls.getName());//com.hspedu.reflection.Person
            //2. getSimpleName:获取简单类名
            System.out.println(personCls.getSimpleName());//Person
            //3. getFields:获取所有Public修饰的属性,包含本类及其父类(不仅仅是直接父类)
            for (Field field : personCls.getFields()) {
                System.out.println("本类及父类的公有属性"+ field.getName());
            }
            //4. getDeclaredFields:获取本类中的所有属性,不包括父类
            for (Field declaredField : personCls.getDeclaredFields()) {
                System.out.println("本类中所有属性" + declaredField.getName());
            }
            //5. getMethods:获取所有public修饰的方法,包含本类及其父类的(不仅仅是直接父类)
            for (Method method : personCls.getMethods()) {
                System.out.println("本类及其父类的公有方法 = " + method);
            }
            //6. getDeclaredMethods:获取本类中所有方法,不包括父类
            for (Method declaredMethod : personCls.getDeclaredMethods()) {
                System.out.println("本类的方法 = " + declaredMethod);
            }
            //7. getConstructors:获取所有public修饰的构造器,不包括父类
            for (Constructor<?> constructor : personCls.getConstructors()) {
                System.out.println("本类的public构造器 = " + constructor);
            }
            //8. getDeclaredConstructors:获取本类中的所有构造器,不包括父类,构造器不能被继承
            for (Constructor<?> declaredConstructor : personCls.getDeclaredConstructors()) {
                System.out.println("本类的所有构造器 = " + declaredConstructor);
            }
            //9. getPackage:以Package形式返回包信息
            System.out.println(personCls.getPackage());//package com.hspedu.refl
首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇【后端面经-Java】Java基本概念 下一篇针对单一key加读写锁

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目