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

Java訪問類中private屬性和方法

一般在其他類中是不能這個得到類中private屬性和訪問private方法的,但天無絕人之路,java強大的反射機制可以完成這個任務。

建一個測試類A:

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

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

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

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