• 反射


    java疯狂讲义之18. 类加载机制与反射

    反射:

    反射是一种能够在程序运行时动态访问、修改某个类中任意属性(状态)和方法(行为)的机制(包括private实例和方法)。

    反射的作用:

    操作因访问权限限制的属性和方法;
    实现自定义注解;
    动态加载第三方jar包,解决android开发中方法数不能超过65536个的问题;
    按需加载类,节省编译和初始化APK的时间;

    反射的工作原理:

    当我们编写完一个Java项目之后,每个java文件都会被编译成一个.class文件,这些Class对象承载了这个类的所有信息,包括父类、接口、构造函数、方法、属性等,这些class文件在程序运行时会被ClassLoader加载到虚拟机中。当一个类被加载以后,Java虚拟机就会在内存中自动产生一个Class对象。我们通过new的形式创建对象实际上就是通过这些Class来创建,只是这个过程对于我们是不透明的而已。

    反射的特点:

    优点

    灵活、自由度高:不受类的访问权限限制,想对类做啥就做啥;

    缺点

    性能问题:通过反射访问、修改类的属性和方法时会远慢于直接操作,但性能问题的严重程度取决于在程序中是如何使用反射的。如果使用得很少,不是很频繁,性能将不会是什么问题;
    安全性问题:反射可以随意访问和修改类的所有状态和行为,破坏了类的封装性,如果不熟悉被反射类的实现原理,随意修改可能导致潜在的逻辑问题;
    兼容性问题:因为反射会涉及到直接访问类的方法名和实例名,不同版本的API如果有变动,反射时找不到对应的属性和方法时会报异常;

    18.1.5类的初始化时机

    为某个类创建实例的方式包括:

    1.使用new操作符来创建实例
    2.通过反射来创建实例
    3.通过反序列化的方式来创建实例

    18.4使用反射生成JDK动态代理

  • 相关阅读:
    c语言中的增量与减量········不要太聪明
    存储器··············RAM,SRAM,EEPROM 等等
    对于 sizeof(char)的一些零碎······
    C语言中float,double等类型,在内存中的结构
    同步异步存储器
    Linux的帧缓冲设备(Framebuffer)简介
    嵌入式 c 中结构体经常碰到_I、 __O 、__IO是什么意思?
    新型的按键扫描程序
    数据结构
    jQuery(八)选择器与选择方法
  • 原文地址:https://www.cnblogs.com/jingpeng77/p/12971552.html
Copyright © 2020-2023  润新知