`
liyueling
  • 浏览: 80533 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

反射应用

阅读更多

一,通过反射调用类中的方法

在Class类中使用以下的方法取得要调用方法的Method对象:

public Method getMethod(String name,Class<?>...parameterTypes)

取得Method对象之后,通过如下方法进行调用:

public Object invoke(Object obj,Object...args)

 

二,使用反射调用程序中的set和get方法

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;


interface info
{
 public String getInfo();
 public String say(String name,String content);
 public void sayHello();
}
class Person implements info
{
 private String name;
 private int age;
 public Person(){}
 public Person(String name)
 {
  this.name=name;
 }
 public Person(String name,int age)
 {
   this(name);
   this.age=age;
 }
 public String getInfo() {
  return "Hello";
 }
 public String say(String name, String content) {
  return "world";
 }
 public void sayHello() {
  System.out.println("new Year!");
 }
}
public class ReflectDemo {
 public static void main(String args[]) throws Exception
 {
  Class<?> c=Class.forName("Person");
  //调用类中无参,没有返回值的方法
  Method met=c.getMethod("sayHello");
     //执行方法
  met.invoke(c.newInstance());
  
  //调用有返回值的方法
  Method me=c.getMethod("getInfo");
     String val=(String)met.invoke(c.newInstance());
     System.out.println(val);
 
     //调用有返回值,有参数的方法
//     Method m=c.getMethod("say", String.class,String.class);
//     String val1=(String)m.invoke(c.newInstance(),"jin","zq");
//     System.out.println(val1);
     Object o=c.newInstance();
     set("name","jin",o,String.class);
     get("name",o,String.class);
 } 
    /*
     *
     * @param name 属性名称
     * @param value 属性值
     * @param obj 要操作的对象     *
     * */
 public static void set(String name,String value,Object obj,Class<?> type) throws Exception
    {
  Method met=obj.getClass().getMethod("set"+initStr(name),type);
  met.invoke(obj, value);
  System.out.println(initStr(name));
    }
 public static void get(String name,Object obj) throws Exception
 {
  Method met=obj.getClass().getMethod("get"+initStr(name));
  Object value=met.invoke(obj);
  System.out.println(value);
 }
 public static String initStr(String name)
 {
  StringBuffer buf=new StringBuffer();
  buf.append(name.substring(0,1).toUpperCase()).append(name.substring(1));
     return buf.toString();
 }
}

 

三,通过反射直接操作属性

import java.lang.reflect.Field;
public class InvokeFieldDemo {

 public static void main(String args[]) throws Exception
 {
  Class<?> c=Class.forName("Person");
  Object obj=c.newInstance();
  Field nameField=c.getDeclaredField("name");
  nameField.setAccessible(true);//让属性可见
  nameField.set(obj,"jin");
  System.out.println(nameField.get(obj));
 }
}

属性也是可以通过代码设置访问权限的。

分享到:
评论

相关推荐

    Java反射应用实例

    代码主要实现了Java反射应用实例, 包含利用反射方法创建对象(使用默认构造函数和自定义构造函数),访问对应对象的方法(包括带参数的和不带参数的),访问对应对象的域(Field). 从这里可以看到代码的详细解说:...

    c# 反射应用几乎最全面的实例

    这个"c# 反射应用几乎最全面的实例"集合可能是为了展示反射的各种应用场景和用法。以下是对C#反射及其应用的详细解释。 反射的概念: 反射是.NET框架提供的一种能力,它允许代码在运行时分析自身,获取类型信息,...

    XML解析与反射应用联合.zip

    "XML解析与反射应用联合"的主题,意味着这个压缩包可能包含了一个示例项目,展示了如何结合XML解析和反射来实现灵活的配置和动态行为。例如,可能有一个XML配置文件定义了某些类的实例化和它们应执行的方法,然后...

    java反射应用实例

    在标题“Java反射应用实例”中,我们关注的是如何在实际项目中利用反射来实现特定的功能。这篇博客文章(可以通过链接访问)可能会探讨以下几个方面: 1. **什么是反射**:首先,我们需要理解反射的基本概念。反射...

    八年级物理光反射应用PPT学习教案.pptx

    总结来说,这个八年级物理光反射应用PPT学习教案涵盖了光的反射定律、反射角和入射角的概念、光反射作图方法、平面镜的应用(包括改变光路、潜望镜原理)、以及平面镜成像的原理和作图技巧。这些知识是光学基础的...

    golang 自动注入工具与反射应用

    golang 自动注入工具与反射应用

    Sev.Reflection.rar_C# 反射 封装_反射_反射应用封装

    下面我们将详细探讨C#反射的基础知识,以及如何进行封装和应用。 1. **反射基础**: - 类型信息:通过`typeof`关键字或`Type`类的静态方法`GetType`可以获取到类型信息,如类名、接口、基类、属性、方法等。 - ...

    反射Reflection小应用

    在提供的"Test"压缩包文件中,可能包含了一个简单的反射应用示例,例如创建一个类,然后通过反射调用其方法或访问其字段。学习这个小例子可以帮助初学者更好地理解反射的实际运用。然而,反射虽然强大,但应谨慎使用...

    java反射应用详细介绍.rar

    在深入理解Java反射的应用之前,我们首先需要知道什么是反射以及它的基本概念。 Java反射机制的核心在于`java.lang.Class`类,每个类在内存中都有一个对应的Class对象,它包含了该类的所有信息。通过`Class.forName...

    Java反射简单应用

    几个小demo,介绍了反射的几个api操作,最后写了一个简单的Java反射应用:工厂+反射+配置文件。

    Java反射技术的一般应用

    在向学生讲解Class.forName()方法的使用时,有时需要扩展讲解为什么这样书写的原理,于是,扩展讲解Java反射技术可以查看被监视类的方法(构造方法和普通方法)、公有属性的功能,以达到封闭功能的效果。该例子使用...

    Qt 使用QMetaObject实现反射机制代码demo

    在编程领域,反射机制是一种强大的特性,允许程序在运行时检查自身的行为,包括类的信息、对象的状态以及函数的调用等。在C++的世界里,Qt框架提供了一种实现反射的手段,即QMetaObject系统。这个系统允许我们动态地...

    页岩气地震勘探中广角反射应用效果分析

    我国南方页岩层赋存区多以碳酸盐岩覆盖的山地地形为主,目的层埋深跨度大,采用常规地震进行页岩气勘探一般很难取得好的效果。通过广角地震原理分析,并重点介绍了在实际工程中广角地震数据采集和资料处理与常规地震的...

    Unity实现镜面反射

    为了将镜面反射应用到游戏对象,你需要将带有自定义Shader的材质赋给物体。在描述中提到的"将脚本放在需要镜面的面板上",可能指的是使用一个脚本来控制面板(Plane或UI Element)的行为,例如调整其大小、位置或...

    C#反射应用实例

    本文实例讲述了C#反射应用。分享给大家供大家参考。具体如下: 通过反射实现多系统数据库的配置 通过定义接口,反射实例化配置的节点的值 配置App.config: 代码如下:&lt;?xml version=”1.0″ encoding=”utf-8″ ...

    java反射应用详细介绍

    本篇文章依旧采用小例子来说明,因为我始终觉的,案例驱动是最好的,要不然只看理论的话,看了也不懂,不过建议大家在看完文章之后,在回过头去看看理论,会有更好的理解。 下面开始正文。 【案例1】通过一个对象...

    八年级物理上册第3章光和眼睛第2节探究光的反射规律第2课时光的反射分类应用学案无答案粤教沪版.doc

    【光的反射应用】 1. 日常生活中,比如电影院的屏幕,其表面处理就是利用漫反射,使得坐在不同位置的观众都能清楚看到屏幕上的图像。 2. 另一个例子是汽车的后视镜,它利用镜面反射原理,使驾驶员能看到车后的情况...

    .net 反射应用

    在B/S架构中,比如Web应用,反射的应用场景可能更广泛。它可以用于动态加载Web服务、控制器或者处理程序类,这样可以根据配置文件的变化灵活调整应用的行为。例如,假设配置文件定义了处理HTTP请求的特定Controller...

    轻松学会c# 反射浅析原理及应用教程

    下面是一个简单的C#反射应用示例,通过反射调用类库中的不同方法: ```csharp using System; using System.Reflection; namespace ReflectionTest { public class WriteTest { // 带参数的公共方法 public ...

    java反射应用

    这篇博文主要探讨了如何在实际开发中应用Java反射,以增强代码的灵活性和动态性。 一、Java反射的基础概念 1. 类加载器(ClassLoader):负责将.class文件加载到JVM中,转换为Class对象。 2. Class对象:代表运行时...

Global site tag (gtag.js) - Google Analytics