反射中的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

相關文章
相關標籤/搜索