2019独角兽企业重金招聘Python工程师标准>>>

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的以及动态调用对象的方法的功能称为java语言的反射机制。
Java反射机制主要提供了以下功能:在运行时判定任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判定任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。

package com.java.jvm;import java.lang.reflect.*;class InvokeTest {public static void main(String[] args) {try {Class c = Class.forName("com.java.jvm.User");Object o = c.newInstance();Method m = c.getMethod("getName", null);Object ret = m.invoke(o, null);System.out.println( "com.java.jvm.User.getName() = " + ret);m = c.getMethod("setName", new Class[]{String.class});ret = m.invoke(o, new Object[]{"shengjian"});System.out.println( "com.java.jvm.User.setName() = " + ret);m = c.getMethod("getName", null);ret = m.invoke(o, null);System.out.println( "com.java.jvm.User.getName() = " + ret);//静态方法的调用m = c.getMethod("getUserName", new Class[]{String.class});ret = m.invoke(null, "fuwang");System.out.println( "com.java.jvm.User.getUserName() = " + ret);} catch (ClassNotFoundException ex) {System.out.println("找不到此类别");} catch (NoSuchMethodException ex) {System.out.println("此方法不存在");} catch (IllegalAccessException ex) {System.out.println("没有权限调用此方法");} catch (InvocationTargetException ex) {System.out.println("调用此方法时发生下列例外:\n" + ex.getTargetException());} catch (IllegalArgumentException e) {e.printStackTrace();} catch (InstantiationException e) {e.printStackTrace();}}
}

c.getMethod("getName", null)返回一个 Method 对象,它反映此 Class 对象所表示的类或接口的指定公共成员方法。name 参数是一个 String,用于指定所需方法的简称。parameterTypes 参数是按声明顺序标识该方法形参类型的 Class 对象的一个数组。如果 parameterTypes 为 null,则按空数组处理。

name - 方法名 parameterTypes - 参数列表

Method 提供关于类或接口上单独某个方法(以及如何访问该方法)的信息。所反映的方法可能是类方法或实例方法(包括抽象方法)。

invoke()

对带有指定参数的指定对象调用由此 Method 对象表示的底层方法。个别参数被自动解包,以便与基本形参相匹配,基本参数和引用参数都随需服从方法调用转换。

如果底层方法是静态的,那么可以忽略指定的 obj 参数。该参数可以为 null。

如果底层方法所需的形参数为 0,则所提供的 args 数组长度可以为 0 或 null。

如果底层方法是实例方法,则使用动态方法查找来调用它,这一点记录在 Java Language Specification, Second Edition 的第 15.12.4.4 节中;在发生基于目标对象的运行时类型的重写时更应该这样做。

如果底层方法是静态的,并且尚未初始化声明此方法的类,则会将其初始化。

如果方法正常完成,则将该方法返回的值返回给调用者;如果该值为基本类型,则首先适当地将其包装在对象中。但是,如果该值的类型为一组基本类型,则数组元素不 被包装在对象中;换句话说,将返回基本类型的数组。如果底层方法返回类型为 void,则该调用返回 null。

obj - 从中调用底层方法的对象args - 用于方法调用的参数。

User代码:

package com.java.jvm;public class User {static{System.out.println("static ---");}public User(){System.out.println("name="+name);name="xiaotian";}private String name;private Integer age;private String address;public static String getUserName(String name){return name;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}@Overridepublic String toString() {return "User [name=" + name + ", age=" + age + ", address=" + address+ "]";}}

转载于:https://my.oschina.net/winHerson/blog/132410

java反射 invoke详解相关推荐

  1. java 反射机制详解

    火星十一郎 海纳百川, 有容乃大,QQ:791909235,Tel:13137910179 posts - 774, comments - 556, trackbacks - 0, articles ...

  2. java反射机制详解篇一(基础)

    反射基础 首先来看一下最常规的创建对象的方式: ObjectClass clazz = new ObjectClass(); 当程序执行到new ObjectClass的时候,java虚拟机会加载Ob ...

  3. java反射机制详解_Java反射机制详解

    Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反 ...

  4. [转]Java反射机制详解

    目录 1反射机制是什么 2反射机制能做什么 3反射机制的相关API ·通过一个对象获得完整的包名和类名 ·实例化Class类对象 ·获取一个对象的父类与实现的接口 ·获取某个类中的全部构造函数 - 详 ...

  5. Java 反射机制详解:私有方法调用头大?如何通过反射调用类中的私有方法?

    文章目录 前言 一.私有方法在本类中直接调用 1.1.在本类中实例化,调用私有方法 1.2.尝试在其他类直接调用私有方法(错误示范) 二.使用反射实例化类强制调用私有方法 2.1.使用类加载器加载被调 ...

  6. Java反射体系详解

    文章目录 1.获取一个类的对应的Class对象 (Class的C是大写) (1)调用Object提供的getClass方法 (2)类名称 . class (3)调用Class类提供的静态方法:Clas ...

  7. Java反射技术详解

    前言 相信很多人都知道反射可以说是Java中最强大的技术了,它可以做的事情太多太多,很多优秀的开源框架都是通过反射完成的,比如最初的很多注解框架,后来因为java反射影响性能,所以被运行时注解APT替 ...

  8. java反射机制详解_JAVA反射机制详解_JSP/Java编程_互联网开发技术网_传播最新的编程技术_php361.com...

    今天,下午在和朋友聊天的时候,聊起了反射这个话题. 我们就从下面这个段简单的代码开始吧. 这个代码输出什么,想必大部分的读者跟我一样,会很快地知道答案:0 1 2 3 4 5 6 7 8 9.事实也是 ...

  9. Java反射机制详解

    文章目录 1.反射 1.1 反射的概述 为什么需要反射? 1.2 获取Class类对象的三种方式 1.2.1 代码示例 1.3 反射获取构造方法并应用 1.3.1 Class类获取构造方法对象的方法 ...

最新文章

  1. java SpringWeb如何实现打印日志
  2. jpa遇到的 org.hibernate.PersistentObjectException: detached entity passed to persist异常
  3. OpenStack 的 SR-IOV 虚拟机热迁移
  4. 天通苑海鲜餐馆数据调查,很难想象消费越贵越受欢迎
  5. Ubuntu11.04 3945ABG无线网卡驱动安装
  6. python学习与数据挖掘_python机器学习与数据挖掘
  7. poj 1426 BFS
  8. pip下载慢的解决方法
  9. mysql 备份如何使用_如何使用命令来备份和还原MySQL数据库
  10. Tesseract-OCR的简单使用与训练
  11. Smart ORM v0.3发布(完全面向对象的轻量级ORM工具)
  12. python有哪几种类型转换方式_Python 中各种时间类型的转换
  13. 拓端tecdat|ARIMA模型预测CO2浓度时间序列-python实现
  14. 关于51CTO民意调查之自主添加google广告代码的几点意见
  15. this.controls指所有控件吗?_PPT特效制作案例:2019年小目标,你定了吗?(用文本框控件制作)...
  16. esayUI实践的一些体会
  17. 短视频服务大PK,阿里云、腾讯云、又拍云、七牛云、金山云5强横向对比
  18. tp 框架防sql注入
  19. 第22.7节 性能篇-使用八叉树结构来管理场景
  20. 微信小程序底部导航栏未读消息出现小红点的实现

热门文章

  1. 老外谈设计: 2015年WEB设计趋势
  2. 重写修改重写的Dialog显示问题
  3. Freetype学习笔记(轉)
  4. 超效率dea模型_【探索】基于超效率DEA模型的我国公立医院排行榜研究
  5. Tungsten Fabric SDN — 与 Bare Metal 的集成架构
  6. 5G 信令流程 — 5GC 的注册管理(RM,Registration Management)
  7. 5GS 协议栈 — Overview
  8. PCB雕刻钻孔机制作
  9. asp.net性能的技巧
  10. oracle audit for 11g