class.getdeclaredmethods() 返回当前类显式声明的所有非继承方法(含private/protected/default),不包括父类或接口继承的方法、构造器及初始化块;需setaccessible(true)才能调用私有方法,与getmethods()的区别在于后者返回所有public方法(含继承的)。

Class.getDeclaredMethods() 是 Java 反射中用于获取**当前类显式声明的所有方法(不包括继承的方法)**的数组,返回类型为 Method[]。
核心特点
该方法只返回本类中用 public、protected、default(包访问)、private 修饰的**非继承方法**,包括构造器以外的所有成员方法(含私有方法),但不包含:
- 从父类或接口继承来的方法(哪怕被重写)
- 构造方法(需用
getDeclaredConstructors()) - 静态初始化块或实例初始化块
基本用法示例
假设有一个类:
public class Person {
private String name;
public void sayHello() { }
private void doWork() { }
protected void sleep() { }
}
调用方式:
Method[] methods = Person.class.getDeclaredMethods(); System.out.println(methods.length); // 输出 3:sayHello、doWork、sleep
注意访问权限与安全限制
即使方法是 private 或 protected,也能被获取到,但默认无法直接调用。如需调用私有方法,需先调用 method.setAccessible(true) 突破访问控制检查(受 SecurityManager 限制时可能抛出 SecurityException)。
和 getMethods() 的关键区别
-
getDeclaredMethods():仅本类声明 → 包含 private / protected / default 方法,不含继承方法 -
getMethods():所有public方法(本类 + 父类 + 实现接口中的 public 方法),且只返回 public 的
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











