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

导读:本篇文章讲解 通过反射创建对应运行时类的对象,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

目录

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 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/83282.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!