反射操作构造方法

1.1.1 通过获取的构造创建对象

步骤:

1.获得Class对象

2获得构造

3.通过构造对象获得实例化对象

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: 方法接受一个可变参数, 可以根据传入的类型, 来匹配对应的构造方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值