思维导图
概述
为什么要用反射:任意调用类中的私有内容,使类的使用更加灵活。
反射:针对性地映射 某一个完整事务的行为或特征(单独操作类中任意内容)
1、反射机制 - 获取对象
-
什么是类对象?
类对象,就是用于描述这种类,都有什么属性,什么方法。
-
对象之前的区别?
gareen 和 teemo都是 Hero对象,他们的区别在于:各自有不同的名称、血量、技能。
-
类之间的区别?
Hero 和 soldier 都是类,他们的区别在于有:不同的方法,不同的属性。
-
获取类对象的3种方式
- Class.forName
- Hero.class
- new Hero().getClass()
package reflection; import charactor.Hero; public class TestReflection { public static void main(String[] args) { String className = "charactor.Hero"; try { Class pClass1=Class.forName(className); Class pClass2=Hero.class; Class pClass3=new Hero().getClass(); System.out.println(pClass1==pClass2); System.out.println(pClass1==pClass3); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
2、反射机制 - 访问属性
2.1、getField 和 getDeclaredField的区别
getDeclaredField: 获取本类所有字段(无视权限访问修饰符) 适用于获取当前类
getField:只能获取public字段,包括从父类继承来的字段 适用于获取父类public
3、反射固定步骤:
3.1、获取
- 1、获取对象 Class
- 2、通过类对象获取内容(成员方法、成员变量)
- 3、设置类外可用(暴力反射,private)
3.2、执行
- 1、通过类对象获取类的构造方法
- 2、通过构造方法创建对象
- 3、调用