Java反射机制
Object类中的getClass()方法的定义:
public final Class getClass()
此方法返回值是一个Class类。此类是Java反射的源头。
Class类:
使用Class类可以完整地得到一个类中的完整结构。包括类中的方法定义、属性定义等
Class类中的常用方法:
public static Class<?> forName(String className) throws ClassNotFoundException //传入完整的“包.类名称”实例化Class对象
public Constructor[] getConstructors() throws SecurityException //得到一个类中的全部构造方法
public Field[] getDeclaredFields() throws SecurityException //得到本类中单独定义的全部属性
public Field[] getFields() throws SecurityException //取得本类继承而来的全部属性
public Method[] getMethods() throws SecurityException //得到一个类中的全部方法
public Method getMethod(String name,Class...parameterType) throws NoSuchMethodException,SecurityException
//返回一个Method对象,并设置一个方法中的所有参数类型
public Class[] getInterfaces() //返回一个类中所实现的全部接口
public String getName() //得到一个类完整的“包.类名称”
public Package getPackage() //得到一个类的包
public Class getSuperClass() //得到一个类的父类
public Object newInstance() throws InstantiationException,IllegalAccessException()
//根据Class定义的类实例化对象
public Class<?> getComponentType() //返回数组类型的Class
public boolean isArray() //判断此Class是否是数组
在Class类中本身没有定义任何的构造方法,所以如果要使用则首先要通过forName()方法实例化对象。
除此之外,也可以使用“类.class”或"对象.getClass()"方法实例化。
Class类的使用:
1、通过无参构造方法实例化对象
使用Class类的newInstance()方法实例化一个类的对象,但是此类必须是存在一个无参构造方法。
2、调用有参构造方法实例化对象
(1)通过Class类中的getConstructors()取得该类中的所有构造方法
(2)向构造方法中传递一个对象数组,里面包含了要使用的构造方法所需要的参数
(3)通过Constructor实例化对象
Constructor类的常用方法
public int getModifiers() //得到构造方法的修饰符
public String getName() //得到构造方法的名称
public Class<?>[] getParameterTypes() //得到构造方法中参数的类型
public String toString() //返回此构造方法的信息
public T newInstance(Object...initargs) throws InstantiationException,IllegalAccessException,
Object类中的getClass()方法的定义:
public final Class getClass()
此方法返回值是一个Class类。此类是Java反射的源头。
Class类:
使用Class类可以完整地得到一个类中的完整结构。包括类中的方法定义、属性定义等
Class类中的常用方法:
public static Class<?> forName(String className) throws ClassNotFoundException //传入完整的“包.类名称”实例化Class对象
public Constructor[] getConstructors() throws SecurityException //得到一个类中的全部构造方法
public Field[] getDeclaredFields() throws SecurityException //得到本类中单独定义的全部属性
public Field[] getFields() throws SecurityException //取得本类继承而来的全部属性
public Method[] getMethods() throws SecurityException //得到一个类中的全部方法
public Method getMethod(String name,Class...parameterType) throws NoSuchMethodException,SecurityException
//返回一个Method对象,并设置一个方法中的所有参数类型
public Class[] getInterfaces() //返回一个类中所实现的全部接口
public String getName() //得到一个类完整的“包.类名称”
public Package getPackage() //得到一个类的包
public Class getSuperClass() //得到一个类的父类
public Object newInstance() throws InstantiationException,IllegalAccessException()
//根据Class定义的类实例化对象
public Class<?> getComponentType() //返回数组类型的Class
public boolean isArray() //判断此Class是否是数组
在Class类中本身没有定义任何的构造方法,所以如果要使用则首先要通过forName()方法实例化对象。
除此之外,也可以使用“类.class”或"对象.getClass()"方法实例化。
Class类的使用:
1、通过无参构造方法实例化对象
使用Class类的newInstance()方法实例化一个类的对象,但是此类必须是存在一个无参构造方法。
2、调用有参构造方法实例化对象
(1)通过Class类中的getConstructors()取得该类中的所有构造方法
(2)向构造方法中传递一个对象数组,里面包含了要使用的构造方法所需要的参数
(3)通过Constructor实例化对象
Constructor类的常用方法
public int getModifiers() //得到构造方法的修饰符
public String getName() //得到构造方法的名称
public Class<?>[] getParameterTypes() //得到构造方法中参数的类型
public String toString() //返回此构造方法的信息
public T newInstance(Object...initargs) throws InstantiationException,IllegalAccessException,
IllegalArgumentException,InvocationTargetException //向构造方法传递参数,实例化对象