• Java 反射基础


    1、什么是反射

    间接操作目标对象的机制。核心是JVM在运行时才动态加载类,并且对于任意一个类,都能知道这个类的方法和属性。允许运行中的Java程序获取类的信息,并且操作类的方法和属性。

    Java运行时,动态获得类的信息以及动态调用对象的方法的功能。

    在运行时判断任意一个对象所属的类

    在运行时构造任意一个类的对象

    在运行时判断任意一个类所具有的成员变量和方法

    在运行时调用任意一个对象的方法

    2. 动态语言和静态语言

    动态语言的定义:在程序运行时,运行改变程序结构或者变量类型,这这种语言称为动态语言

    动态语言:Perl,Python,Ruby,JavaScript

    静态语言:C++,Java,C#

    3. Java反射机制由以下类来实现,这些类在java.lang.reflect中

    Class类: 代表一个类

    Field类:代表类的成员变量

    Method类:代表类的方法

    Constructor类:代表类的构造方法

    Array类: 提供了动态创建数组,以及访问数组的元素的静态方法。

    4. Java中,无论生成某个类的多少个对象,这些对象对象都会对应同一个Class对象

    5、反射的原理

    参考: https://blog.csdn.net/a745233700/article/details/82893076 

    6. 反射的例子: 打印出String类中所有的方法

     public static void main(String[] args) throws Exception {
            Class<?> classType = Class.forName("java.lang.String");
    
            Method[] methods = classType.getDeclaredMethods();
            for(Method method : methods){
                System.out.println(method);
            }
    
    
        }
    

      

    7.反射的例子2,调用单独的反射方法

    public class InvokeTester {
        public  int add(int param1, int param2){
            return  param1 +param2;
        }
    
        public String echo(String message){
            return  "hello: " + message;
        }
    
        public static void main(String[] args)  throws  Exception{
            //传统调用
            InvokeTester tester = new InvokeTester();
            System.out.println(tester.add(1,5));
            System.out.println(tester.echo("tom"));
    
            // 反射调用
            Class<?> classType = InvokeTester.class;
            Object invokerTester = classType.newInstance();
    
            //add方法
            Method addMethod = classType.getMethod("add",new Class[]{int.class, int.class});
            Object result = addMethod.invoke(invokerTester,new Object[]{2,3});
            System.out.println(result);
    
            //echo方法
            Method echoMethod = classType.getMethod("echo",new Class[]{String.class});
            result = echoMethod.invoke(invokerTester,new Object[]{"world"});
            System.out.println(result);
    
    
        }
    }
    

      

  • 相关阅读:
    C#Windows服务程序安装常见问题解决方法
    解决access 导出 excel 字段截断错误的问题
    MySQL创建方法错误:This function has none of DETERMINISTIC, NO SQL
    解决问题 “You don't have permission to access /index.html on this server.”
    无法枚举容器中的对象,访问被拒绝的解决方法
    php xml操作
    php 字符串截取函数
    PHP iconv 解决utf-8和gb2312编码转换问题
    IIS6,IIS7中查看w3wp进程
    Solaris设备管理
  • 原文地址:https://www.cnblogs.com/linlf03/p/9692033.html
Copyright © 2020-2023  润新知