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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章