反射创建对象

本文探讨了Java反射的动态性,展示了如何在代码运行时根据业务需求动态创建对象。通过示例代码,演示了如何利用反射的getConstructor方法实例化对象,以及获取Class的不同方法,包括使用.class属性、对象的getClass()方法、Class.forName()和ClassLoader。
摘要由CSDN通过智能技术生成
* 反射的动态性
* 在代码运行过程中,并不知道需要造哪个对象(根据业务来决定需要造的对象)
* 因此需要反射在运行时造对象   体现了反射的动态性  编译过程并不知道需要造哪个对象,只有在运行时,根据客户的需求造对象
package Reflection;

import org.junit.Test;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;


/**
 * 反射的动态性
 * 在代码运行过程中,并不知道需要造哪个对象(根据业务来决定需要造的对象)
 * 因此需要反射在运行时造对象   体现了反射的动态性  编译过程并不知道需要造哪个对象,只有在运行时,根据客户的需求造对象
 *
 */

public class ReflectionTest {

    @Test
    public void test() throws Exception {

        Class personClass = Person.class;

        //1、通过反射,创建Person类的对象
        Constructor cons = personClass.getConstructor(String.class, int.class);

        Object tom = cons.newInstance("Tom", 12); //实例化对象 Person tom1 = new Person("Tom", 12);
        Person p = (Person) tom;
        System.out.println(p.toString());

    
    }


    // 获取Class的实例
    @Test
    public void test3() throws Exception {

        //方式一:调用运行时类的属性:.class
        Class<Person> clazz1 = Person.class;
        System.out.println(clazz1);

        //方式二:通过运行时类的对象,调用getClass()
        Person person = new Person();
        Class clazz2 = person.getClass();
        System.out.println(clazz2);

        //方式三:调用Class的静态方法: forName(String classPath) 全类名   常用:编译时不去确定,运行时确定,类体现反射的动态性
        Class clazz3 = Class.forName("Reflection.Person");
        System.out.println(clazz3);

        System.out.println(clazz1 == clazz2); //true
        System.out.println(clazz1 == clazz3); //true


        //方式四:使用类的加载器:ClassLoader
        ClassLoader classLoader = ReflectionTest.class.getClassLoader();
        Class<?> clazz4 = classLoader.loadClass("Reflection.Person");
        System.out.println(clazz4);
        System.out.println(clazz1 == clazz4); //true
    }
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值