java反射

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 }
View Code
zhumiao
原文地址:https://www.cnblogs.com/zhumiao/p/9487230.html