1.JAVA中无论生成一个类的多少个对象,这些对象都会对应同一个Class对象.
2.获取某个类或对象所对应的Class对象的常用的3种方式:
a.使用Class类的静态方法forName,Class.forName("java.lang.String");
b.使用.class语法:String.class;
c.使用对象的getClass()方法: String s = "aa"; Class<?> clazz = s.getClass();
3.若想通过类的不带参数的构造方法来生成对象,我们有两种方式:
a.先将获得Class对象,然后通过该Class对象的newInstance()方法直接生成即可:Class<?> classType = String.class;Object obj = classType.newInstance();
b.先获得Class对象,然后通过该对象获得对应的Constructor对象,
在通过该Constructor对象的newInstance()方法生成
package com.jelly.reflect;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
* JAVA反射技术
*
* @author Jelly QQ:136179492
*
*/
public class ReflectTester {
/**
* 通过一个对象利用反射技术将其复制
*
* @param 参数object
* @return 复制的Object对象
* @throws Exception
*/
public Object copy(Object object) throws Exception {
Class<?> classType = object.getClass();
Object obj = classType.getConstructor(new Class[] {}).newInstance(
new Object[] {});
Field[] fields = classType.getDeclaredFields();
for (Field field : fields) {
String name = field.getName();
String firstLetter = name.substring(0, 1).toUpperCase();
String getMethodName = "get" + firstLetter + name.substring(1);
String setMethodName = "set" + firstLetter + name.substring(1);
Method getMethod = classType.getMethod(getMethodName,
new Class[] {});
Method setMethod = classType.getMethod(setMethodName,
new Class[] { field.getType() });
Object value = getMethod.invoke(object, new Object[] {});
System.out.println(value);
setMethod.invoke(obj, new Object[] { value });
}
return obj;
}
public static void main(String[] args) throws Exception,
InvocationTargetException {
ReflectTester test = new ReflectTester();
Customer customer = new Customer("jelly", 23);
Customer obj = (Customer) test.copy(customer);
System.out.println(obj.getName() + obj.getAge());
}
}
class Customer {
public Customer() {
}
public Customer(String name, int age) {
this.name = name;
this.age = age;
}
private long id;
private String name;
private int 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反射机制为我们提供了动态访问和操作类的能力,可以用来实现对象的深拷贝。然而,反射使用时应谨慎,因为它可能导致性能下降,且容易引入安全隐患。在设计类时,优先考虑使用序列化、克隆或自定义拷贝...
复制一个bean的值到另一个bean中,通常是为了实现对象之间的深度克隆。Java没有内置的深拷贝机制,但可以通过反射实现。假设我们有两个 `Person` 类的实例 `person1` 和 `person2`,我们想要将 `person1` 的属性值...
Java反射机制是Java编程语言中的一个重要特性,它允许程序在运行时动态地获取类的信息并进行操作。通过反射,开发者可以在程序执行时发现并访问类的字段(fields)、方法(methods)以及构造器(constructors),...
Java反射机制是Java语言中一个强大的工具,可以实现对象相同字段的复制操作。下面是对该机制的详细介绍和分析。 一、为什么需要对象相同字段的复制操作? 在项目开发中,我们经常需要在不同的对象之间复制值,这是...
Java反射机制是Java语言提供的一种基础功能,通过反射...总的来说,Java反射机制为Java程序提供了高度的灵活性和动态性,在需要动态创建类实例、访问或修改对象属性以及调用方法的场合,反射机制是一个非常有力的工具。
这个压缩包文件“基于java8新特性+反射机制实现list不同实体类互转.zip”提供了一种解决方案,它利用了Java 8的新特性和反射机制来实现这种转换,并将这个功能封装为一个工具类。 首先,Java 8引入了许多新特性,...
4. **生成动态代理**:可以为接口生成一个实现类,并利用该实现类进行方法调用的拦截。 #### 三、Java Reflection API简介 Java反射机制的核心类位于`java.lang.reflect`包中,主要包括以下几类: 1. **Class类**...
Java反射机制是Java语言的一个强大特性,允许程序在运行时检查类、接口、字段和方法的信息,并能动态地创建对象和调用方法。通过java.lang.Class和java.lang.reflect包中的类,我们可以获取类的结构信息,包括构造器...
##### 示例2:使用反射机制复制对象 下面的示例代码展示了如何使用反射机制复制一个简单的JavaBean对象: ```java import java.lang.reflect.Field; import java.lang.reflect.Constructor; public class ...
Java反射机制是Java语言的一个重要特性,它允许程序在运行时获取类的信息以及操作类的对象。这种能力使得Java程序能够实现动态性,即在编译期不知道具体类型的情况下仍然可以处理对象。反射机制的核心功能包括: 1....
Java反射机制主要是通过以下几个核心类来实现的,这些类都位于`java.lang.reflect`包中: 1. **`Class`类**:表示一个类,是反射机制的基础。通过它可以获取类的各种信息,如类名、超类、接口、字段、方法等。 2. *...
通过上述代码,我们成功地利用Java反射机制复制了一个持久化对象。这种方法虽然简单有效,但在实际应用中也存在一定的局限性和挑战,比如不支持复制复杂的数据结构(如集合和数组)中的元素,也不考虑对象之间的引用...
Java反射机制是Java编程语言中的一种强大的工具,它允许程序在运行时检查和操作类、接口、对象等的内部信息。反射机制的核心在于能够在运行时动态地获取类的信息并进行操作,这为Java提供了高度的灵活性和动态性。 ...