第1章 Class类的使用
1-1 Class类的使用 (15:18)
第2章 动态加载类
2-1 Java 动态加载类 (13:19)
第3章 获取方法信息
3-1 Java 获取方法信息 (17:06)
第4章 获取成员变量构造函数信息
4-1 Java 获取成员变量构造函数信息 (14:44)
第5章 方法反射的基本操作
5-1 Java 方法反射的基本操作 (13:55)
import java.lang.reflect.Method; public class Hello { public static void main(String[] args) { /* * 要获取print(int a,int b)方法 1.要获取一个方法就是获取类的信息,获取类的信息首先要类的类类型 * * 2.获取方法 名称和参数列表来决定 getMethod获取的是public的方法 getDeclaredMethod自己声明的方法 */ A a1 = new A(); Class c = a1.getClass(); try { Method m1 = c.getDeclaredMethod("print", int.class, int.class); Method m2 = c.getDeclaredMethod("print", String.class, String.class); // 方法的反射操作 // 方法如果没有返回值返回null,有返回值返回具体的返回值 Object o1 = m1.invoke(a1, 10, 20); Object o2 = m2.invoke(a1, "hello", "world"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } class A { public void print(int a, int b) { System.out.println(a + b); } public void print(String a, String b) { System.out.println(a.toUpperCase() + "," + b.toLowerCase()); } }
第6章 通过反射了解集合泛型的本质
6-1 Java 通过反射了解集合泛型的本质 (07:53)
import java.lang.reflect.Method; import java.util.ArrayList; public class Hello { public static void main(String[] args) { ArrayList list1 = new ArrayList(); ArrayList<String> list2 = new ArrayList<String>(); list2.add("hello"); // list1.add(20);错误的 Class c1 = list1.getClass(); Class c2 = list2.getClass(); System.out.println(c1 == c2); // 反射的操作都是编译之后的操作 /* * c1==c2结果返回true说明编译之后集合的泛型是去泛型化的 Java中集合的泛型,是防止错误输入的,只在编译阶段有效, 绕过编译就无效了 * 验证:我们可以通过方法的反射来操作,绕过编译 */ try { Method m = c2.getMethod("add", Object.class); m.invoke(list2, 20);// 绕过编译操作就绕过了泛型 System.out.println(list2.size()); System.out.println(list2); } catch (Exception e) { e.printStackTrace(); } } }
时间: 2024-10-09 22:56:38