1.反射
动态语言的特性,通过反射可以在运行期间获取任意一个类的所有属性和方法,还可以调用这些属性和方法
主要API:
- java.lang.Class:代表一个类
- java.lang.reflect.Method:代表类的方法
- java.lang.reflect.Field:代表类的成员变量
- java.lang.reflect.Constructor:代表类的构造器
作用:
运行时判断一个对象所属的类
运行时判断一个类的成员变量和方法
运行时构造类的对象
运行时获取泛型信息
运行时调用对象的变量和方法
动态代理
1.1 怎么选择new对象和反射得到对象
为了动态性,使用反射,动态创建对象
1.2 反射和封装性是否矛盾?
不矛盾
1.3 获取Class对象的4种方法
- 已知具体的类,通过类的class属性获取类对象
- 已知类的实例,调用实例getClass方法获取
- 已知类的全类名,通过Class.forName()方法获取
- 通过类加载器的loadClass方法获取,传入类的全类名
1.4 创建类的对象
newInstance()方法,本质上还是调用了类的空参构造方法
Class clazz = Person.class; Person obj = clazz.newInstance();// obj就是Person的对象\