歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Java訪問類中private屬性和方法

Java訪問類中private屬性和方法

日期:2017/3/1 10:55:37   编辑:Linux編程
一般在其他類中是不能這個得到類中private屬性和訪問private方法的,但天無絕人之路,java強大的反射機制可以完成這個任務。

建一個測試類A:

  1. package com.shao.test;
  2. public class A {
  3. private String testStr="just for test";
  4. private void get(int index,String value){
  5. System.out.println(index+":"+value+" and testStr:"+testStr);
  6. }
  7. }

現在我們來訪問A中的testStr屬性和get方法:

  1. package com.shao.test;
  2. import java.lang.reflect.Field;
  3. import java.lang.reflect.InvocationTargetException;
  4. import java.lang.reflect.Method;
  5. public class B {
  6. public static void main(String[]args) throws ClassNotFoundException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException, NoSuchMethodException, InvocationTargetException{
  7. Field field=Class.forName("com.shao.test.A").getDeclaredField("testStr");
  8. field.setAccessible(true);
  9. A a=new A();
  10. System.out.println(field.getType().toString()); //print:class java.lang.String
  11. System.out.println(field.getName()); //print:testStr
  12. System.out.println(field.getModifiers()); //print:2
  13. Object s=field.get(a);
  14. System.out.println(s); //print:just for test
  15. String x="Hello";
  16. field.set(a, x);
  17. System.out.println(field.get(a)); //print:Hello
  18. Method method=Class.forName("com.shao.test.A").getDeclaredMethod("get", new Class[]{int.class,String.class});
  19. method.setAccessible(true);
  20. method.invoke(a, 3,"apples"); //print:3:apples and testStr:Hello
  21. }
  22. }

屬性使用Filed類獲取,方法使用Method類去調用。
Copyright © Linux教程網 All Rights Reserved