首页 > 其他分享 >反射 p4 反射获取类的结构信息

反射 p4 反射获取类的结构信息

时间:2023-07-25 19:55:57浏览次数:46  
标签:lang 反射 java p4 hspedu 本类 获取 父类 public

反射获取类的结构信息

  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.reflection
            //10. getSuperClass:以Class形式返回父类信息
            System.out.println("父类的class对象 = " + personCls.getSuperclass());//父类的class对象 = class com.hspedu.reflection.A
            //11. getInterface:以Class[]形式返回接口信息,不包括父类
            for (Class<?> anInterface : personCls.getInterfaces()) {
                System.out.println("接口信息 = " + anInterface);
            }
            //12.getAnnotations:以Annotation[]形式返回注解信息
            for (Annotation annotation : personCls.getAnnotations()) {
                System.out.println("注解信息 = " + annotation);
            }
        }
    
        //第二组方法API:java.lang.reflect.Filed,java.lang.reflect.Method
        @Test
        public void api_02() throws ClassNotFoundException {
            //得到Class对象
            Class<?> personCls = Class.forName("com.hspedu.reflection.Person");
            //1. getModifiers():以int的形式返回修饰符
            //规定说明:默认修饰符是 0, public 是 1, protect 是 2, private 是 4 , static 是 8, final 是 16
            //2. getType:以Class形式返回属性类型
            //3. getName:获得属性名
            for (Field declaredField : personCls.getDeclaredFields()) {//获得Field[]
                System.out.println("本类中所有属性 " + declaredField.getName() + " 属性的修饰符值 " + declaredField.getModifiers()
                + "该属性的类型 " + declaredField.getType());
            }
    
            //1. getModifiers():以int的形式返回修饰符
            //规定说明:默认修饰符是 0, public 是 1, protect 是 2, private 是 4 , static 是 8, final 是 16
            //2. getReturnType:以Class形式返回方法返回值类型
            //3. getName:获得方法名
            //4. getParameterTypes:以Class[]形式返回方法的形参列表
            for (Method declaredMethod : personCls.getDeclaredMethods()) {//获得Method[]
                System.out.print("本类的方法 = " + declaredMethod.getName() + " 方法的修饰符值 " + declaredMethod.getModifiers()
                        + "该方法返回值的类型 " + declaredMethod.getReturnType() + " 方法的参数 ");
                //输出方法的形参数组
                for (Class<?> parameterType : declaredMethod.getParameterTypes()) {
                    System.out.print(parameterType + " ");
                }
                System.out.println();
            }
    
    
            //1. getModifiers():以int的形式返回修饰符
            //规定说明:默认修饰符是 0, public 是 1, protect 是 2, private 是 4 , static 是 8, final 是 16
            //2. getName:获得构造器名
            //4. getParameterTypes:以Class[]形式返回构造器的形参列表
            for (Constructor<?> constructor : personCls.getDeclaredConstructors()) {//获取Constructor[]
                System.out.print("本类的public构造器 = " + constructor.getName());
                for (Class<?> parameterType : constructor.getParameterTypes()) {
                    System.out.print(" 该构造器的形参类型" +  parameterType + "   ");
                }
                System.out.println();
            }
        }
    }
    
    
    class A{
        public String hobby;
        public A() {
        }
        public void hi(){}
    }
    
    interface IA{}
    interface IB{}
    
    @Deprecated
    class Person extends A implements IA,IB{
        //属性
        public String name;
        String job;
        protected  int age;
        private double sal;
    
        //构造器
        public Person() {
        }
    
        private Person(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        public Person(String name) {
            this.name = name;
        }
    
        //方法
        public void m1(String name, int age, double sal){}
        protected String m2(){ return  null; }
        void m3(){}
        private void m4(){}
    }
    
    
    /* 运行结果
    ========================api_01()=======================
    com.hspedu.reflection.Person
    Person
    本类及父类的公有属性name
    本类及父类的公有属性hobby
    本类中所有属性name
    本类中所有属性job
    本类中所有属性age
    本类中所有属性sal
    本类及其父类的公有方法 = public void com.hspedu.reflection.Person.m1(java.lang.String,int,double)
    本类及其父类的公有方法 = public void com.hspedu.reflection.A.hi()
    本类及其父类的公有方法 = public final void java.lang.Object.wait() throws java.lang.InterruptedException
    本类及其父类的公有方法 = public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
    本类及其父类的公有方法 = public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException
    本类及其父类的公有方法 = public boolean java.lang.Object.equals(java.lang.Object)
    本类及其父类的公有方法 = public java.lang.String java.lang.Object.toString()
    本类及其父类的公有方法 = public native int java.lang.Object.hashCode()
    本类及其父类的公有方法 = public final native java.lang.Class java.lang.Object.getClass()
    本类及其父类的公有方法 = public final native void java.lang.Object.notify()
    本类及其父类的公有方法 = public final native void java.lang.Object.notifyAll()
    本类的方法 = void com.hspedu.reflection.Person.m3()
    本类的方法 = private void com.hspedu.reflection.Person.m4()
    本类的方法 = protected java.lang.String com.hspedu.reflection.Person.m2()
    本类的方法 = public void com.hspedu.reflection.Person.m1(java.lang.String,int,double)
    本类的public构造器 = public com.hspedu.reflection.Person(java.lang.String)
    本类的public构造器 = public com.hspedu.reflection.Person()
    本类的所有构造器 = public com.hspedu.reflection.Person(java.lang.String)
    本类的所有构造器 = private com.hspedu.reflection.Person(java.lang.String,int)
    本类的所有构造器 = public com.hspedu.reflection.Person()
    package com.hspedu.reflection
    父类的class对象 = class com.hspedu.reflection.A
    接口信息 = interface com.hspedu.reflection.IA
    接口信息 = interface com.hspedu.reflection.IB
    注解信息 = @java.lang.Deprecated()
    ========================api_02()=======================
    本类中所有属性 name 属性的修饰符值 1该属性的类型 class java.lang.String
    本类中所有属性 job 属性的修饰符值 0该属性的类型 class java.lang.String
    本类中所有属性 age 属性的修饰符值 4该属性的类型 int
    本类中所有属性 sal 属性的修饰符值 2该属性的类型 double
    本类的方法 = m3 方法的修饰符值 0该方法返回值的类型 void 方法的参数 
    本类的方法 = m4 方法的修饰符值 2该方法返回值的类型 void 方法的参数 
    本类的方法 = m2 方法的修饰符值 4该方法返回值的类型 class java.lang.String 方法的参数 
    本类的方法 = m1 方法的修饰符值 1该方法返回值的类型 void 方法的参数 class java.lang.String int double 
    本类的public构造器 = com.hspedu.reflection.Person 该构造器的形参类型class java.lang.String   
    本类的public构造器 = com.hspedu.reflection.Person 该构造器的形参类型class java.lang.String    该构造器的形参类型int   
    本类的public构造器 = com.hspedu.reflection.Person
    */
    

标签:lang,反射,java,p4,hspedu,本类,获取,父类,public
From: https://www.cnblogs.com/zh-Note/p/17557511.html

相关文章

  • python字符串获取指定字符后面的内容
    Python字符串获取指定字符后面的内容1.整体流程以下是获取指定字符后面的内容的整体流程:步骤描述步骤一输入原始字符串步骤二使用字符串方法find()查找指定字符的位置步骤三使用切片操作提取指定字符后面的内容步骤四输出结果2.代码实现下面是每......
  • 反射 p3 类加载
    类加载基本说明反射机制是Java实现动态语言的关键,也就是通过反射实现类动态加载。静态加载:编译时加载相关的类,如果没有则报错,依赖性太强。动态加载:运行时加载相关的类,如果运行时不用该类,即使不存在该类,也不会报错,降低了依赖性。代码演示:importjava.util.*;importjava......
  • 【PHP】laravel中获取当前路由名称
    1、【PHP】laravel中获取当前路由名称2、怎么样使用php的laravel框架快速集成微信登录3、为什么说PHP框架Laravel最值得推荐【PHP】laravel中获取当前路由名称laravel设置好了路由为什么找不到控制器将网线—路由器—电脑之间的线路连接好,启动电脑和路由器设备;启动设备后......
  • 获取当前日期所周、月、季第一天和最后一天
    //获取本周一天和最后一天,周一为第一天//DateTimenow=DateTime.Now;//输入日期//inttoday=(int)now.DayOfWeek;//Console.WriteLine("本周开始日期{0:d},结束日期{1:d}",now.AddDays(-today+1),now.AddDays(7-today));//Console.WriteLine("上周开始日期{0:d},结束日期{......
  • SQL 语句获取数据库各表分配空间、占用空间、记录行数
    SELECT    t.NAME AS TableName,    s.Name AS SchemaName,    p.rows AS RowCounts,    SUM(a.total_pages)*8 AS TotalSpaceKB,    CAST(ROUND(((SUM(a.total_pages)*8)/1024.00),2) AS NUMERIC(36,2)) AS TotalSpaceMB,    SUM(a.......
  • 纯前端获取当前用户IP和归属地
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>IPAddress</title></head><body><pid="content1"></p><pid="content2"&g......
  • GE反射内存卡的指标和型号
    产品特性:•1路发送,1路接收;•光纤高速网络2.12GHz;•最大256个节点;•光纤协议不占用CPU资源;•多模光纤节点距离300米;单模光纤节点距离10千米;•板载128M/256MByteSDRAM;•低延迟率(n秒级);•动态包长:每个包4到64或1M个字节。产品选型:1、CPCI接口-5565PIORC-110000(128MSDRAM多......
  • Java-Day-36( 通过反射获取类的结构信息 + 通过反射访问类中的成员 + 章节练习 )
    Java-Day-36通过反射获取类的结构信息第一组:java.lang.Class类以下说的包含本类和父类——也包括超类等方法属性之类的若是输出时不加.getName,则都是输出:com.zyz.Zyz()publicclasstest{publicstaticvoidmain(String[]args){}@Testpubl......
  • 获取上一个交易日接口
    实际实现交易日放在txt中上一交易日即当前交易日所在行的上一行数据python文件名lastjyr.pyimportosimportlinecacheimporttimedeflastjyr(): string=time.strftime("%Y%m%d") count=1 f=open('jyr.txt','r',encoding='utf8') forlineinf.re......
  • 获取正在运行容器的shell
    获取容器的Shell在本练习中,你将创建包含一个容器的Pod。容器运行nginx镜像。下面是Pod的配置文件:application/shell-demo.yamlapiVersion:v1kind:Podmetadata:name:shell-demospec:volumes:-name:shared-dataemptyDir:{}containers:-name......