通过反射创建对应运行时类的对象

目录

newInstance()方法

要想此方法正常的创建运行时类的对象,要求:

在javabean中要求提供一个public的空参构造器。原因:

反射创建对象的测试1

体现反射动态性的测试2

程序运行呈现动态性

newInstance()方法

调用此方法,创建对应的运行时类的对象。内部调用了运行时类的空参的构造器。

要想此方法正常的创建运行时类的对象,要求:

1.运行时类必须提供空参的构造器

2.空参的构造器的访问权限得够。通常,设置为public。

在javabean中要求提供一个public的空参构造器。原因:

1.便于通过反射,创建运行时类的对象

2.便于子类继承此运行时类时,默认调用super()时,保证父类有此构造器

反射创建对象的测试1

    public void test1() throws IllegalAccessException, InstantiationException {

        Class<Person> clazz = Person.class;//泛型
        Person obj = clazz.newInstance();
        System.out.println(obj);
    }

由于调用的空参构造器为

public Person() {
   System.out.println("Person()");
}

同时还有toString()方法

@Override
public String toString() {
   return "Person{" +
      "name='" + name + '\'' +
       ", age=" + age +
       '}';
}

所以最后的输出结果为

Person()
Person{name='null', age=0}

体现反射动态性的测试2

    public void test2(){

        for(int i = 0;i < 1;i++){
            int num = new Random().nextInt(3);//0,1,2
            String classPath = "";
            switch(num){
                case 0:
                    classPath = "java.util.Date";//sql下的Date没有空参构造器
                    break;
                case 1:
                    classPath = "java.lang.Object";
                    break;
                case 2:
                    classPath = "com.atguigu.java.Person";
                    break;
            }

            try {
                Object obj = getInstance(classPath);
                System.out.println(obj);
                System.out.println(classPath);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        
    }
    /*
    创建一个指定类的对象。
    classPath:指定类的全类名
     */
    public Object getInstance(String classPath) throws Exception {
       Class clazz =  Class.forName(classPath);
       return clazz.newInstance();
    }

程序运行呈现动态性

当输出的num为2时,输出的结果为

Person()
Person{name='null', age=0}
com.atguigu.java.Person

当输出的num为1时,输出的结果为

java.lang.Object@504bae78
java.lang.Object 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值