Java运行通过程序化的方式间接对Class进行操作,Class文件由类装载期装载后,在JVM中形成一份描述Class结构的元信息,通过对该元信息对象,可以获得Class的结构信息,如构造函数,属性,方法等,java允许用户用这个Class相关的元信息对象间接调用class对象的功能。
如下一个类Car,和利用反射机制调用他的类ReflectTest
package reflect;
//实体类
public class Car {
private String brand;
private String color;
private int maxSpeed;
/**
* 构造方法
*/
public Car() {
// TODO Auto-generated constructor stub
}
/**
* 无参构造方法
*/
public Car(String brand,String color,int maxSpeed){
this.brand=brand;
this.color=color;
this.maxSpeed=maxSpeed;
}
/**
* 无参方法
* @return
*/
public void introduce(){
System.out.println("brand="+brand+";color="+color+";maxSpeed="+maxSpeed);
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public int getMaxSpeed() {
return maxSpeed;
}
public void setMaxSpeed(int maxSpeed) {
this.maxSpeed = maxSpeed;
}
}
package reflect;
//反射调用类
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import org.omg.CORBA.Current;
public class ReflectTest {
public static Car initByDefaultConst() throws Throwable {
//通过类加载器加载类对象
ClassLoader loader =Thread.currentThread().getContextClassLoader();
Class clazz = loader.loadClass("reflect.Car");
//获取类的默认构造器,构造类
Constructor cons = clazz.getConstructor();
Car car = (Car) cons.newInstance();
//通过反射方法设置属性
Method setBrand = clazz.getMethod("setBrand", String.class);
setBrand.invoke(car, "玛莎拉蒂");
Method setColor= clazz.getMethod("setColor", String.class);
setColor.invoke(car, "红色");
Method setMaxSpeed =clazz.getMethod("setMaxSpeed", int.class);
setMaxSpeed.invoke(car, 200);
return car;
}
public static void main(String[] args) throws Throwable {
Car car =ReflectTest.initByDefaultConst();
car.introduce();
}
}
分享到:
相关推荐
### 利用反射实现类的动态加载 #### 反射技术简介 反射是Java语言提供的一种强大特性,允许运行时动态地获取类的信息并操纵类的对象。这种能力使得开发人员能够在编写程序时不确定具体类的情况下,依然能实现对类...
java反射实现数据库增、删、改、查操作Dao
实用结合C#反射实现动态定时器定时任务工具,可结合XML配置文档,实现独立动态的定时配置;用于定时任务执行、消息推送、WebService任务等;附件为程序源码。工具历经多项目验证,不足之处;欢迎交流指正!
应用抽象工厂+反射实现通用数据源设计。来源于北大青鸟内部设计模式讲座。
在使用反射实现AOP动态代理时,我们也需要注意一些问题。例如,由于代理类是在运行时动态创建的,这可能会影响程序的性能,特别是在频繁调用代理方法的情况下。因此,在实际开发中,需要根据应用场景的性能要求和...
在本主题中,我们将深入探讨如何利用Java反射来实现JUnit3框架,即使我们不知道具体的类名。JUnit3是Java单元测试的一个早期版本,它提供了编写和执行测试用例的框架。 首先,理解反射的基本概念是必要的。在Java中...
自定义Dao并通过反射实现,虽然比使用ORM框架(如Hibernate、MyBatis)更繁琐,但可以更好地控制SQL语句,避免了不必要的映射配置。这种方法适用于小型项目或对性能有较高要求的场景,同时也为学习Java反射机制提供...
本项目“基于反射实现C#编辑器”聚焦于使用C#编程语言和反射技术来构建一个可扩展的编辑器,这为软件的二次开发提供了一个强大的工具。 C#是一种面向对象的、类型安全的编程语言,广泛应用于Windows桌面应用、Web...
接下来,让我们探讨如何使用反射来实现Struts的拦截器。拦截器在Struts中扮演着重要的角色,它们在请求处理前后执行额外的任务,比如验证、日志记录或性能监控。在自制的Struts中,你可以创建一个接口,如`...
本篇文章将详细讲解如何使用反射实现绑定的ListView,包括DataSource属性的设置,反射中文列名以及自适应列宽度的实现。 首先,我们要理解反射在Java(以及Android)中的作用。反射允许程序在运行时检查类的信息,...
### Java反射机制实现JavaBean转JSON的详细解析 #### 一、引言 在现代软件开发过程中,数据格式转换是一项非常常见的任务。特别是在处理不同系统之间的数据交换时,JSON(JavaScript Object Notation)因其轻量级...
### 二、C#反射实现访问类中的私有变量或方法 #### 2.1 示例代码分析 首先,我们来看一下提供的示例代码: ```csharp using System; using System.Reflection; class ChangeValue { private string myValue; ...
在本主题“mvc中dao层反射实现”中,我们将探讨如何利用Java的反射机制来实现DAO层的方法。 反射是Java语言的一个强大特性,它允许程序在运行时动态地获取类的信息并调用其方法。在DAO层中使用反射,可以提高代码的...
### 利用反射实现JavaBean的自动赋值 在软件开发过程中,特别是在Web应用程序的开发中,经常会遇到需要将表单提交的数据绑定到JavaBean对象上的需求。这可以通过多种方式实现,例如使用Spring MVC等框架的自动绑定...
标题"通过反射实现不同页面的返回"主要涉及到以下知识点: 1. **Android Activity**:Activity是Android应用程序的核心组件,它负责处理用户的交互和显示UI。每个Activity都有自己的生命周期,包括创建、启动、暂停...
对于"java反射实现Object转json"这个主题,我们将深入探讨如何使用反射机制将Java对象转换为JSON格式的数据。 首先,理解JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也...
### JAVA反射实现和实现机制 #### 反射机制概述 反射是Java中一项重要的特性,它允许我们在程序运行时获取类的信息(如属性、方法等)并操纵它们。这一特性为开发提供了极大的灵活性,同时也带来了一定的学习曲线...
c++ 反射实现原理代码;c++ 反射实现原理代码;c++ 反射实现原理代码;c++ 反射实现原理代码;c++ 反射实现原理代码;
本文将深入探讨Spring AOP的实现原理,以及如何使用反射来实现动态代理模式。 首先,我们需要了解AOP的基本概念。AOP的核心思想是切面,它包含两个主要部分:切点(Pointcut)和通知(Advice)。切点定义了在程序...