反射是为了解决动态编程。动态创建对象,动态调用方法。
Class对象代表一种类型。普通对象代表现实中的一个事物。
Student这一类人,小张同学。。
Class没有公共构造对象。是在加载类时由虚拟机调用类加载器中的ClassLoader方法自动构成的。
所以一种类型只有一个Class对象。
使用的包
java.lang.Class
java.util.reflect.Field
java.util.reflect.Method
获取Class对象的4种方法:
引用类型:
1.Class.forName()
2.对象.getClass()
3.基本类型:包装类.TYPE. Integer.TYPE==int
通用:类型.class int.class,String.class
使用过程:
Class里的。getDeclaredMethods.getMethod.getDeclaredField,getField.getDeclaredConstructor,getConstructor
newInstance方法(只调无参构造)
Field里的get,set (feild.set(该对象,值)),getType方法
Method里的invoke方法(对象名,参数列表)
Method里的方法都是具体的对象。
Method m = c.getMethod(方法名,参数类型);
Constructor newInstance()
得到这个类的具体对象。
得到构造
得到属性
得到方法。执行方法。
Field里有set方法。但最好不要使用。破坏了封装性。
一般使用类里的set***方法来设置属性。