如何利用java的反射机制动态创建对象

Python020

如何利用java的反射机制动态创建对象,第1张

Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。这一概念的提出很快引发了计算机科学领域关于应用反射性的研究。它首先被程序语言的设计领域所采用,并在Lisp和面向对象方面取得了成绩。当然反射本身并不是一个新概念,它可能会使我们联想到光学中的反射概念,尽管计算机科学赋予了反射概念新的含义,但是,从现象上来说,它们确实有某些相通之处,这些有助于我们的理解。

Java反射机制主要提供下面几种用途:

在运行时判断任意一个对象所属的类

在运行时构造任意一个类的对象

在运行时判断任意一个类所具有的成员变量和方法

在运行时调用任意一个对象的方法

以下,我们就以动态创建对象为例,通过代码来解释一下反射:

public class ReflectionTest {

public static void main(String[] args) throws Exception {

// 建立学生对象

Student student = new Student()

// 为学生对象赋值

student.setStuName("Wanggc")

student.setStuAge(24)

// 建立拷贝目标对象

Student destStudent = (Student) copyBean(student)

// 输出拷贝结果

System.out.println(destStudent.getStuName() + ":"

+ destStudent.getStuAge())

}

/**

* 拷贝学生对象信息。

*

* @param from

拷贝源对象

* @param dest

拷贝目标对象

* @throws Exception

例外

*/

private static Object copyBean(Object from) throws Exception {

// 取得拷贝源对象的Class对象

Class<?>fromClass = from.getClass()

// 取得拷贝源对象的属性列表

Field[] fromFields = fromClass.getDeclaredFields()

// 取得拷贝目标对象的Class对象

Object ints = fromClass.newInstance()

for (Field fromField : fromFields) {

// 设置属性的可访问性

fromField.setAccessible(true)

// 将拷贝源对象的属性的值赋给拷贝目标对象相应的属性

fromField.set(ints, fromField.get(from))

}

return ints

}

}

java的反射用法:(异常请自行处理)

①找到类:Class cl = Class.forName("java.util.Date")

②创建对象(要求这个类中含有空参数的构造方法):Object obj = cl.newInstence()

③根据名称和参数找方法:Method method1 = cl.getMethod("getTime")//如果没有参数不用写第二个参数如果有参数的如:Method method2 = cl.getMethod("setTime",long.class)

④在某个对象上面执行方法,Object result = method1.invoke(obj)//如果有参数的Object result = method2.invoke(obj,21317362721)

执行的方如果有返回值,将返回值返回,否则返回null

java开发工程师岗位职责:

1、负责公司网站开发和维护;

2、负责对网站进行实施,测试;

3、负责现有网站的维护和升级;

4、负责解决开发过程中的技术问题;

5、负责网站开发文档编写工作;

6、统一代码风格、监督团队开发、落实测试、验收代码质量;

7、参与软件系统设计,能编写代码。