声明:如需转载请说明地址来源: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();

JAVA中反射机制二的更多相关文章

  1. Java中反射机制和Class.forName、实例对象.class(属性)、实例对象getClass()的区别

    一.Java的反射机制   每个Java程序执行前都必须经过编译.加载.连接.和初始化这几个阶段,后三个阶段如下图:   其中

  2. JAVA中反射机制一

    反射一 基本概念 一.反射机制的基本概念 什么是反射?反射是指在运行状态中,对于任意一个类,都可以获取到这个类的所有属性和方法:对于任意一个对象,都能够调用这个对象的任意方法和属性:这种动态获取信息及 ...

  3. Java中反射机制详解

    序言 在学习java基础时,由于学的不扎实,讲的实用性不强,就觉得没用,很多重要的知识就那样一笔带过了,像这个马上要讲的反射机制一样,当时学的时候就忽略了,到后来学习的知识中,很多东西动不动就用反射, ...

  4. JAVA中反射机制五(java.lang.reflect包)

    一.简介 java.lang.reflect包提供了用于获取类和对象的反射信息的类和接口.反射API允许对程序访问有关加载类的字段,方法和构造函数的信息进行编程访问.它允许在安全限制内使用反射的字段, ...

  5. JAVA中反射机制六(java.lang.reflect包)

    一.简介 java.lang.reflect包提供了用于获取类和对象的反射信息的类和接口.反射API允许对程序访问有关加载类的字段,方法和构造函数的信息进行编程访问.它允许在安全限制内使用反射的字段, ...

  6. JAVA中反射机制四

    声明:如需转载请说明地址来源:http://www.cnblogs.com/pony1223 反射四 利用反射获取类的属性 1.通过反射也可以获取到类中的属性,假设我们继续使用Person这个类,然后 ...

  7. JAVA中反射机制三

    声明:如需转载请说明地址来源:http://www.cnblogs.com/pony1223 反射三 利用反射获取对象的方法,并调用方法 1.利用反射获取对象的方法,我们仍然利用上面的Person类, ...

  8. JAVA中反射机制五(JavaBean的内省与BeanUtils库)

    内省(Introspector) 是Java 语言对JavaBean类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类,主要用于传递数据信息,这种类中的方法主要用于访问私有的字段,且方法 ...

  9. java中反射机制通过字节码文件对象获取字段和函数的方法

    pclass = Class.forName("get_class_method.Person"); //Field ageField = pclass.getField(&quo ...

随机推荐

  1. Team Work总结 && OPP课程总结

    团队作业总结 工作总结 本次大作业我在团队内的工作是:根据框架构建实现建筑类的功能,包括防御塔.水晶.泉水等建筑.根据架构框架以及结合各建筑的特点,利用继承和多态很快速的解决了一些基本的问题.然而在实 ...

  2. Scala快速入门-函数组合

    compose&andThen 两个函数组装为一个函数,compose和andThen相反 def f(test: String):String = { "f(" + te ...

  3. PAT 甲级 1040 Longest Symmetric String

    https://pintia.cn/problem-sets/994805342720868352/problems/994805446102073344 Given a string, you ar ...

  4. CentOS 7 U盘安装问题解决

    最近期待以久的CentOS 7正式版终于发布了,在家里无聊,所以就打算在我的小Y上安装一下,由于笔记本原来有安装Windows 7 操作系统,考虑使用的需求,所以决定安装双系统: 1.         ...

  5. 第123天:移动web开发中的常见问题

    一.函数库 underscoreJS _.template: <ol class="carousel-indicators"> <!--渲染的HTML字符串--& ...

  6. asp.netMVC中权限控制论

    这里设想了一个简单的思路,如果用户登录了,也就是session中有值才可以在控制器中操作,这样先添加一个控制器,如下代码: public class AuthController : Controll ...

  7. 关于slow http attack以及apche tomcat的应对方式

    HTTP 的 Slow Attack 有着悠久历史的 HTTP DOS 攻击方式,最早大约追溯到 5 年前,按理说早该修复了,但是 Apache 的默认配置中仍然没有添加相关配置,或者他们认为这是 f ...

  8. 3294 [SCOI2016]背单词

    题目描述 Lweb 面对如山的英语单词,陷入了深深的沉思,”我怎么样才能快点学完,然后去玩三国杀呢?“.这时候睿智的凤老师从远处飘来,他送给了 Lweb 一本计划册和一大缸泡椒,他的计划册是长这样的: ...

  9. The Toll! Revisited UVA - 10537(变形。。)

    给定图G=(V,E)G=(V,E),VV中有两类点,一类点(AA类)在进入时要缴纳1的费用,另一类点(BB类)在进入时要缴纳当前携带金额的1/20(不足20的部分按20算) 已知起点为SS,终点为TT ...

  10. 【UOJ#79】一般图最大匹配(带花树)

    [UOJ#79]一般图最大匹配(带花树) 题面 UOJ 题解 带花树模板题 关于带花树的详细内容 #include<iostream> #include<cstdio> #in ...