java 利用反射创建运行时类的对象

版权声明:尊重原创,码字不易,转载需博主同意。 https://blog.csdn.net/qq_34626097/article/details/84962474

1. java 利用反射创建运行时类的对象

1.1. 创建类的对象:调用Class对象的newInstance()方法

要 求:

  1. 类必须有一个无参数的构造器。(默认无参,指定调用有参的构造器)
  2. 类的构造器的访问权限需要足够。

难道没有无参的构造器就不能创建对象了吗?
不是!只要在操作的时候明确的调用类中的构造方法,并将参数传递进去之后,才可以实例化操作。步骤如下:

  1. 通过Class类的getDeclaredConstructor(Class … parameterTypes)取得本类的指定形参类型的构造器
  2. 向构造器的形参中传递一个对象数组进去,里面包含了构造器中所需的各个参数。
  3. 在Constructor类中存在一个方法
    public T newInstance(Object … initargs)

注:以上为反射最常用的和用的最多的地方了

2.例子demo

  1. 代码
@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);		
	}
  1. 总结
  2. 创建类的时候,尽量保留空参的构造器
    好处:
    • 有可能我们要通过Java反射机制去创建类对象
    • 子类实例化的时候,会调用父类的空参构造器,如果没有空参构造器,会报错

3. 反射创建对象和正常对象的底层理解

  1. 其实两种方法都是通过调用类的构造器(Constructor)创建对象的,只是反射的方法,是先有一个大的Class类,再去找到其对应的构造器,然后创建。
  2. 正常方式的创建对象是当我们new 的时候,就已经调用的构造器去创建对象了。

猜你喜欢

转载自blog.csdn.net/qq_34626097/article/details/84962474