导航:首页 > 编程语言 > java反射执行method

java反射执行method

发布时间:2021-12-04 13:59:12

A. java 反射机制的几个调用方法

import java.lang.reflect.Method;
import java.lang.reflect.InvocationTargetException;

/**
* Created by IntelliJ IDEA.
* File: TestRef.java
* User: leimin
* Date: 2008-1-28 14:48:44
*/
public class TestRef {

public staticvoid main(String args[]) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException {
Foo foo = new Foo("这个一个Foo对象!");
Class clazz = foo.getClass();
Method m1 = clazz.getDeclaredMethod("outInfo");
Method m2 = clazz.getDeclaredMethod("setMsg", String.class);
Method m3 = clazz.getDeclaredMethod("getMsg");
m1.invoke(foo);
m2.invoke(foo, "重新设置msg信息!");
String msg = (String) m3.invoke(foo);
System.out.println(msg);
}
}

class Foo {
private String msg;

public Foo(String msg) {
this.msg = msg;
}

public void setMsg(String msg) {
this.msg = msg;
}

public String getMsg() {
return msg;
}

public void outInfo() {
System.out.println("这是测试反射的测试类");
}
}

B. java 反射 方法调用

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于专任意一个对属象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
JAVA反射(放射)机制:“程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言”。从这个观点看,Perl,Python,Ruby是动态语言,C++,Java,C#不是动态语言。但是JAVA有着一个非常突出的动态相关机制:Reflection,用在Java身上指的是我们可以于运行时加载、探知、使用编译期间完全未知的classes。换句话说,Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对象实体、或对其fields设值、或唤起其methods。
说白了就是调用这个累的.Class方法然后调用其属性和方法。

C. 如何通过java 反射 调用一个 含有 可变参数的 方法呢

java反射调用可变参数的方法的方式是传入objects参数,如下代码

publicclassReflect{

publicstaticvoidmain(String[]args)throwsException{
Class<?>clazz=Single.class;
Singlesingle=(Single)clazz.newInstance();
List<String>list=newArrayList<String>(){
=1L;
{
add("fuck");
add("ni");
add("mei");
}
};

//获取method两种方式,在method中数组的的空间大小是可以随便写的不一定使用0
/*1*/
Methodmethod=clazz.getDeclaredMethod("method",Array.newInstance(Object.class,0).getClass());
/*2*/
method=clazz.getDeclaredMethod("method",(newObject[0]).getClass());//初始化参数
/*1*/
Objectobjs=Array.newInstance(Object.class,2);
Array.set(objs,0,list);
Array.set(objs,1,"23");
method.invoke(single,objs);

/*2*/
Object[]objects={1,"fuck",list};
method.invoke(single,newObject[]{objects});
}
}

classSingle{
publicvoidmethod(Object...objs){
System.out.println(Arrays.deepToString(objs));
}
}

结果:
[[fuck,ni,mei],23]
[1,fuck,[fuck,ni,mei]]

D. Java如何接收使用反射执行方法所返回的值

importjava.lang.reflect.Constructor;
importjava.lang.reflect.Method;

publicclassReflectDemo{
publicstaticvoidmain(String[]args)throwsException{
//获取字节码文件对象
Classc=Class.forName("cn.itcast_01.Person");

//获取所有的方法
//Method[]methods=c.getMethods();//获取自己的包括父亲的公共方法
//Method[]methods=c.getDeclaredMethods();//获取自己的所有的方法
//for(Methodmethod:methods){
//System.out.println(method);
//}

Constructorcon=c.getConstructor();
Objectobj=con.newInstance();

/*
*Personp=newPerson();p.show();
*/

//获取单个方法并使用
//publicvoidshow()
//publicMethodgetMethod(Stringname,Class<?>...parameterTypes)
//第一个参数表示的方法名,第二个参数表示的是方法的参数的class类型
Methodm1=c.getMethod("show");
//obj.m1();//错误
//publicObjectinvoke(Objectobj,Object...args)
//返回值是Object接收,第一个参数表示对象是谁,第二参数表示调用该方法的实际参数
m1.invoke(obj);//调用obj对象的m1方法

System.out.println("----------");
//publicvoidmethod(Strings)
Methodm2=c.getMethod("method",String.class);
m2.invoke(obj,"hello");
System.out.println("----------");

//publicStringgetString(Strings,inti)
Methodm3=c.getMethod("getString",String.class,int.class);
ObjectobjString=m3.invoke(obj,"hello",100);
System.out.println(objString);
//Strings=(String)m3.invoke(obj,"hello",100);
//System.out.println(s);
System.out.println("----------");

//privatevoidfunction()
Methodm4=c.getDeclaredMethod("function");
m4.setAccessible(true);
m4.invoke(obj);
}
}

E. java 反射 调用无参数方法

通过Java反射调用无参数方法,这是个测试用的例子,通过反射调用对象的方法,代码如下:

importjava.lang.reflect.Method;
importjava.lang.reflect.InvocationTargetException;

/**
*CreatedbyIntelliJIDEA.
*File:TestRef.java
*User:Administrator
*Date:2015-7-1016:28:44
*/
publicclassTestRef{

publicstaticvoidmain(Stringargs[])throwsNoSuchMethodException,IllegalAccessException,InvocationTargetException{
Foofoo=newFoo("这个一个Foo对象!");
Classclazz=foo.getClass();
Methodm1=clazz.getDeclaredMethod("outInfo");
Methodm2=clazz.getDeclaredMethod("setMsg",String.class);
Methodm3=clazz.getDeclaredMethod("getMsg");
m1.invoke(foo);
m2.invoke(foo,"重新设置msg信息!");
Stringmsg=(String)m3.invoke(foo);
System.out.println(msg);
}
}

classFoo{
privateStringmsg;

publicFoo(Stringmsg){
this.msg=msg;
}

publicvoidsetMsg(Stringmsg){
this.msg=msg;
}

publicStringgetMsg(){
returnmsg;
}

publicvoidoutInfo(){
System.out.println("这是测试Java反射调用无参数方法的测试类");
}
}

控制台输出结果:

这是测试Java反射调用无参数方法的测试类
重新设置msg信息!
Processfinishedwithexitcode0

F. java反射中method类中的invoke方法是做什么的

就是调用类中的复方法,最制简单的用法是可以把方法参数化
invoke(class, method)
比如你Test类里有一系列名字相似的方法setValue1、setValue2等等
可以把方法名存进数组v[],然后循环里invoke(test,v[i]),就顺序调用了全部setValue

阅读全文

与java反射执行method相关的资料

热点内容
谷道网络技术有限公司 浏览:513
小米电视不能识别u盘apk文件 浏览:390
如何将摄像头的数据变高清 浏览:581
西青大数据 浏览:457
2016支付宝vs微信 浏览:745
移动g2f怎么进入3g网络 浏览:435
linux配置阿帕奇 浏览:18
音乐标签id3修改工具 浏览:589
数据频繁变化是什么 浏览:977
iphone来电壁纸 浏览:40
删除文件夹找不到指定路径怎么办 浏览:487
原力大数据招聘 浏览:479
数据线圆头什么意思 浏览:768
协和app怎么取号 浏览:664
c坐标转换代码 浏览:707
唐筛数据为什么能看出男女 浏览:44
快手java 浏览:835
qq分享的文件在哪里 浏览:226
爱念电影 浏览:656
97不用下载播放器的 浏览:649

友情链接