导图社区 JAVASE_反射机制
Java反射机制主要提供了以下功能: 1.在运行时判断任意一个对象所属的类。 2.在运行时构造任意一个类的对象。 3.在运行时判断任意一个类所具有的成员变量和方法。 4.在运行时调用任意一个对象的方法。
Java SE(Java Standard Edition,Java 标准版)是Java技术的核心和基础,是Java ME和Java EE编程的基础 。
程序:一段静态的代码 进程:正在运行的一个程序 线程:进程可进一步细化为线程,是一个程序内部的一条执行路径 说明:线程作为调度和执行的单位,每个线程都拥有独立的运行栈和程序计数器,线程切换开销小。多个线程共享同一个进程中的结构:方法区、堆。
社区模板帮助中心,点此进入>>
互联网9大思维
安全教育的重要性
组织架构-单商户商城webAPP 思维导图。
个人日常活动安排思维导图
域控上线
西游记主要人物性格分析
17种头脑风暴法
python思维导图
css
CSS
JAVASE_反射机制
反射机制
动态语言在程序运行时可改变其结构,反射是java被视为动态语言的关键。
通过反射获取类的Class对象
Class c1 = Class.forName("包名+类名");
注意:1.一个类在内存中只有一个Class对象 2.一个类被加载后,类的整个结构都会封装在Class对象中。
Class c2 = 对象.getClass();
Class c3 = 类名.class;
什么时候会发生类的初始化
类的主动引用(一定会发生类的初始化)
当虚拟机启动,先初始化main方法所在的类
new一个类的对象时
调用类的静态成员(除了final常量)和静态方法
通过反射调用时(使用java.lang.reflect包的方 法对类进行反射调用)
当初始化一个类,如果其父类没有被初始化,则先会初始化它的父类
类的被动引用(不会发生类的初始化)
当访问一个静态域时,只有真正声明这个域的类才会被初始化。如:当通过子类引用父类的静态变量,不会导 致子类初始化
通过数组定义类引用,不会触发此类的初始化
引用常量不会触发此类的初始化(常量在链接阶段就存入调用类的常量池中了)
类加载器
作用
把类装载到内存中
类加载全过程
➢加载:将class文件字节码内容加载到内存中,并将这些静态数据转换成方法区的运行时数据结构, 然后生成一个代表这个类的java.lang.Class对象.
➢链接: 将Java类的二进制代码合并到JVM的运行状态之中的过程。
➢验证: 确保加载的类信息符合JVM规范,没有安全方面的问题
➢准备:正式为类变量(static) 分配内存并设置类变量默认初始值的阶段,这些内存都将在方法区中进行分配。
➢解析:虚拟机常量池内的符号引用(常量名)替换为直接引用(地址)的过程。
➢初始化:
➢执行类构造器<clinit> ()方法的过程。类构造器< clinit> ()方法是由编译期自动收集类中所有类变量的赋值动作和静态 代码块中的语句合并产生的。(类构造 器是构造类信息的,不是构造该类对象的构造器)。
➢当初始化-个类的时候,如果发现其父类还没有进行初始化,则需要先触发其父类的初始化。
➢虚拟机会保证一个类的<clinit> ()方法在多线程环境中被正确加锁和同步。
通过反射获取类的运行时结构
获得类的名字
getName()
获得包名+类名
getSimpleName()
获得类名
获得类的属性
getFields()
只能找到public属性
getDeclaredFields()
找到全部属性
获得指定属性的值
getDeclaredFields(“name”)
获得类的方法
getMethods()
获得本类及其父类的全部public方法
getDeclaredMethods()
获得本类的所有方法
getMethods(参数)
获取指定方法
获取构造器
getConstructors()
获取public修饰的构造器
getDeclaredConstructors()
获取所有的构造器
getConstructors(参数)
获取指定构造器
例
反射的一些方法
通过反射动态创建对象
newInstance()
1.调用无参构造方法
2.通过构造器创建对象
通过反射调用方法
getDeclaredMethods(“参数”) invoke()激活
通过反射操作属性
getDeclaredFields(“name”) setAccessible(true)不能直接操作程序的私有属性,我们需要关闭程序的安全检测