A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

Constructor类: 它的实例对象表示某个类中的一个构造方法
  1 得到某个类所有的构造方法 ,保存在一个Constructor类型的数组中
      例:Constructor[] constructor = Class.forNamme("java.lang.String").getConstructors();

  2 得到某各类其中的一个构造方法,根据构造方法的参数类型和个数获取
      例:Constructor constructor = Class.froName("java.lang.String").getConstructor(StringBuffer.class);
          Constructor constructor = Class.froName("java.lang.String").getConstructor(StringBuffer.class, int.class);
          StringBuffer.class 是该构造方法的参数类型,.getConstructor(StringBuffer.class)代表获取一个参数类型是StringBuffer的构造方法
          
  3 newInstance()方法,获得一个类的实例对象
      获得步骤:获得类Class实例对象 --> 获得Constructor构造方法 ---> 获得Object实例对象

      代码实例:获取String类的实例对象

   import java.lang.reflect.Constructor;
   import java.lang.reflect.InvocationTargetException;

   public class StringReflection {
        public static void main(String []args){
                /**
                 * 练习:用反射机制实现,获取String类对象,
                 */
               
                Class cls = null;
                Constructor constructor = null;
                String str = null;
                try {
                        //1.获取String类的Class实例对象
                         cls = Class.forName("java.lang.String");
                         
                         //2.根据参数类型,获取String类对应的构造方法
                         constructor = cls.getConstructor(String.class);        //String.class 对象参数类型,格式是参数类型.class       
                         
                         //3.获取String对象,constructor.newInstance("abc")表示用该类构造方法来创建该构造方法的声明类的新实例,
                         //并用指定的初始化参数初始化该实例,这里编译时不知constructor是属于谁的构造方法,所以这里强制转型一下
                         str = (String)constructor.newInstance("abc");        //newInstance("abc") 相当于new new String("abc");
                         //取得str对象可以进行操作
                         System.out.println(str.charAt(2));
                         System.out.println(str);
                } catch (ClassNotFoundException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                } catch (NoSuchMethodException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                } catch (SecurityException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                } catch (InstantiationException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                } catch (IllegalAccessException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                } catch (IllegalArgumentException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                } catch (InvocationTargetException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
        }
}


        Class类也有newInstance()方法,它返回的是无参构造函数的对象

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马