大家都知道反射技术在Java里面时非常重要的一个技术点,因为Java好多框架的编写都是基于反射的,别的不多说,spring框架里面的IOC就是基于反射实现。那么什么是反射呢?JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。说白了,反射就是加载类,并且反射出类的各个组成部分的一种实现方式。

那么我们如何去加载一个类呢?可以通过以下几种方式实现。

public void testLoadClass() throws ClassNotFoundException {

        // 获取字节码类,可以采用一下三种方法
// 相当于加载Person.class文件加入到内存中
Class clazz = Class.forName("com.day09.Person");
Class clazz1 = new Person().getClass();
Class clazz2 = Person.class;
}

Java是一种面向对象的语言,而Java创建对象的一般都是通过new+构造方法来创建对象的,所以我们先来看看如何反射类的构造方法。同时,因为Java的方法重载机制,所以构造方法也存在多种性质,下面我们的例子将演示几种最常见的构造方法,并利用反射来用他们来创建对象。

1.定义一个简单的Person类

package com.day09;

import java.util.List;

public class Person {
public Person() {
System.out.println("Person");
} public Person(String name) {
System.out.println("person name");
} public Person(String name, int password) {
System.out.println("Person name password");
} private Person(List list) {
System.out.println("Person list"); } }

2.利用Junit来演示进行演示测试

package com.day09;

import java.util.List;
import java.lang.reflect.Constructor;
import java.util.ArrayList; import org.junit.Test; /**
* 放射就是加载类,并解剖出类的各个组成部分 类的组成部分: 1.构造方法:创建对象 2.属性字段:封装数据 3.属性方法:封装功能
*
* @author Administrator
*
*/
public class ReflectConstructDemo {
@Test
public void testLoadClass() throws ClassNotFoundException { // 获取字节码类,可以采用一下三种方法
// 相当于加载Person.class文件加入到内存中
Class clazz = Class.forName("com.day09.Person");
Class clazz1 = new Person().getClass();
Class clazz2 = Person.class;
} /**
* public Person() 反射无参构造方法
*
* @throws Exception
*/
@Test
public void reflectConstructNoParameter() throws Exception {
// 将person类加载到内存中
Class<?> clazz = Class.forName("com.day09.Person");
// 传入参数,获取对应的构造函数
Constructor<?> personCon = clazz.getConstructor(null);
// 传入参数开始创建对象
Person p = (Person) personCon.newInstance(null);
} /**
* 反射带有一个参数构造方法构造方法 public Person(String name)
*
* @throws Exception
*/
@Test
public void reflectConstructOneParameter() throws Exception {
// 将person类加载到内存中
Class<?> clazz = Class.forName("com.day09.Person");
// 传入参数,获取对应的构造函数,这里面要传入一个参数类型,来获取对应参数的构造方法
Constructor<?> personCon = clazz.getConstructor(String.class);
// 传入参数开始创建对象
Person p = (Person) personCon.newInstance("zhangsan");
} /**
* 反射带有多个参数构造方法构造方法 Person(String name, int password)
*
* @throws Exception
*/
@Test
public void reflectConstructManyParameter() throws Exception {
// 将person类加载到内存中
Class<?> clazz = Class.forName("com.day09.Person");
// 传入参数,获取对应的构造函数,这里面要传入一个参数类型,来获取对应参数的构造方法
Constructor<?> personCon = clazz.getConstructor(String.class, int.class);
// 传入参数开始创建对象
Person p = (Person) personCon.newInstance("zhangsan", 23);
} /**
* 反射私有的构造方法构造方法 private Person(List list)
*
* @throws Exception
*/
@Test
public void reflectPrivateConstruct() throws Exception {
// 将person类加载到内存中
Class<?> clazz = Class.forName("com.day09.Person");
// 传入参数,获取对应的构造函数,这里面要传入一个参数类型,来获取对应参数的构造方法
// 这里因为该构造方法是私有的,所以用用getDeclaredConstructor才能获得构造方法对象
Constructor<?> personCon = clazz.getDeclaredConstructor(List.class);
// 要使用私有的属性成员,还需要放开权限,设为可见
personCon.setAccessible(true);
// 传入参数开始创建对象
Person p = (Person) personCon.newInstance(new ArrayList());
} /**
* 通过class类,可以直接通过无参的构造方法创建对象
*
* @throws Exception
*/ @Test
public void testNewObj() throws Exception {
// 将person类加载到内存中
Class<?> clazz = Class.forName("com.day09.Person");
Person p = (Person) clazz.newInstance();
}
}

至此,我们已将常见的几种通过反射获得构造方法,并创建对象演示完毕,有不足的地方,希望大家多多提意见!

java反射——构造方法的更多相关文章

  1. Java 反射 调用私有构造方法

    单例类: package singleton; public class SingletonTest { // 私有构造方法 private SingletonTest(){ System.out.p ...

  2. Java反射之构造方法反射

    上一篇Java反射之Class类我们介绍了java反射的关键类Class, 反射就是由一个java类映射得到一个java类. 所以,我们自然能想到,一个类中应该有哪些属性,这里做个比方,人有名字年龄等 ...

  3. Java反射机制

    Java反射机制 一:什么事反射机制 简单地说,就是程序运行时能够通过反射的到类的所有信息,只需要获得类名,方法名,属性名. 二:为什么要用反射:     静态编译:在编译时确定类型,绑定对象,即通过 ...

  4. java反射(基础了解)

    package cn.itcast_01; /** *Person类 */ public class Person {    /** 姓名 */    private String name;     ...

  5. java基础知识(十一)java反射机制(上)

    java.lang.Class类详解 java Class类详解 一.class类 Class类是java语言定义的特定类的实现,在java中每个类都有一个相应的Class对象,以便java程序运行时 ...

  6. java基础知识(十一)java反射机制(下)

    1.什么是反射机制? java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象都能够调用他的属性和方法,这种动态获取属性和方法的功能称为java的反射机制. ...

  7. java反射学习之一反射机制概述

    一.反射机制背景概述 1.反射(reflection)是java被视为动态语言的一个关键性质 2.反射机制指的是程序在运行时能获取任何类的内部所有信息 二.反射机制实现功能概述 1.只要给定类的全名, ...

  8. java反射 之 反射基础

    一.反射 反射:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为 ...

  9. java 反射机制

    1.反射机制是什么: (1)反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能 ...

随机推荐

  1. openssl C语言编码实现rsa加密

    非原创, 引用自: 1 CC=gcc CPPFLAGS= -I /home/yyx//openssl-1.0.1t/include/ CFLAGS=-Wall -g LIBPATH = -L /usr ...

  2. xjc编码

    本篇文章是对jaxb xjc编码的问题进行了详细的分析介绍,需要的朋友参考下   平时喜欢根据写一个xjc批处理命令,根据xsd批量生成java类,觉得很方便也很酷.但是有时候xsd生成的java类中 ...

  3. Memcache应用场景介绍,说明[zz]

    转于:http://www.cnblogs.com/literoad/archive/2012/12/23/2830178.html 面临的问题 对于高并发高访问的 Web应用程序来说,数据库存取瓶颈 ...

  4. 2015&#183;Fool&#39;s Day&#183;NND

    本博文没有主旨,仅仅是记录. ============================ Date:2015/4/1 - April Fool's Day! Addr:ZhongHai ======== ...

  5. nginx 查看访问 IP 并封禁 IP 详解

    1.查找服务器所有访问者ip方法: awk '{print $1}' nginx_access.log |sort |uniq -c|sort -n nginx.access.log 为nginx访问 ...

  6. jdbc.properties

    #privilege database privilege.jdbc.driverClassName=com.mysql.jdbc.Driver privilege.jdbc.url=jdbc\:my ...

  7. hadoop本地化运行

    mr的三种运行方式 第一种,打成jar包,在hadoop上运行 第二种,driver端在本地,通过ide连接linux上的hdfs 第三种,windows本地运行 hadoop_dll2.6.0_64 ...

  8. spring读取配置文件PropertyPlaceholderConfigurer类的使用

    这里主要介绍PropertyPlaceholderConfigurer这个类的使用,spring中的该类主要用来读取配置文件并将配置文件中的变量设置到上下文环境中,并进行赋值. 一.此处使用list标 ...

  9. 如何将自己的网站分享到QQ空间,微信,微博等等。

    逛一些网站的时候经常会看到右侧挂个分享栏,让用户把自己的站分享到qq空间,微信等等,所以自己也研究了下,把他加到了自己的网站上,喜欢的可以先看看效果:去转盘网,不多说了,直接上代码: window._ ...

  10. [Android] Ubuntu下Eclipse || Android Studio识别不了手机的官方解决方案

    最近在转移开发平台,Android Studio一直都识别不了手机,但Eclipse却可以.经过一番调查后,发现是自己一点所以然导致的.接下来直接奉上解决教程 解决教程 在命令行终端输入lsusb命令 ...