获取类中方法的信息——反射_2 – 热爱改变生活
我的GitHub GitHub |     登录
  • If you can't fly, then run; if you can't run, then walk; if you can't walk, then crawl
  • but whatever you do, you have to keep moving forward。
  • “你骗得了我有什么用,这是你自己的人生”
  • 曾有伤心之地,入梦如听 此歌

获取类中方法的信息——反射_2

Java sinvader 5391℃ 0评论

当我们通过 (反射的介绍以及动态加载类——反射_1) 中的三个方法获得某一个类的类类型的之后,我们就可以通过这个来获得这个类的名称

  1. public static void getClassInfo(Object obj) {
  2. //获得传入类的类类型
  3. Class cls = obj.getClass();
  4. System.out.println("当前类的全称为:" + cls.getName());
  5. System.out.println("当前类的名称为:" + cls.getSimpleName());
  6. /*
  7. * Method 类,方法对象 一个成员方法就是一个 Method 对象
  8. * getMethods() 方法获取的是所有的 public 的函数,包括父类继承而来的
  9. * getDeclaredMethods() 获取的是所有该类自己声明的方法,不问访问父类继承的
  10. */
  11. // Method[] med = cls.getMethods();
  12. Method[] med = cls.getDeclaredMethods();
  13. for (Method method : med) {
  14. //得到方法的返回值类类型
  15. Class types2 = method.getReturnType();
  16. System.out.print("方法返回类型:" + types2.getName() + " ");
  17. //获得方法的名称
  18. System.out.print(method.getName() + "(");
  19. //获得参数的类型---> 获得的是参数列表的类型的类类型
  20. Class[] types = method.getParameterTypes();
  21. for (Class class1 : types) {
  22. System.out.print(class1.getName() + ",");
  23. }
  24. System.out.print(")");
  25. System.out.println("");
  26. }
  27. }

为了看到结果,我自定了一个类,当做传入的参数:

  1. public class TestClass {
  2. public void T1(String name) {
  3.  
  4. }
  5.  
  6. public void T2(int age,String title,double totle) {
  7.  
  8. }
  9.  
  10. public String T3() {
  11. return "";
  12. }
  13.  
  14. private void T4() {
  15.  
  16. }
  17.  
  18. private void T5(int age) {
  19.  
  20. }
  21.  
  22. private String T6() {
  23. return "";
  24. }
  25. }

下面是在使用 getDeclaredMethods 方法的时候的运行结果

  1. 当前类的全称为:cn.sumile.TestClass
  2. 当前类的名称为:TestClass
  3. 方法返回类型:void T1(java.lang.String,)
  4. 方法返回类型:void T2(int,java.lang.String,double,)
  5. 方法返回类型:java.lang.String T3()
  6. 方法返回类型:void T4()
  7. 方法返回类型:void T5(int,)
  8. 方法返回类型:java.lang.String T6()

下面是在使用 getMethods 方法的时候的运行结果

  1. 当前类的全称为:cn.sumile.TestClass
  2. 当前类的名称为:TestClass
  3. 方法返回类型:void T1(java.lang.String,)
  4. 方法返回类型:void T2(int,java.lang.String,double,)
  5. 方法返回类型:java.lang.String T3()
  6. 方法返回类型:void wait(long,int,)
  7. 方法返回类型:void wait(long,)
  8. 方法返回类型:void wait()
  9. 方法返回类型:boolean equals(java.lang.Object,)
  10. 方法返回类型:java.lang.String toString()
  11. 方法返回类型:int hashCode()
  12. 方法返回类型:java.lang.Class getClass()
  13. 方法返回类型:void notify()
  14. 方法返回类型:void notifyAll()

从以上两个结果中我们可以看到第一段代码注释中这两句的意思了:

getMethods() 方法获取的是所有的 public 的函数,包括父类继承而来的 
getDeclaredMethods() 获取的是所有该类自己声明的方法,不问访问父类继承的

测试代码

¥ 有帮助么?打赏一下~

转载请注明:热爱改变生活.cn » 获取类中方法的信息——反射_2


本博客只要没有注明“转”,那么均为原创。 转载请注明链接:sumile.cn » 获取类中方法的信息——反射_2

喜欢 (1)
发表我的评论
取消评论
表情

如需邮件形式接收回复,请注册登录

Hi,你需要填写昵称和邮箱~

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址