JAVA中反射机制二

反射二 利用反射创建对象

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();

posted on   我是司  阅读(226)  评论(1编辑  收藏  举报

编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示