zoukankan      html  css  js  c++  java
  • java疯狂讲义第18章类的加载和反射

    18. 类加载机制与反射

    1.反射定义:

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

    2.反射的作用:

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

    3.反射的工作原理:

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

    4.反射的特点:

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


    18.1.5类的初始化时机

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

      1.使用new操作符来创建实例

      2.通过反射来创建实例

      3.通过反序列化的方式来创建实例

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

  • 相关阅读:
    C# 操作Excel之旁门左道
    C#数据类型、控件、数据类型、ADO.NET等命名规范
    tab 切换函数
    ASP.NET常用JS脚本整理
    实现MSMQ消息加密的安全实践
    关于jQuery中的offset()和position()
    SQL中使用update inner join和delete inner join
    setTimeout和setInterval
    设计漂亮的样式表是一门艺术(译) (转)
    使用jQuery制作手风琴效果(转)
  • 原文地址:https://www.cnblogs.com/jingpeng77/p/12464501.html
Copyright © 2011-2022 走看看