1、获得字节码的一种方法
1.1 第一种方法
Class clazz = Class.forName("包名+类名");
1.2 第二种方法
Class clazz = new People().getClass();
1.3 第三种方法
Class clazz = People.class;
2、反射类的构造函数
2.1 情况一 不带参数 public Person(){};
Class clazz = Class.forName("Person)";
Constructor c = clazz.getConstrucotr(null);
Person p = c.newInstance(null);
2.2 情况二 带参数 public Person(String name){}
Class clazz = Class.forName("Person");
Constructor c = clazz.getConstructor(String.class);
Person p = c.newInstance("小明");
2.3 情况三 多个参数 public Person*(String name,int age){}
Class clazz = Class.forName("Person");
Constructor c = clazz.getConstructor(String.class, int.class);
Person p = c.newInstance("小明",22);
2.4 情况四 私有的 private Person(List list){}
Class clazz = Class.forName("Person");
Constructor c = clazzgetDeclaredConstructor(List.class);
c.setAccessible(true);
Person p = c.newInstance(new ArrayList());
3、反射类的方法
3.1 情况一 不带参数 public void aa1()
Person p = new Person();
Clazz clazz = Class.forName("Person");
Method m = clazz.getMethod("aa1",null);
m.invoke(p,null);
3.2 情况二 带多个参数 public void aa2(String name,int age){}
Person p = new Person();
Class clazz = Class.forName("Person");
Method m = clazz.getMethod("aa2",String.class,int.class);
m.invoke("小明",22);
3.3 情况三 参数为数组 public Class[] aa3(String name, int[] password){}
Person p = new Person();
Class clazz = Class.forName("Person");
Method m = clazz.getMethod("aa3",String.class,int[].class);
m.invoke(p,"小明",new int[]{1,2,3,});
3.4 情况四 私有的 private void aa4(InputStream in){}
Person p = new Person();
Class clazz = Class.forName("Person");
Method m = clazz.getDeclaredMethod("aa3",InputStream.class);
m.setAccessible(true);
m.invoke(p,new FileInputStream("c://text.txt"));
3.5 情况五 静态方法 public void static aa1(int num){}
Class clazz = Class.forName("Person");
Method m = clazz.getMethod("aa3",int.class);
m.invoke(null,22);
3.6 情况六 public static void main(String[] args){}