版权声明:尊重原创,码字不易,转载需博主同意。 https://blog.csdn.net/qq_34626097/article/details/84962474
java 利用反射创建运行时类的对象
1. java 利用反射创建运行时类的对象
1.1. 创建类的对象:调用Class对象的newInstance()方法
要 求:
- 类必须有一个无参数的构造器。(默认无参,指定调用有参的构造器)
- 类的构造器的访问权限需要足够。
难道没有无参的构造器就不能创建对象了吗?
不是!只要在操作的时候明确的调用类中的构造方法,并将参数传递进去之后,才可以实例化操作。步骤如下:
- 通过Class类的getDeclaredConstructor(Class … parameterTypes)取得本类的指定形参类型的构造器
- 向构造器的形参中传递一个对象数组进去,里面包含了构造器中所需的各个参数。
- 在Constructor类中存在一个方法
public T newInstance(Object … initargs)
注:以上为反射最常用的和用的最多的地方了。
2.例子demo
- 代码
@Test
public void test1() throws Exception {
String className = "testReflection.Person";
Class clazz = Class.forName(className);
//创建对应的运行时类的对象.使用newInstance(),实际就是调用了运行时类的空参的构造器
//要想能够创建承购:①要求对应的运行时类要有空参的构造器
//②构造器的权限修饰符的权限要足够
Object obj = clazz.newInstance();
Person p = (Person)obj;
System.out.println(p);
}
- 总结
- 创建类的时候,尽量保留空参的构造器
好处:- 有可能我们要通过Java反射机制去创建类对象
- 子类实例化的时候,会调用父类的空参构造器,如果没有空参构造器,会报错
3. 反射创建对象和正常对象的底层理解
- 其实两种方法都是通过调用类的构造器(Constructor)创建对象的,只是反射的方法,是先有一个大的Class类,再去找到其对应的构造器,然后创建。
- 正常方式的创建对象是当我们new 的时候,就已经调用的构造器去创建对象了。