java反射中getDeclaredMethods和getMethods的区别

来源:互联网 发布:烽火路由器mac地址过滤 编辑:程序博客网 时间:2024/05/07 08:42


getMethods() 

          返回一个包含某些 Method 对象的数组,这些对象反映此 Class 对象所表示的类或接口(包括那些由该类或接口声明的以及从超类和超接口继承的那些的类或接口)的公共 member 方法。

 返回数组中的元素没有排序,也没有任何特定的顺序。


package staticMethodReflect;import java.lang.reflect.Method;    class ForMethod{        //声明静态方法        public static void sayHello(String name){             System. out.println( "你好" +name +"!!!" );       }        public String generateNum( Integer max, Integer min){              return (Math.random()*( max- min)+ min)+ "";       }  }  public class method {  public static void main(String[] args){//创建ForMethod类对象          ForMethod fm = new ForMethod();           //获取ForMethod类对象对用的Class对象           Class<?> fmc = fm.getClass();           //获取可以访问的对象的对应的Method数组          Method[] md = fmc.getMethods();                  for(int i=0;i<md.length;i++){        System.out.println(md[i].getName());        }}  }

第一运行结果:                                                                                                           第二次运行:

                                                        

可以看出两次的运行结果顺序是不一样的



getDeclaredMethods() 

          返回 Method 对象的一个数组,这些对象反映此 Class 对象表示的类或接口声明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。

返回数组中的元素没有排序,也没有任何特定的顺序。

package staticMethodReflect;import java.lang.reflect.Method;    class ForMethod{        //声明静态方法        public static void sayHello(String name){             System. out.println( "你好" +name +"!!!" );       }        public String generateNum( Integer max, Integer min){              return (Math.random()*( max- min)+ min)+ "";       }  }  public class method {  public static void main(String[] args){//创建ForMethod类对象          ForMethod fm = new ForMethod();           //获取ForMethod类对象对用的Class对象           Class<?> fmc = fm.getClass();           //获取可以访问的对象的对应的Method数组          Method[] md = fmc.getDeclaredMethods();                 for(int i=0;i<md.length;i++){        System.out.println(md[i].getName());        }}
}


可以看出只打印了本类的方法,父类的都没有打印。



反射中两个方法中最需要注意的是

返回数组中的元素没有排序,也没有任何特定的顺序!每次运行的结果顺序可能是不一样的。

有兴趣可以看一下这篇博文中,因为没有注意顺序而引发的问题

java反射机制学习总结


0 0
原创粉丝点击