zoukankan      html  css  js  c++  java
  • java基础---反射机制

    资料
     

     
    ===概念
    java反射机制是说在程序的运行过程中,对于任意一个类或者对象,都能够知道它的所有属性和方法和构造方法,能够创建新的对象;这种动态获取属性或者调用方法的功能叫做java反射机制。
     
    对于反射来说,最重要的就是Class类,这是一种用来描述类的类。java中的每一个类都会有一个Class实例对象,用来封装这个类的信息,包括属性,接口,方法,构造函数等等。要使用反射的话都要先获取这个Class对象。
     
    ===Class对象什么时候创建的呢?被保存在虚拟机什么位置呢?
    在类加载器加载的时候创建Class对象,保存在虚拟机的方法区中。
     
    ===创建Class类实例对象的方法有三种
    1.通过类获取;Person.class
    2.通过类的全限定名创建 Class.forName(com.java.Person);类加载器会做加载
    3.通过对象获取,getClass()来创建。
    4.获取当前线程的classloader来加载。
     
     
    ===使用Class.forName和直接通过类名获取Class对象引用有什么区别呢?
    首先他们都会获取到Class对象引用,但是使用.class不会做初始化,使用Class.forName会做初始化。
    类加载三个步骤:加载连接初始化。
    实际上进行了三步操作:
    1.虚拟机的类加载器加载了.class文件,首先查找并且导入Class对象
    2.验证类中的字节码,为静态变量分配了内存空间,创建了对其他类的所有引用
    3.进行初始化,进行静态初始化和静态初始化块。
     
     
    ===获取到Class类实例对象之后就能够调用他的一些方法,比如说最常见的就是newInstance()方法来创建一个对象,或者通过getMethod方法获取方法类对象,再调用invoke来执行方法。
    Class cla = Person.class;
    Object xiaoming = cla.newInstance();
     
    ===框架中如何使用反射呢?
    框架中大量使用到反射机制,能够使得程序更加灵活。
    举一个例子,比如说创建一个类Person,如果没有反射,那么你必须new 一个Person对象。这个时候如果person类需要修改,那么就要停下整个应用进行修改编译再运行。但是使用反射就不需要了,你只要修改配置文件就行,通过配置文件获取到对象的Class对象,然后通过Class对象的newInstance()方法来创建实例。    
     
  • 相关阅读:
    HDU4507 吉哥系列故事――恨7不成妻(数位dp)
    UCF Local Programming Contest 2017 G题(dp)
    ICPC Latin American Regional Contests 2019 I题
    UCF Local Programming Contest 2017 H题(区间dp)
    HDU2089 不要62
    AcWing1084 数字游戏II(数位dp)
    UCF Local Programming Contest 2017 F题(最短路)
    Google Code Jam 2019 Round 1A Pylons(爆搜+贪心)
    AcWing1083 Windy数(数位dp)
    Vue
  • 原文地址:https://www.cnblogs.com/buptyuhanwen/p/9412067.html
Copyright © 2011-2022 走看看