zoukankan      html  css  js  c++  java
  • java基础知识---反射与new的概念

    概述:之前在学习spring框架时,重点了解了一些依赖注入(即:控制反转),这里最核心的概念就是反射的机制,那么我今天将冲3个方面了梳理一下new和反射的概念

    1、new只有在知道类名之后才能new,而反射有时候不需要

       反射实例对象的方式

        -->知道类名的情况:

          Class<?> c1 = Class.forName("cn.classes.OneClass");
          Class<?> c2 = new OneClass.getClass();
          Class<?> c3 = OneClass.class();

       -->不知道类名的情况:通过动态代理实现的

    首先jvm在其内部通过函数ProxyGenerator.generateProxyClass()方法来生成代理对象的字节码文件(其实就没有具
    体文件,一切都是在内存中,暂时就这么叫吧),然后defineClass0()函数利用之前生成的二进制字节码文件来创建
    类Class对象,并顺便为代理类命名(proxyName是在字节码文件生成之前自己命名的),经过这个过程我们就可以在不
    知道类名的情况下得到了类Class对象了,然后就可以使用反射来获取对象实例了(这其中牵扯到类加载的加载过程,
    具体内容请详看有关资料)

    2、new出来的对象中,我们是无法反问她的私有属性,而反射可以(通过setAccessible()取访问)

    3、new属于静态编译,而反射属于动态编译,静态编译就是在编译的时候把你所有的模块都编译进exe里去,当你启动这个exe的时候所有模块都加载进来了。你写小程序没问题,但程序一大,加载的过程(就是当你运行程序时初始化的过程)就比较费力了。。大多数ppc的硬件配置还是很一般的。动态编译就不一样了,你编译的时候那些模块都没有编译进去,一般情况下你可以把那些模块都编译成dll,这样你启动程序(初始化)的时候这些模块不会被加载,而是在运行的时候,用到那个模块就调用哪个模块。

  • 相关阅读:
    焦点事件中的Validating处理方法
    推荐一个快速反射调用的类
    VB.NET自我总结语法
    WinForm应用程序实现虚拟键盘
    将图片保存到XML文件的方法
    分享TextBoxLineEx控件
    自定义CancelEventArgs类,封装事件参数信息,实现e.Cancle=true取消机制。
    从sql server 中读取二进制图片
    Oracle数据库自我总结
    Android DroidDraw UI设计工具下载地址
  • 原文地址:https://www.cnblogs.com/jiazhutao/p/12447385.html
Copyright © 2011-2022 走看看