Java反射机制详解

目的:由于Java的各种框架大多都会用到反射机制,因此了解反射机制非常必要。
先看Java程序的运行过程,类加载机制:
这里写图片描述
通过ClassLoader将XXX.class类Load到内存中CodeSegment里面,运行环境找到main方法开始执行,遇到一个类load一个类,并非一次性加载。静态块不管new几次都只执行一次,动态块每new一个对象,就执行一次。
这里写图片描述
详细的Load过程可以根据如下操作运行:
这里写图片描述
Jdk里面的ClassLoader有很多,
这里写图片描述
bootstrap是最核心的ClassLoader,它没有名字,代码中无法获取,主要管理底层的C或C++库,非Java语言编写,其他的ClassLoader都是用Java编写。首先是它把其他的ClassLoader加载进来,然后其他的ClassLoader在去Load各种Class。
extension 负责Load jdk里面的扩展包。
application 负责Load自定义的类。系统默认的ClassLoader指application loader
这里写图片描述
other 包括SecureClassLoader还有URLClassLoader等等,也可以自定义ClassLoader。
注意:除了bootstrap外,其他的ClassLoader都继承自ClassLoader类。他们之间有个层次关系,每个对象都有个引用parent,但他们不是继承。类加载器都会先看上一层是否已经加载某个类,如果加载过,它就不会再加载,否则才加载该类。
这里写图片描述
从ClassLoader角度讲,每一个.class就是一个class对象,从面相对象的思维放大来讲,每个类里面的属性、方法以及方法的参数都是一个对象。
因此,Java提供获取属性、方法的api接口文档(java.lang.reflect),其中Field获取属性,Method获取方法。
这里写图片描述
这里写图片描述
作用:反射机制可以通过反射API接口,探索运行期间的class的内部结构,并且根据其内部结构来决定方法怎么进行调用。比如说,登录系统前,检查登录人是否有这个权限。又比如说,Spring、Hibernate等框架的事务Transaction机制,面相切面的编程等等这些都需要反射机制的支持。

封装打折策略

工厂模式

所有的工厂模式都是用来生产对象。
静态工厂方法
这里写图片描述

  • 产生对象
  • 构造方法通常private
  • getInstance()

简单工厂
直接通过工厂类的一个方法来获取一个对象,不常用,了解即可。
这里写图片描述
抽象工厂
假设有个产品Tank,一开始我并不知道它的形状、大小、动作等属性,我要求工厂能制造各种各样的Tank,也就是说它有哪些属性,类型又是设么,可能我不确定,那么我应该怎么处理这样的工厂业务呢?
这里写图片描述
这里写图片描述
从上面代码可以看出,抽象工厂有一个抽象接口和一个全局工厂类,全局工厂一定是一个单例模式,而且制造坦克的方法要求可配,既可以制造圆形坦克,也可以制造方形坦克。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值