java反射2-----------------取得构造方法

关于java反射学习记录:

4.取得构造
 * 大部分情况下,在进行任何的开发之中是不会考虑使用构造方法进行参数传递的,因为在进行类标准设计的时候都会明确给出
 * 一个要求:类中必须提供有无参构造方法,所以在这样的情况下,构造的反射调用意义实际上就不大了
 * 如果一个类中没有无参构造方法时,那么就需要由用户调用指定的构造方法,而在Class类里面提供有如下取得构造方法的操作:
 * |-取得全部构造:getConstructors()
 * |-取得指定构造:getConstructor(Class<?>...parameterTypes),取得指定构造时,它所匹配的只是参数的类型
 * 以上两个方法都是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)
 * 对于方法修饰符都是利用数字完成的(public 1,private 5,protected 8,public final 10,public static final 20....),
 * 所以必须将数字翻译为可以读懂的字符串,而这个实现就可以通过一个类完成:java.lang.reflect.Modifier类完成,里面
 * 有一个操作方法:public static String toString(int mod)
 * 以上的操作形式会在一些开发工具中出现,而在程序之中出现的意义不大,而在程序里面最关心的是如何利用构造方法

 * 明确的调用有参构造实例化对象

//        Class<?> cls=Class.forName("com.lyt.vo.Dept");
//        Constructor<?>[] cons=cls.getConstructors();//取得全部构造
//        for(int i=0;i<cons.length;i++){
////            System.out.println(cons[i]);//此时直接调用了Constructor类中的toString()方法
////            System.out.println(cons[i].getName());
//            StringBuffer buf=new StringBuffer();
//            buf.append(Modifier.toString(cons[i].getModifiers())).append(" ");//修饰符
//            buf.append(cons[i].getName());//构造方法名称
//            buf.append(" (");
//            Class<?>[] params=cons[i].getParameterTypes();//取得构造方法的参数类型
//            if(params.length>0){//有参数
//                for(int j=0;j<params.length;j++){
//                    buf.append(params[j].getSimpleName()).append(" ref").append(j).append(",");
//                }
//                buf.delete(buf.length()-1, buf.length());
//            }
//            buf.append(")");
//            Class<?>[] exp=cons[i].getExceptionTypes();
//            if(exp.length>0){
//                buf.append(" throws");
//                for(int j=0;j<exp.length;j++){
//                    buf.append(exp[j].getSimpleName()).append(",");
//                }
//                buf.delete(buf.length()-1, buf.length());
//            }
//            System.out.println(buf);

//        }

//        Class<?> cls=Class.forName("com.lyt.vo.Dept");
//        Constructor<?> con=cls.getConstructor(String.class,int.class);
//        Object obj=con.newInstance("测试部",20);
//        /**
//         * 在进行项目设计的时候不可能一会儿考虑有参构造,一会儿考虑无参构造,这是不可行的事情,所以
//         * 在开发中就明确给出了,简单java类必须要提供有无参构造
//         */

猜你喜欢

转载自blog.csdn.net/amuist_ting/article/details/80680424
今日推荐