java_反射 — 静态和非静态方法调用

反射

拿到类
Class<?> classBook = Class.forName("包名")
拿到方法
Method method = classBook.getMethod("方法名", new Class[]{参数类型.class ...});

调用方法

静态方法的反射调用

	method.invoke(null, 参数);

非静态方法的反射调用(也就是需要传递对象参数)

	Object objectInstance = classBook.newInstance();
	method.invoke(objectInstance, 参数);
拿到属性(获取类 public 属性)
-- getFields

	Field[] fds = classBook.getFields();

		for (int i=0; i < fds.length; i++)
        {
            String fn = fds[i].getName();
            Class tc = fds[i].getType();
            String ft = tc.getName();
            System.out.println("该属性的名字为:"+fn+",该属性的类型为:"+ft);
        }
拿到返回值为 string[] 类型如何获取
如果知道类型直接使用强转的方式

	String phoneObject = (String)getPhoneMethod.invoke(null, null);
    String[] phonesObject = (String[])getPhonesMethod.invoke(null, null);
    
如果是未知类型呢?如何处理?
	
	Object[] phonesObject = (Object[])getPhonesMethod.invoke(null, null);

方法参数的区别,以及拿方法的区别

  1. 只有一个String类型参数

     public class Book {
     	public static String getValue(String book) {
     	}
     }
    

    获取方法

     // 拿到方法
     Method method = classBook.getMethod("getValue", String.class);
     // 通过 invoke 调用,返回值保存到 object
     Object object = method.invoke(null, "string");
    
  2. 只有一个 boolean 方法

     public static String getValue(Boolean value) {
         System.out.println("getValue:" + value);
         return "xx";
     }
    

    获取方法

     // 拿到方法
     Method method = classBook.getMethod("getValue", Boolean.class);
     // 通过 invoke 调用,返回值保存到 object
     Object object = method.invoke(null, false);
    
  3. 多个参数 int 型

     public static String getValue(int existingValue, int vibrateType,
                               int vibrateSetting) {
     }
    

    获取方法

     // 拿到方法
     Method method = classBook.getMethod("getValue", new Class[]{int.class, int.class, int.class});
     // 通过 invoke 调用,返回值保存到 object
     Object object = method.invoke(null, 1,2,3);
    
非静态方法 和 静态方法区别
区别在于那里, 可以看到前面 invoke 传的是null, 那么这里就需要传对象了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值