java反射 Method

  1. 获取字节码文件对象

    Class c = Class.forName("fieldtest.Student");
    
  2. 通过无参构造方法创建对象obj

    Constructor con = c.getConstructor();
    Object obj = con.newInstance();
    
  3. Method m1 = c.getMethod(“study”);获取study方法

  4. m1.invoke(obj);使用obj对象的m1方法

  5. 如果要用私有方法:

    Method m2 = c.getDeclaredMethod(“study”, String.class);

  6. 在使用invoke执行私有方法之前,要取消对这个方法的访问检查

    m2.setAccessible(true);

  7. m2.invoke(obj, “数学”);

一些api的内容:

public Method getMethod(String name,Class<?>... parameterTypes)
//第一个参数表示的方法名,第二个参数表示的是方法的参数的class类型
/*Returns a Method object that reflects the specified public member method of the class or interface represented by this Class object.
The name parameter is a String specifying the simple name of the desired method.
The parameterTypes parameter is an array of Class objects that identify the method's formal parameter types, in declared order.
If parameterTypes is null, it is treated as if it were an empty array.*/
public Object invoke(Object obj,Object... args)
/*参数:
- obj:调用方法的对象
- args:为指定方法传递的参数值,是一个可变参数
- 返回值:为动态调用指定方法后的实际返回值
*/

例子:

package fieldtest;public class Student {// 成员变量public String name;// 公共private int age;// 私有// 构造方法public Student() {super();// TODO Auto-generated constructor stub}// 私有构造方法private Student(String name) {this.name = name;}public Student(String name, int age) {super();this.name = name;this.age = age;}// 成员方法(getXxx/setXxx)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;}// 成员方法public void study() {System.out.println("我爱学习java!");}// 私有private void study(String string) {System.out.println("我还爱学习" + string);}@Overridepublic String toString() {return "Student [name=" + name + ", age=" + age + "]";}
}
package fieldtest;import java.lang.reflect.Constructor;
import java.lang.reflect.Method;public class MethodDemo {public static void main(String[] args) throws Exception {// 获取字节码文件对象Class c = Class.forName("fieldtest.Student");// 获取所有的方法System.out.println("公共方法:");Method[] methods = c.getMethods(); // 获取自己的包括继承父亲的公共方法for (Method method : methods) {System.out.println(method);}System.out.println("所有方法:");Method[] methods1 = c.getDeclaredMethods(); // 获取自己的所有的方法for (Method method : methods1) {System.out.println(method);}Constructor con = c.getConstructor();Object obj = con.newInstance();// 获取单个方法并使用// public Method getMethod(String name,Class<?>... parameterTypes)// 第一个参数表示的方法名,第二个参数表示的是方法的参数的class类型Method m1 = c.getMethod("study");// public Object invoke(Object obj,Object... args)// 返回值是Object,第一个参数表示对象是谁,第二参数表示调用该方法的实际参数m1.invoke(obj); // 调用obj对象的m1方法System.out.println("----------");Method m2 = c.getDeclaredMethod("study", String.class);// NoSuchMethodException 访问私有方法 暴力访问m2.setAccessible(true);m2.invoke(obj, "数学");}
}/*
公共方法:
public java.lang.String fieldtest.Student.toString()
public java.lang.String fieldtest.Student.getName()
public void fieldtest.Student.setName(java.lang.String)
public void fieldtest.Student.setAge(int)
public int fieldtest.Student.getAge()
public void fieldtest.Student.study()
public final void java.lang.Object.wait() throws java.lang.InterruptedException
public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException
public boolean java.lang.Object.equals(java.lang.Object)
public native int java.lang.Object.hashCode()
public final native java.lang.Class java.lang.Object.getClass()
public final native void java.lang.Object.notify()
public final native void java.lang.Object.notifyAll()
所有方法:
public java.lang.String fieldtest.Student.toString()
public java.lang.String fieldtest.Student.getName()
public void fieldtest.Student.setName(java.lang.String)
public void fieldtest.Student.setAge(int)
public int fieldtest.Student.getAge()
private void fieldtest.Student.study(java.lang.String)
public void fieldtest.Student.study()
我爱学习java!
----------
我还爱学习数学
*/

java反射 Method相关推荐

  1. Java反射Method和Field简单实例

    目录 定义 使用方法 1.Field 2.Method 3.简单实例 定义 JAVA反射机制是在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方 ...

  2. Java反射————Method根据方法名称字符串调用方法

    引言 之前浏览廖雪峰老师的个人博客网站,无意间发现了关于在Java8中获取参数的方法,随手一转<Java 8中获取参数名称>,没想到今天遇到一个功能,非常符合这种反射调用的使用场景.回看了 ...

  3. java反射field和method的顺序问题

    最近在有思考到序列化性能优化的问题,关于java反射field和method的顺序问题,这里有详细的讨论http://stackoverflow.com/questions/5001172/java- ...

  4. java 反射 Constructor、Method、Field 基本用法

    java反射主要从以下几个方面理解 理解 Class 类 理解 Java 的类加载机制 学会使用 ClassLoader 进行类加载 理解反射的机制 掌握 Constructor.Method.Fie ...

  5. Java 反射 (Class、ClassLoader、Constructor、Method、Field)

    反射是Java中一个非常重要.非常强大的机制.曾看到一句话"反射是框架的灵魂",初学时不懂,等到学完框架之后才慢慢理解其意. 什么是反射?我们先通过几个类和示例来初步体会一下反射. ...

  6. Java反射机制(反射Field,Method,Constructor,资源绑定器)

    目录 反射机制 1.反射机制的作用 2.反射机制的相关类在哪个包下 3.反射机制的相关类有哪些 获取Class的三种方式 通过反射实例化对象 通过读属性文件实例化对象 只让静态代码块执行可以使用for ...

  7. Java反射02--Filed,Method,Constructor类

    Java反射02–Filed,Method,Constructor类 一Filed类常用方法 上一篇已经说过了Field对象的创建,下面回顾下,同时介绍下Filed类的常用方法. 测试类如下: pub ...

  8. Java反射08 : 成员方法Method学习示例

    超级通道: Java泛型学习系列-绪论 java.lang.reflect.Method类提供了用于获取和操作成员方法的静态方法. 1.通过Method可以做什么 通过Method可以做以下事情: 如 ...

  9. Java 反射 (快速了解反射)

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

最新文章

  1. shell脚本教学(二)——diff、rename、cut、sort、unip
  2. JAVA基础知识之Set集合
  3. Android React Native 笔记(二):Component生命周期
  4. MKL学习——功能简介
  5. 计算机网络课程思政教学设计,信息与网络工程学院成功举办第一届课程思政教学设计大赛...
  6. 1到100的二进制编码_每天经过100天的编码后,我学到了什么
  7. Android 多进程开发
  8. 【Level 08】U07 Mixed Feelings L5 Front page news
  9. jdk,Eclipse,SWTDesigner安装【原创】
  10. 2017/09/15
  11. AlloyTeam|腾讯全端 AlloyTeam 团队 - HTML5开源图像处理框架AlloyImage
  12. HTTP 缓存机制及原理
  13. GPT分区表出现问题后的数据恢复思路
  14. DFS应用(拓扑排序和强连通分支)
  15. 计算机网络技术摘要,计算机网络技术应用和发展
  16. 全球五十家知名传感器制造商分布盘点、特点分析
  17. 三星固态驱动安装失败_三星SSD无法安装Win10无法启动解决方案
  18. python万能装饰器_python装饰器万能模板
  19. 12306抢票,极限并发带来的思考?
  20. 中英文翻译功能 php,PHP微信开发之翻译功能

热门文章

  1. CentOS 7上搭建Spark3.0.1+ Hadoop3.2.1分布式集群
  2. 给java程序员网址_程序员常用网址,必须收藏
  3. EntityFramework进阶——事务
  4. XShell远程连接LInux服务器(地址端口映射方法)
  5. python asyncio tcp server_asyncio异步IO——Streams详解
  6. TIM怎么更新版本 TIM检查更新版本教程
  7. JSON中的JSON.parseArray()、JSON.parseObject()、JSON.tojsonString()
  8. Spring Boot——日志配置
  9. @RequestParam 注解原理
  10. SpringBoot设置首页(默认页)跳转