Javainvoke方法详解(Java反射invoke怎么用)

2023-11-19 10:00:03 :35

javainvoke方法详解(Java反射invoke怎么用)

各位老铁们好,相信很多人对javainvoke方法详解都不是特别的了解,因此呢,今天就来为大家分享下关于javainvoke方法详解以及Java反射invoke怎么用的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

本文目录

Java反射invoke怎么用

Java反射中invoke的用法,我给你个例子,你看看吧(每一句都有注释)

import java.lang.reflect.Method;

import java.lang.reflect.Constructor;

public class S{

 public void test(){

  System.out.println("test");

 }

 public static void main(String args) throws Exception {

  //获取S类

  Class clzz = Class.forName("S");

  //获取S类默认无参构造方法

  Constructor con = clzz.getDeclaredConstructor();

   //创建一个S类实例对象

   S s =(S)con.newInstance();

   //获取S类的公有成员方法test

  Method m=clzz.getDeclaredMethod("test");

  //调用S类对象s中的公有成员方法test

  m.invoke(s);

 }

}

java 中 invoke()的作用是什么

在写代码的时候,发现从父类class通过getDeclaredMethod获取的Method可以调用子类的对象,而子类改写了这个方法,从子类class通过getDeclaredMethod也能获取到Method,这时去调用父类的对象也会报错。虽然这是很符合多态的现象,也符合java的动态绑定规范,但还是想弄懂java是如何实现的,就学习了下Method的源代码。 

Method的invoke方法:

1、先检查 AccessibleObject的override属性是否为true。

AccessibleObject是Method,Field,Constructor的父类,override属性默认为false,可调用setAccessible方法改变,如果设置为true,则表示可以忽略访问权限的限制,直接调用。

2、如果不是ture,则要进行访问权限检测。用Reflection的quickCheckMemberAccess方法先检查是不是public的,如果不是再用Reflection.getCallerClass方法获得到调用这个方法的Class,然后做是否有权限访问的校验,校验之后缓存一次,以便下次如果还是这个类来调用就不用去做校验了,直接用上次的结果。

3、调用MethodAccessor的invoke方法。每个Method对象包含一个root对象,root对象里持有一个MethodAccessor对象。我们获得的Method独享相当于一个root对象的镜像,所有这类Method共享root里的MethodAccessor对象,(这个对象由ReflectionFactory方法生成,ReflectionFactory对象在Method类中是static final的由native方法实例化。

Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。

Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等。

java中 invoke()如何传实体进去

你问的是Method类的invoke方法吧这个方法的定义是:invoke(Object obj,Object...args)第一个参数为类的实例,第二个参数为相应函数中的参数你的问题里说如何传实体进去,很简单,你定义的方法只要写了接收参数(数量无所谓),那么直接(弄成数组)传进去就是了。以下是一个例子:public class Test{ public void print(String string) { System.out.println("print(String string)"); System.out.println(string); } public void print(String ... strings) { System.out.println("print(String ... string)"); for(String string: strings) System.out.println(string); } public static void main(String args) throws Exception { Test test = new Test(); // 调用 print(String string) Method method1 = test.getClass().getMethod("print", String.class); method1.invoke(test, "a"); // 调用 print(String ... strings) Method method2 = test.getClass().getMethod("print", Array.newInstance(String.class, 0).getClass()); method2.invoke(test, new String{"a", "b"}}); } }

java中invoke()的作用是什么

用来执行一个方法,是反射中知识 。

就是调用类中的方法,最简单的用法是可以把方法参数化invoke(class, method)。

比如你Test类里有一系列名字相似的方法setValue1、setValue2等等。

可以把方法名存进数组v),就顺序调用了全部setValue。

Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。

Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程

如果你还想了解更多这方面的信息,记得收藏关注本站。

javainvoke方法详解(Java反射invoke怎么用)

本文编辑:admin
Copyright © 2022 All Rights Reserved 威海上格软件有限公司 版权所有

鲁ICP备20007704号

Thanks for visiting my site.