`

java 反射入门-属性方法调用实例

    博客分类:
  • java
阅读更多
Java类反射中所必须的类:

      Java的类反射所需要的类并不多,它们分别是:Field、Constructor、Method、Class、Object,下面我将对这些类做一个简单的说明。

Field类:提供有关类或接口的属性的信息,以及对它的动态访问权限。反射的字段可能是一个类(静态)属性或实例属性,简单的理解可以把它看成一个封装反射类的属性的类。

Constructor类:提供关于类的单个构造方法的信息以及对它的访问权限。这个类和Field类不同,Field类封装了反射类的属性,而Constructor类则封装了反射类的构造方法。

Method类:提供关于类或接口上单独某个方法的信息。所反映的方法可能是类方法或实例方法(包括抽象方法)。 这个类不难理解,它是用来封装反射类方法的一个类。

Class类:类的实例表示正在运行的 Java 应用程序中的类和接口。枚举是一种类,注释是一种接口。每个数组属于被映射为 Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该 Class 对象。
Object类:每个类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法

Field []f =getDeclaredFields ()  获取所有的属性名 公有的 私有的

Field f = temp.getDeclaredField("id");  //获取私有的 属性名为 id

Field[] fb = temp.getFields()  //获取共有的 属性

调用 构造函数:

Class[] types = new Class[] { String.class, String.class };
  Constructor cons = TwoString.class.getConstructor(types);

Object[] gg = new Object[] { "a", "b" };
TwoString ts = (TwoString) cons.newInstance(gg);  //构造函数传递参数 2参数构造函数

public TwoString(String a,String b){}

调用方法:

TwoString里方法名 public int add(int i,int b);

Class<?> classType =TwoString.class;
        Object invokeTester = classType.getConstructor(types).newInstance(gg);
       
        Method addMethod = classType.getMethod("add", new Class[] { int.class, int.class });
        Object result = addMethod.invoke(invokeTester, new Object[] { new Integer(100), new Integer(200) });
        System.out.println((Integer) result);

}

//获取属性值 getProperty(invokeTester , "共有属性");
public static Object getProperty(Object owner, String fieldName) throws Exception {
      Class ownerClass = Class.forName(owner.getClass().getName());

      Field field = ownerClass.getField(fieldName);

      Object property = field.get(owner);

      return property;
  }

分享到:
评论

相关推荐

    JAVA反射机制的入门代码

    代码为JAVA反射的一个DEMO,适合初学者临摹学习,还附有properties的创建方法,比较基础。

    Java经典编程源码基础例程300.zip

    实例078 利用反射重写toString()方法 119 第8章 字符串与包装类 121 实例079 将数字格式化为货币字符串 122 实例080 货币金额大写格式 123 实例081 String类格式化当前日期 125 实例082 字符串大小写转换 1

    Java反射机制与框架原理

    * 使用反射机制,对Class中的方法进行调用 * 以JSON与POJO的转换为例,演示反射机制的运用 * 自定义注解的语法 * 使用反射机制,读取类中的注解信息 * 以反射和注解为基础,演示数据库SQL的自动生成 * 注解...

    疯狂JAVA讲义

    学生提问:为什么静态内部类实例方法也不能访问外部类的实例属性呢? 207 学生提问:接口里是否能定义内部接口? 208 6.7.3 使用内部类 208 学生提问:既然内部类是外部类的成员,是否可以为外部类定义子类,在...

    基于Java实现的RPC项目源码+项目说明.zip

    客户端方面,客户端本地只有IDL.Hello中的内容,没有方法的具体实现,也就是说要调用一个没有实现的接口,显然,我们使用Java反射的动态代理特性,实例化一个接口,将调用接口方法“代理”给InvocationHandler中的...

    Java开发技术大全 电子版

    第1篇Java基础知识入门. 第1章Java的开发运行环境2 1.1Java的运行环境与虚拟机2 1.2Java的开发环境4 1.2.1JDK的安装4 1.2.2如何设置系统环境变量6 1.2.3编译命令的使用8 1.2.4解释执行命令的使用10 1.2.5...

    Java JDK 7学习笔记(国内第一本Java 7,前期版本累计销量5万册)

    15.2.2 建立classloader实例 518 15.3 重点复习 520 15.4 课后练习 521 chapter16 自定义泛型、枚举与标注 523 16.1 自定义泛型 524 16.1.1 定义泛型方法 524 16.1.2 使用extends与? 525 16.1.3 使用...

    asp.net知识库

    动态调用对象的属性和方法——性能和灵活性兼备的方法 消除由try/catch语句带来的warning 微软的应试题完整版(附答案) 一个时间转换的问题,顺便谈谈搜索技巧 .net中的正则表达式使用高级技巧 (一) C#静态成员和...

    Spring.3.x企业应用开发实战(完整版).part2

    3.2.3 Java反射机制 3.3 资源访问利器 3.3.1 资源抽象接口 3.3.2 资源加载 3.4 BeanFactory和ApplicationContext 3.4.1 BeanFactory介绍 3.4.2 ApplicationContext介绍 3.4.3 父子容器 3.5 Bean的生命周期 3.5.1 ...

    Spring3.x企业应用开发实战(完整版) part1

    3.2.3 Java反射机制 3.3 资源访问利器 3.3.1 资源抽象接口 3.3.2 资源加载 3.4 BeanFactory和ApplicationContext 3.4.1 BeanFactory介绍 3.4.2 ApplicationContext介绍 3.4.3 父子容器 3.5 Bean的生命周期 3.5.1 ...

    python基础学习笔记整理

    适合python入门学习,笔记含有示例代码,贴入工具中可执行查看效果。 1、环境准备 2、基础知识 2.1、语法 2.1.1、变量和数据类型 2.1.2、控制流程if for while 2.1.3、函数实例 ...3、Java调用Python

    面向对象技术与UML课件及源代码-by 南邮-陈杨

    第1章Java入门 第2章程序设计基础: 变量及其运算 第3章程序设计基础: 流程控制和数组 第4章实验指导1 第5章类、对象和成员 第6章封装 第7章继承和多态 第8章实验指导2 第9章异常处理 第10章Java...

    springmybatis

    (读者注:其实这个应该叫做很基础的入门一下下,如果你看过Hibernate了那这个就非常的简单) (再加一条,其实大家可以看官方的教程更好些:http://mybatis.github.io/mybatis-3/,而且如果英文不是很好的那就看...

Global site tag (gtag.js) - Google Analytics