Java的反色机制是运行时的环境。
Reflection是java被视为(准)动态语言的关键,它允许程序在运行时透过Reflection APIs取得任一个已知名称的类的内部信息。包括modifiers(诸如public,static等等)、superclass(如Object)等,实现的interfaces(如Serializable),也包括fields和methods所有信息,并可以在运行时改变fields内容和调用methods。java这种看透class的能力(the ability of the program to examine itself)被成为introspection(内省)。
反射可以做到:
在运行是判断任意一个对象所属的类。
在运行时构造任意一个类的对象。
在运行时判断任意一个类所具有的对象和方法。
在运行时调用任意一个对象的方法。
java.lang.reflect包
Class类:代表一个类。
Field: 代表成员变量。(成员变量也称为类的属性)。
Method:代表类的方法。
Constructor:代表类的够造方法。
Array类:提供了动态创建数组,以及访问数组元素的方法。
getName():获得类的完整的名字。
getFields():获得类的public类型属性的
getDeclaredFields():获得类的所有属性
getMethods();获得类的public类型方法
getDeclaredMethods():获得类所有方法
getMethod(String name, Class[] parameterTypes):获得类的特定方法,name参数指定方法的名字,parameterTypes 参数指定方法的参数类型。
getConstructors():获得类的public类型的构造方法。
getConstructor(Class[] parameterTypes):获得类的特定构造方法,parameterTypes 参数指定构造方法的参数类型。
newInstance():通过类的不带参数的构造方法创建这个类的一个对象
public class DumpMethods {
public static void main(String[] args)throws Exception {
Class<?> classType = Class.forName(“java.lang.String”);
Method methods[] =classType.getDeclaredMethods();
for(Method m: methods)
{
System.out.println(m.toString());
}
}
}
**********************************************************
例1:
package com.langsin.reflection;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class ReflectTester {
public Object copy(Object object)throws Exception
{
// 获得对象的类型
Class<?> classType = object.getClass();
System.out.println("Class:"+classType.getName());
// 通过默认构造方法创建一个新的对象
Object objectCopy= classType.getConstructor(new Class[]{}).newInstance(new Object[]{});
// 获得对象的所有属性
Field fields[] = classType.getDeclaredFields();
for(Field field: fields)
{
String fieldName = field.getName();
String firstLetter =fieldName.substring(0,1).toUpperCase();
// 获得和属性对应的getXXX()方法的名字
String getMethodName= "get"+firstLetter+fieldName.substring(1);
// 获得和属性对应的setXXX()方法的名字
String setMethodName= "set"+firstLetter+fieldName.substring(1);
// 获得和属性对应的getXXX()方法
Method getMethod = classType.getMethod(getMethodName,new Class[]{});
// 获得和属性对应的setXXX()方法
Method setMethod = classType.getMethod(setMethodName,new Class[]{field.getType()});
// 调用原对象的getXXX()方法
Object value = getMethod.invoke(object,new Class[]{});
System.out.println(fieldName + ":" + value);
// 调用拷贝对象的setXXX()方法
setMethod.invoke(objectCopy, new Object[]{value});
}
return objectCopy;
}
/**
* @param args
*/
public static void main(String[] args)throws Exception {
Customer customer = new Customer("Tom", 21);
customer.setId(new Long(1));
Customer customerCopy =(Customer)new ReflectTester().copy(customer);
System.out.println("Copy information:" + customerCopy.getId() + " " + customerCopy.getName() + " "
+ customerCopy.getAge());
}
}
class Customer
{
private Long id;
private String name;
private int age;
public Customer() {
}
public Customer( String name, int age) {
this.name = name;
this.age = age;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
**************************************
分享到:
相关推荐
Java反射机制的实现_Reflection,适合学习了解反射机制。
在本篇文章里小编给大家分享了关于java反射机制Reflection的相关知识点,需要的朋友们学习下。
Java 反射机制、Java 的类反射机制、Java 反射机制的学习、Java 反射Reflection--运行时生成实例 java反射机制的手册文档
Reflection in Java. 介绍Java中的反射机制,候捷谈Java反射机制
轻松掌握java反射技术,虽然讲得比较简单,但是通俗易懂。
Java反射机制及各成份所对应的Reflection APIs
之前上课的时候老师总结的JavaReflection反射学习资料,内容简单易懂,浅显易懂,适合小白入手学习。。
JAVA反射机制及应用例子.。。Reflection API
Java反射机制修改私有成员变量的实现_Reflection,普通方式无法修改私有成员变量的值,但通过反射机制可以实现。
关于java反射机制的很好的讲解,包括Java的反射机制(Reflection)、Class类、如何获得类的相关信息和运用,并且还有相应的练习,有助于更好地学习java反射机制
Java 反射机制主要提供 了以下功能: 在运行时判断任意一个对象所属的类; 在运行时构造任意一个类的对象; 在运行时判断任意一个类所具有的成员变量和方法; 在运行时调用任意一个对象的方法; 生成动态...
反射机制是如今很多流行框架的实现基础,其中包括Spring、Hibernate等。原理性的问题不是本文的重点,接下来让我们在实例中学习这套精彩的机制。 1. 得到某个对象的属性 public Object getProperty(Object owner, ...
java反射,设置属性值,获得属性,具有多个对象同事设置,缓存的处理,
一篇结合了众多关于Java反射机制...Java反射机制的核心就是允许在运行时通过Java Reflection APIs来取得已知名字的class类的相关信息,动态地生成此类,并调用其方法或修改其域(甚至是本身声明为private的域或方法)。
1. 反射的用途 Uses of Reflection Reflection is commonly used by programs which require the ...如果能把这句警示时刻放在心里,那么反射机制就会成为一项强大的技术,可以让应用程序做一些几乎不可能做到的事情。
讲述java 反射机制的典型示例,通过学习应该能很好的掌握
Java反射机制与动态代理 浪曦 Java Reflection API 简介 及动态代理
JAVA的内省机制(introspector)与反射机制(reflection).docx
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。...
一、java反射机制概述 Reflection (反射)被视为动态语言的关键,为什么这么说呢,是因为它在运行时就确定下来了。反射机制允许程序在执行期间借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的...