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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

【郑州校区】反射操作构造方法

1.1.1 通过获取的构造创建对象
步骤:
1.获得Class对象
2获得构造
3.通过构造对象获得实例化对象
[AppleScript] 纯文本查看 复制代码
package com.itheima_01;

 

import java.lang.reflect.Constructor;

import java.lang.reflect.InvocationTargetException;

 

/*

 *        通过反射获取构造方法并使用

 *        Constructor<?>[] getConstructors()  

 *        Constructor<T> getConstructor(Class<?>... parameterTypes)

 *         T newInstance()   

 *

 *Constructor:

 *                 T newInstance(Object... initargs)  

 */

public class ReflectDemo2 {

public static void main(String[] args) throws ReflectiveOperationException {

Class clazz = Class.forName("com.itheima_01.Student");


//method(clazz);

//Constructor<T> getConstructor(Class<?>... parameterTypes)

//method2(clazz);

//method3(clazz);


Object obj = clazz.newInstance();

System.out.println(obj);

 



}

 

private static void method3(Class clazz)

throws NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException {

Constructor c = clazz.getConstructor(String.class,int.class);//获取有参构造,参数1类型为String,参数2类型为int

System.out.println(c);

Object obj = c.newInstance("lisi",30);

System.out.println(obj);

}

 

private static void method2(Class clazz)

throws NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException {

Constructor c = clazz.getConstructor();//获取无参构造

System.out.println(c);

Object obj = c.newInstance();

System.out.println(obj);

}

 

private static void method(Class clazz) {

//Constructor<?>[] getConstructors() :获取所有public修饰的构造方法

Constructor[] cs = clazz.getConstructors();

for (int i = 0; i < cs.length; i++) {

System.out.println(cs);

}

}


}
1.1.2 问题: 直接通过Class类中的newInstance()和获取getConstructor()有什么区别?
newInstance()方法, 只能通过空参的构造方法创建对象
getConstructor(Class<T>… parameterTypes)方法, 方法接受一个可变参数, 可以根据传入的类型来匹配对应的构造方法
        
        
总结
        Constructor<?>[] getConstructors()
                        Constructor<T> getConstructor(Class<?>... parameterTypes)
            
                        方法1: 获取该类中所有的构造方法, 返回的是一个数组
                        方法2: 方法接受一个可变参数, 可以根据传入的类型, 来匹配对应的构造方法
传智播客·黑马程序员郑州校区地址
河南省郑州市 高新区长椿路11号大学科技园(西区)东门8号楼三层
联系电话 0371-56061160/61/62
来校路线  地铁一号线梧桐街站A口出

0 个回复

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