getDeclared××× 方法和 get××× 方法的区别

本文详细解释了Java中Class类的getDeclaredMethod与getMethod方法的区别。getDeclaredMethod用于获取类自身声明的所有方法,包括不同访问级别的方法;而getMethod则用于获取类的所有公共方法,包括从基类继承和接口实现的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[size=medium] Java 的 Class 类提供了很多的 getDeclared××× 方法和 get××× 方法,例如 getDeclaredMethod 和 getMethod 成对出现,getDeclaredConstructors 和 getConstructors 也是成对出现,那两者有什么差别呢?看如下代码:
[/size]

public static void main(String[] args) throws Exception {
String methodName = "doStuff";
Method m1 = Foo.class.getDeclaredMethod(methodName);
Method m2 = Foo.class.getMethod(methodName);
}
// 内部类
class Foo {
void doStuff() { }
}


[size=medium] 运行报以下错误:
Exception in thread "main" java.lang.NoSuchMethodException: ClassTest$Foo.doStuff()
at java.lang.Class.getMethod(Class.java:1605)
at ClassTest.main(ClassTest.java:8)

异常显示 m2 变量的 getMethod 方法没有找到 doStuff 方法,但是从代码中可以看出明明就有该方法啊,原因出在
[b][color=blue]getMethod 方法获得的是所有 public 访问级别的方法,包括自身的所有public方法,和从基类继承的、从接口实现的所有public方法。
getDeclaredMethod 获得的是自身类的所有方法,包括公有(public)方法,protected,私有(private)方法等,而且不受限于访问权限,但是限定本类(可以访问本身类的方法或者内部类的方法[/color])[/b]。

其它的 getDeclared××× 方法和 get××× 方法与此相似。


[color=blue]
getDeclaredMethod*()获取的是类自身声明的所有方法,包含public、protected和private方法。

getMethod*()获取的是类的所有共有方法,这就包括自身的所有public方法,和从基类继承的、从接口实现的所有public方法。[/color][/size]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值