• 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,这样你启动程序(初始化)的时候这些模块不会被加载,而是在运行的时候,用到那个模块就调用哪个模块。

  • 相关阅读:
    List<T>Find方法,FindAll方法,Contains方法,Equals方法
    C#SerialPort如何读取串口数据并显示在TextBox上
    49、css属性相关
    40、协程
    45、mysql 储存过程
    37、进程之间的通信
    38、线程及其方法
    39、多线程和线程池
    33、验证客户端的合法性、socketserver模块
    32、黏包的解决方式、struct模块
  • 原文地址:https://www.cnblogs.com/jiazhutao/p/12447385.html
Copyright © 2020-2023  润新知