歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Java反射機制測試

Java反射機制測試

日期:2017/3/1 9:40:07   编辑:Linux編程

Java 通過反射出方法名來運行 invoke該方法,此名稱字符串一定完全匹配並且區分大小寫

Method meth =cla.getMethod("setStr1", new Class[]{java.lang.String.class}); new class 參數類型集合

Object result=meth.invoke(object, new Object[]{"test..."}); new object 為輸入參數類型的值 與上面的數目是對應的。


import java.lang.reflect.Field;

import java.lang.reflect.InvocationTargetException;

import java.lang.reflect.Method;

import java.lang.reflect.Type;

import java.util.Iterator;

public class TestMe {

private String str1;

private String str2;

private String str3;

public void method1() {

System.out.println("TestMe--------method1方法..");

}

public void method2() {

System.out.println("TestMe--------method2方法..");

}

public void method3() {

System.out.println("TestMe--------method3方法..");

}

public void setStr1(String str1) {

this.str1 = str1;

System.out.println(str1);

}

public String getStr1() {

return str1;

}

public void setStr2(String str2) {

this.str2 = str2;

}

public String getStr2() {

return str2;

}

public void setStr3(String str3) {

this.str3 = str3;

}

public String getStr3() {

return str3;

}

public static void main(String[] args) {

test();

}

private static void test() {

Class cla = TestMe.class;

try {

Object object = cla.newInstance();

Method[] methods = cla.getMethods();

Method method;

for (int i = 0; i < methods.length; i++) {

method = methods[i];

System.out.println(method.getName());

// 方法的返回值類型

Type returntype = method.getReturnType();

System.out.println("方法返回值類型" + returntype);

// 方法的參數類型

Type[] types = method.getGenericParameterTypes();

for (int j = 0; j < types.length; j++) {

Type type = types[j];

System.out.println("方法參數類型type: " + j + "----" + type);

}

}

Field[] fileds = cla.getDeclaredFields();

Field field;

for (int i = 0; i < fileds.length; i++) {

field = fileds[i];

System.out.println("---------------------------");

System.out.println(field.getType());

System.out.println(field.getName());

}

Method meth =cla.getMethod("setStr1", new Class[]{java.lang.String.class});

Object result=meth.invoke(object, new Object[]{"test..."});

} catch (InstantiationException e) {

e.printStackTrace();

} catch (IllegalAccessException e) {

e.printStackTrace();

} catch (SecurityException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (NoSuchMethodException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IllegalArgumentException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (InvocationTargetException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

運行結果:

main
方法返回值類型void
方法參數類型type: 0----class [Ljava.lang.String;
method1
方法返回值類型void
method2
方法返回值類型void
method3
方法返回值類型void
setStr1
方法返回值類型void
方法參數類型type: 0----class java.lang.String
getStr1
方法返回值類型class java.lang.String
setStr2
方法返回值類型void
方法參數類型type: 0----class java.lang.String
getStr2
方法返回值類型class java.lang.String
setStr3
方法返回值類型void
方法參數類型type: 0----class java.lang.String
getStr3
方法返回值類型class java.lang.String
wait
方法返回值類型void
wait
方法返回值類型void
方法參數類型type: 0----long
方法參數類型type: 1----int
wait
方法返回值類型void
方法參數類型type: 0----long
hashCode
方法返回值類型int
getClass
方法返回值類型class java.lang.Class
equals
方法返回值類型boolean
方法參數類型type: 0----class java.lang.Object
toString
方法返回值類型class java.lang.String
notify
方法返回值類型void
notifyAll
方法返回值類型void
---------------------------
class java.lang.String
str1
---------------------------
class java.lang.String
str2
---------------------------
class java.lang.String
str3
test...

Java編程思想(第4版) 中文清晰PDF完整版 http://www.linuxidc.com/Linux/2014-08/105403.htm

編寫高質量代碼 改善Java程序的151個建議 PDF高清完整版 http://www.linuxidc.com/Linux/2014-06/103388.htm

Java 8簡明教程 http://www.linuxidc.com/Linux/2014-03/98754.htm

Java對象初始化順序的簡單驗證 http://www.linuxidc.com/Linux/2014-02/96220.htm

Java對象值傳遞和對象傳遞的總結 http://www.linuxidc.com/Linux/2012-12/76692.htm

Copyright © Linux教程網 All Rights Reserved