class类的使用
1.静态的成员变量,基本类型不是对象。
问题来了,对象是谁的对象呢,,,答案是Class
任何一个类都是Class的实例对象,这个实例对象有三种有三种表达方式
Class c1 = Foo.class;
Class c2 = foo.getClass();
Class c3 = Class.forName("Foo");
可以通过类类型创建对象创建实例,a.newInstance();//需要有无参数的构造方法
new方法是静态加载类,Class c3 = Class.forName("Foo")可以动态加载类
方法的反射
方法也是对象,是java.lang.reflect.Method的实例对象
成员变量的反射
成员变量也是对象,是java.lang.reflect.Field的实例对象
构造函数的反射
构造函数也是对象,是java.lang.reflect.Contructor的实例对象
Java类加载机制
java类加载机制和反射参考:https://www.cnblogs.com/ITtangtang/p/3978102.html
Java集合泛型的本质
Java集合泛型是在编译的时候防止类型出错的,编译之后就没有泛型的。反射可以绕过编译,验证这个理论。
1 public class MethodDemo4 { 2 public static void main(String[] args) { 3 ArrayList list = new ArrayList(); 4 ArrayList<String> list1 = new ArrayList<String>(); 5 list1.add("hello"); 6 Class c1 = list.getClass(); 7 Class c2 = list1.getClass(); 8 System.out.println(c1 == c2);//true 9 try { 10 Method m = c2.getMethod("add", Object.class); 11 m.invoke(list1, 20); 12 System.out.println(list1.size()); 13 System.out.println(list1); 14 /*for (String string : list1) { 15 System.out.println(string); 16 }*/ 17 } catch (Exception e) { 18 e.printStackTrace(); 19 } 20 } 21 }