JAVA中的反射機制

把《JAVA核心技術》(卷一)的反射部分看完後,仍然迷迷糊糊。聽另一位大神的話,去看了網上的一個視頻,慕課網一位老師講的,非常好。這裏摘取他的最後一個例子看一下。

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.lang.Object.*;

public class fanshe {
	public static void main(String[] args){
		ArrayList<String> list1=new ArrayList();
		ArrayList  list=new ArrayList();
		list1.add("hello");
		try
		{	
			Class c=list1.getClass();Method m=c.getMethod("add",Object.class);
			m.invoke(list1, 100);
		}
		catch(Exception e)
		{
			System.out.println("error");
		}
		System.out.println(list1);
	}	
}

這段代碼的巧妙之處在於他通過反射機制繞開了編譯中的檢查輸入,結果硬生生的把一個整型數據加到一個泛型String數組列表中。

虛擬機裏類的加載分兩種:

1.靜態加載,編譯的時候就加載,比如new語句;

2.動態加載,編譯時不加載,運行時加載,比如反射語句系列;


這裏我們就巧妙的運用反射機制避開了代碼編譯時對輸入的檢查。

同時也證明了一點:

JAVA中的泛型在編譯後的運行過程中是去泛型化的。

上面程序的運行結果如下:


發佈了29 篇原創文章 · 獲贊 11 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章