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动态代理

猜你喜欢

转载自www.cnblogs.com/jingpeng77/p/12464501.html