歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Java反射機制測試

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