一、加载类的三种方式
Class clazz1=Class.forName("类的完整名称");
Class clazz2=new Person().getClass();
Class clazz3=Person.class;
二、Class对象提供了如下常用方法
public Constructor getConstructor(Class<?>...parameterTypes)
public Method getMethod(String name,Class<?>...parameterTypes)
public Field getField(String name)
public Constructor getDeclaredConstructor(Class...parameterTypes)
public Method getDeclaredMethod(String name,Class<?>...parameterTypes)
public Field getDeclaredField(String name)
三、学习
1.获取对应的class对象
方式1:★
Class clazz=Class.forName("全限定名");
方式2:
Class clazz=类名.class;
方式3:
Class clazz==对象.getClass();2.通过class对象创建一个实例对象(相当于 new 类())
Object clazz.newInstance();
3.通过class对象获取一个方法(public修饰的)
Method method=clazz.getMethod("方法名",Class .... paramType);
paramType为参数的类型
4.让方法执行:
method.invoke(Object 实例对象,Object ... 参数);
Object 实例对象:以前调用方法的对象 就是a
Object ... 参数:该方法运行时需要的参数 就是 10和30
执行这个方法 相当于
a.add(10,30);
例如:
method.invoke(a,10,30)
四、反射的作用
框架与框架要解决的核心问题
框架与工具类有区别,工具类被用户的类调用,而框架则是调用用户提供的类。
框架要解决的核心问题
我在写框架时,你这个用户可能还在上小学,还不会写程序呢?我写的框架程序怎样能调用到你以后写的类呢?
因为在写才程序时无法知道要被调用的类名,所以,在程序中无法直接new 某个类的实例对象了,而要用反射方式来做。
综合案例
先直接用new 语句创建ArrayList和HashSet的实例对象,演示用eclipse自动生成 ReflectPoint类的equals和hashcode方法,比较两个集合的运行结果差异。
然后改为采用配置文件加反射的方式创建ArrayList和HashSet的实例对象,比较观察运行结果差异。
引入了elipse对资源文件的管理方式的讲解。