面试题答案
一键面试- 获取私有方法的步骤:
- 使用
Class
类的getDeclaredMethod
方法来获取类中的私有方法。该方法需要传入方法名和方法参数的Class
类型数组。 - 由于是私有方法,需要通过
setAccessible(true)
来打破Java的访问控制检查,使得可以调用该私有方法。
- 使用
- 示例代码:
import java.lang.reflect.Method;
class ExampleClass {
private int privateMethod(String param) {
System.out.println("Private method called with param: " + param);
return param.length();
}
}
public class ReflectPrivateMethod {
public static void main(String[] args) {
try {
// 获取ExampleClass的Class对象
Class<?> exampleClass = ExampleClass.class;
// 获取privateMethod方法,注意第二个参数是方法参数的Class类型
Method privateMethod = exampleClass.getDeclaredMethod("privateMethod", String.class);
// 打破访问控制
privateMethod.setAccessible(true);
ExampleClass exampleObject = new ExampleClass();
// 调用私有方法,第一个参数是实例对象,第二个参数是实际传入方法的参数
int result = (int) privateMethod.invoke(exampleObject, "test");
System.out.println("Result of private method call: " + result);
} catch (Exception e) {
e.printStackTrace();
}
}
}
上述代码首先通过ExampleClass.class
获取ExampleClass
的Class
对象,然后使用getDeclaredMethod
获取privateMethod
,通过setAccessible(true)
打破访问控制,最后使用invoke
方法调用该私有方法并输出结果。如果在获取方法、设置访问权限或调用方法过程中出现异常,会打印异常堆栈信息。