反射中的Method类

1、概述

    一、Method类表明某个类中的一个成员方法java

    二、获得类中的某一个方法数组

例子: Method charAt = Class.forName("java.lang.String").getMethod("charAt", int.class);

    三、调用方法spa

一般方式:System.out.println(str.charAt(1));
反射方式: System.out.println(charAt.invoke(str, 1));

    特别注意:若是传递给Method对象的invoke()方法的第一个参数为null,这有着什么样的意义呢?说明该Method对象对应的是一个静态方法!code

    四、jdk1.4和jdk1.5的invoke方法的区别对象

Jdk1.5:public Object invoke(Object obj,Object... args)
Jdk1.4:public Object invoke(Object obj,Object[] args),即按jdk1.4的语法,须要将一个数组做为参数传递给invoke方法时,数组中的每一个元素分别对应被调用方法中的一个参数,因此,调用charAt方法的代码也能够用Jdk1.4改写为 charAt.invoke(“str”, new Object[]{1})形式。

    再强调一遍参数类型用什么来表示?用Class对象!ci

2、代码描述

package staticimport.reflect.method;

import java.lang.reflect.Method;

public class ReflectMethodTest {

	public static void main(String[] args) throws Exception {
		String str = "abc";
		
		//jdk1.5(可变参数)
		Method method = String.class.getMethod("charAt", int.class);
		System.out.println(method.invoke(str, 1));
		
		//jdk1.4(数组方式)
		Method method2 = String.class.getMethod("charAt", new Class[]{int.class});
		System.out.println(method2.invoke(str, new Object[]{2}));
		
		//调用静态方法
		Method method3 = Class.forName("java.lang.Math").getMethod("max", int.class,int.class);
		System.out.println(method3.invoke(null, 4, 100));
	}

}

3、专家模式

    一、描述

        某个变量属于某个类,对变量的如何动做(方法)应随之隶属于该类!换句话说,我拥有该变量,那么我就是该变量的全部者(专家)。如:车停、画圆、关门等。get

相关文章
相关标签/搜索