反射机制(三)

取得构造

       大部分情况下在进行任何的开发是不会考虑使用构造方法进行参数传递的,因为在进行类标准设计的时候都会明确给出一个要求:类中必须提供有无参构造方法,所以在这样的情况下构造的反射调用的意义就不大了.

        如果一个类中没有无参构造方法时,那么就需要由用户指定的构造方法,而在Class类里面提供有如下的构造方法的操作:

            取得全部构造:public Constructor<?>[] getConstructors() throws SecurityException

            取得指定构造:public Constructor<T> getConstructor(Class<?>... parameterTypes) 

                                                                        throws  NoSuchMethodException,SecurityException

                    |-取得指定构造时,它所匹配的只是参数的类型;

        以上两个方法都是取得都是java.lang.reflect.Constructor<T>类的对象,而在这个类中定义的如下方法:

              取得方法修饰符:public int getModifiers()

              取得构造方法名称:public String getName()

              取得构造方法的参数个数:public int getParameterCount()

              取得构造方法的参数类型:public Class<?>[] getParameterTypes()

              取得构造方法上所抛出的异常类型:public Class<?>[] getExceptionTypes()

              实例化对象:public T newInstance(Object... initargs)
                                                           throws InstantiationException,
                                                             IllegalAccessException,
                                                             IllegalArgumentException,

                                                             InvocationTargetException

                对于方法修饰符都是利用数字完成的,所以必须将数字翻译为可以读懂的字符串,而这个可以通过java.lang.reflect.Modifier类完成

            范例:取得构造方法定义

public class Demo4 {
	public Demo4() throws NumberFormatException,NullPointerException{}
	public Demo4(String name,int age) throws ClassCastException{}
	
}
import java.lang.reflect.Constructor;

public class Demo4_1 {
	public static void main(String[] args) throws ClassNotFoundException {
		Class<?> cls=Class.forName("cn.zwb.dome1.Demo4");
		Constructor[] cons=cls.getConstructors();
		for (int i = 0; i < cons.length; i++) {
			System.out.println(cons[i]);
		}
	}
}
结果:
public cn.zwb.dome1.Demo4() throws java.lang.NumberFormatException,java.lang.NullPointerException
public cn.zwb.dome1.Demo4(java.lang.String,int) throws java.lang.ClassCastException

        此时直接调用了Constructor类中的toString()方法可以得到构造方法的完整输出;


猜你喜欢

转载自blog.csdn.net/qq1019648709/article/details/79919470