通过反射获取无参无返回值成员方法并使用

通过反射获取无参无返回值成员方法并使用

原文链接:https://blog.csdn.net/wangyanming123/article/details/51355439
通过反射获取无参无返回值成员方法并使用

public classPerson {
   private String name;

   int age;

   public String address;

   public Person() {
   }

   private Person(String name){
      this.name = name;

   }

   Person(Stringname, intage) {
      this.name = name;

      this.age = age;

   }

   public Person(String name, int age, String address) {
      this.name = name;

      this.age = age;

      this.address = address;

   }

   public void show() {
      System.out.println("show");

   }

   public void method(String s) {
      System.out.println("method "+ s);

   }

   public String getString(Strings, inti) {
      return s + "---" + i;

   }

   private void function() {
      System.out.println("function");

   }

   @Override

   public String toString() {
      return "Person [name="+ name+ ", age="+ age+ ", address=" + address

            +"]";

   }

}

import java.lang.reflect.Constructor;

import java.lang.reflect.Method;

public classReflectDemo {
   public static void main(String[] args) throws Exception {
      // 获取字节码文件对象

      Classc = Class.forName("day27.Person");

      // 获取所有的方法

      // Method[] methods = c.getMethods(); // 获取自己的包括父亲的公共方法

      // Method[] methods = c.getDeclaredMethods(); // 获取自己的所有的方法

      // for (Method method : methods) {

      // System.out.println(method);

      // }

      Constructorcon = c.getConstructor();

      Objectobj = con.newInstance();

      /*

       * Person p = new Person(); p.show();

       */

      // 获取单个方法并使用

      // public void show()

      // public Method getMethod(String name,Class<?>...parameterTypes)

      // 第一个参数表示的方法名,第二个参数表示的是方法的参数的class类型

      Methodm1 = c.getMethod("show");

      // obj.m1(); // 错误

      // public Object invoke(Object obj,Object... args)

      // 返回值是Object接收,第一个参数表示对象是谁,第二参数表示调用该方法的实际参数

      m1.invoke(obj);// 调用obj对象的m1方法

      System.out.println("----------");

      // public void method(String s)

      Methodm2 = c.getMethod("method", String.class);

      m2.invoke(obj,"hello");

      System.out.println("----------");

      // public String getString(String s, int i)

      Methodm3 = c.getMethod("getString", String.class, int.class);

      ObjectobjString = m3.invoke(obj, "hello", 100);

      System.out.println(objString);

      // String s = (String)m3.invoke(obj,"hello",100);

      // System.out.println(s);

      System.out.println("----------");

      // private void function()

      Methodm4 = c.getDeclaredMethod("function");

      m4.setAccessible(true);

      m4.invoke(obj);

   }

}

运行结果:

show

----------

method hello

----------

hello---100

----------

function
————————————————

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值