• java反射浅谈 part1--反射机制的定义,作用,原理


    一.定义

      在运行过程中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;还可以通过反射创建对象,这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

    二.能做什么

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

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

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

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

    5.生成动态代理

    三.原理,通过例子说明

    public class Test {
    
        public static void main(String[] args) {
            //指定类名
            String className = "com.template.Runable.testHello";
            testHello test = null;
            try {
                //用类名根据反射创建实例,并调用实例的方法
                Class th = Class.forName(className);
                test = (testHello)th.newInstance();
                test.main(null);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (InstantiationException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }
    
    }

    结果:  输出了我指定类里面的main函数

    从执行过程说原理

      Class.forName(classname):调用

    forName0(className, true, ClassLoader.getClassLoader(caller), caller)
    className:类名
    true:初始化该类
    ClassLoader.getClassLoader(caller):获取当前类加载器
    caller:当前类

      解释:要想使用类,必须使用类加载器进行加载,类加载器先检查自己是否已经加载过该类,加载过:直接返回,没有:调用父类的loadClass方法,父类中没有,执行findClass()去尝试从生成的.class文件加载此类,主要通过defineClass()完成,将字符数组转换成Class类,这种转换的类需要通过newInstance去创建实例,不能通过new Class实例化,注:反射是有缓存的,不会每次都去重新反射。

      

      

  • 相关阅读:
    NetBeans + Struts + Hibernate 入门教程
    The Perils of JavaSchools
    Java 2 EE 开发初体验
    五周年记
    MySQL Workbench 介绍
    JAVA语言学校的危险性
    娱乐无处不在 Sun工程师惊天发现:大吼可致硬盘潜伏期激增
    争什么?
    spring cloud使用zuul实现反向代理和负载均衡
    spring cloud 网管篇zuul
  • 原文地址:https://www.cnblogs.com/jijiji/p/7011405.html
Copyright © 2020-2023  润新知