`
peonyzzdx
  • 浏览: 581255 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

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

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

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() { }  
}  


        运行报以下错误:
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 方法,但是从代码中可以看出明明就有该方法啊,原因出在
getMethod 方法获得的是所有 public 访问级别的方法,包括自身的所有public方法,和从基类继承的、从接口实现的所有public方法。
getDeclaredMethod 获得的是自身类的所有方法,包括公有(public)方法,protected,私有(private)方法等,而且不受限于访问权限,但是限定本类(可以访问本身类的方法或者内部类的方法


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




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

getMethod*()获取的是类的所有共有方法,这就包括自身的所有public方法,和从基类继承的、从接口实现的所有public方法。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics