zoukankan      html  css  js  c++  java
  • JAVA中反射机制二

    声明:如需转载请说明地址来源:http://www.cnblogs.com/pony1223

    反射二 利用反射创建对象

    1.利用反射创建对象,首先我们创建一个类,类里面,我们知道构造函数有默认的构造函数,带参数的构造函数,私有的构造函数,如下,创建一个Person类:

    package study.reflect;
    
     
    
    import java.util.List;
    
     
    
    public class Person
    
    {
    
        /**
    
         * 为了测试用
    
         */
    
        public String name = "test";
    
       
    
        public Person()
    
        {
    
          
    
        }
    
       
    
        public Person(String name)
    
        {
    
           System.out.println("name:"+name);
    
        }
    
       
    
        public Person(String name,int age)
    
        {
    
           System.out.println("name:"+name+",age:"+age);
    
        }
    
       
    
        private Person(List list)
    
        {
    
           System.out.println("list");
    
        }
    
    }

    2.利用反射创建出我们的Person类的实例,为了测试,因此上面在Person中有一个属性为public String name = "test"; 如果创建不出对象,那么会出现空指针现象。

    代码如下:

    package study.reflect;
    
     
    
    import java.lang.reflect.Constructor;
    
    import java.util.ArrayList;
    
    import java.util.List;
    
     
    
    import org.junit.Test;
    
     
    
    /*
    
     * 利用反射解析出构造函数,使用构造函数创建对象
    
     */
    
    public class Demo02
    
    {
    
        @Test
    
        public void test01() throws Exception
    
        {
    
        Class<?> clazz = Class.forName("study.reflect.Person");
    
        Constructor constructor = clazz.getConstructor(null);
    
        Person person  = (Person) constructor.newInstance(null);
    
        System.out.println(person.name);
    
        }
    
       
    
        @Test
    
        public void test02() throws Exception
    
        {
    
           Class<?> clazz = Class.forName("study.reflect.Person");
    
           Constructor constructor = clazz.getConstructor(String.class);
    
           Person person  = (Person) constructor.newInstance("hello");
    
           System.out.println(person.name);
    
        }
    
       
    
       
    
        @Test
    
        public void test03() throws Exception
    
        {
    
           Class<?> clazz = Class.forName("study.reflect.Person");
    
           Constructor constructor = clazz.getConstructor(String.class,int.class);
    
           Person person  = (Person) constructor.newInstance("hello",123);
    
           System.out.println(person.name);
    
        }
    
       
    
       
    
        @Test
    
        public void test04() throws Exception
    
        {
    
           Class<?> clazz = Class.forName("study.reflect.Person");
    
           Constructor constructor = clazz.getDeclaredConstructor(List.class);
    
           constructor.setAccessible(true);
    
           Person person  = (Person) constructor.newInstance(new ArrayList());
    
           System.out.println(person.name);
    
        }
    
       
    
    }

    3.若想通过类的不带参数的构造方法来生成对象,我们有两种方式:

    (1)通过上面说的构造函数的方式反射出对象;(2)1.先获得Class对象,然后通过该Class对象的newInstance()方法直接生成即可:

      Class<?> classType = String.class;

      Object obj = classType.newInstance();

  • 相关阅读:
    Json 格式 不能加注释
    优雅是的使用Lambda .map函数
    Tomcat-redis-solr-zookeeper启动命令
    今日静态页面集成
    JMS
    freemarker模板引擎技术
    vscode----vue模板--用户代码片段--快捷
    js求总页数:总条数,每页条数
    新建vue项目
    大数据可视化之---echarts地图组件
  • 原文地址:https://www.cnblogs.com/pony1223/p/7445950.html
Copyright © 2011-2022 走看看