- 通过反射获取
java.util.Date
类中的getTime
方法:
import java.lang.reflect.Method;
public class DateReflectionExample {
public static void main(String[] args) {
try {
// 获取Date类的Class对象
Class<?> dateClass = Class.forName("java.util.Date");
// 通过反射获取getTime方法
Method getTimeMethod = dateClass.getMethod("getTime");
// 创建Date类的实例
java.util.Date date = new java.util.Date();
// 调用getTime方法
long time = (long) getTimeMethod.invoke(date);
System.out.println("当前时间的毫秒数: " + time);
} catch (Exception e) {
e.printStackTrace();
}
}
}
getMethod
和getDeclaredMethod
方法的区别:
getMethod
:
- 用于获取类及其父类中声明为
public
的方法。
- 例如,假设类
B
继承自类A
,在类A
中有一个public
方法publicMethod
,在类B
中调用getMethod("publicMethod")
能够获取到该方法,即使该方法是在父类A
中定义的。
getDeclaredMethod
:
- 用于获取类自身声明的方法,无论该方法的访问修饰符是什么(
public
、private
、protected
或默认),但不会获取继承自父类的方法。
- 例如,假设类
C
中有一个private
方法privateMethod
,调用getDeclaredMethod("privateMethod")
可以获取到该方法,但是如果要调用该private
方法,需要先通过setAccessible(true)
来打破Java的访问控制检查。