導航:首頁 > 編程語言 > 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相關的資料

熱點內容
linux啟動選擇內核 瀏覽:670
華碩用什麼編程 瀏覽:277
金山數據恢復已付款怎麼辦 瀏覽:326
win10滑鼠箭頭改變 瀏覽:906
主角叫凌寒的小說 瀏覽:230
word怎麼在字加框 瀏覽:537
俄二戰電影舊槍普通話在線觀看 瀏覽:387
電影看見大胸女 瀏覽:541
tcpstate配置文件 瀏覽:939
著名片站 瀏覽:103
一段簡單的編程由什麼組成 瀏覽:561
手機android文件夾沒有內容 瀏覽:281
寶書網txt官網入口當書網 瀏覽:10
四創大數據 瀏覽:547
少兒編程能做出哪些游戲 瀏覽:156
大數據分析趙麗穎價值 瀏覽:2
iphone來自電腦的照片怎麼刪除 瀏覽:648
姜惠恩禁止的愛 瀏覽:981
三君四妾by小透明 瀏覽:585
修車女女電影 瀏覽:451

友情鏈接