package com.study.demo; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.ArrayList; public class Reflection { // 1.add String to ArrayList<Integer> public void saveString() throws Exception { ArrayList<Integer> list = new ArrayList<Integer>(); list.add(123); System.out.println(list); Class clazz = Class.forName("java.util.ArrayList"); Method addMethod = clazz.getMethod("add", Object.class); addMethod.invoke(list, "reflection to String!"); System.out.println(list); } //2.用反射创建一个对象 public void creatObject() throws Exception { //获取student类的字节码对象 Class clazz = Class.forName("com.study.demo.Student"); //用反射创建一个对象 Student student = (Student) clazz.newInstance(); //获取字段 Field idField = clazz.getDeclaredField("id"); Field nameField = clazz.getDeclaredField("name"); Field sexFiled = clazz.getDeclaredField("sex"); //取出私有属性(使private属性可以在类的外部被调用) idField.setAccessible(true); nameField.setAccessible(true); sexFiled.setAccessible(true); //给字段设值 idField.set(student, 001); nameField.set(student, "zhangsan"); sexFiled.set(student, "man"); System.out.println(student); // // Method idMethod=clazz.getMethod("setId", int.class); // Method nameMethod=clazz.getMethod("setName", String.class); // Method sexMethod=clazz.getMethod("setSex", String.class); // idMethod.invoke(student,002); // nameMethod.invoke(student,"lisi"); // sexMethod.invoke(student,"woman"); //方法2 // Class clazz = Class.forName("com.study.demo.Student"); // Constructor constructor = clazz.getConstructor(Integer.class, String.class, String.class); // Student student1 = (Student) constructor.newInstance(002, "zhansganfeng", "man"); // System.out.println(student1); } public void createObject2() throws Exception { Class clazz = Class.forName("com.study.demo.Student"); Student stu = (Student) clazz.newInstance(); Method method = clazz.getMethod("print", String.class); method.invoke(stu, "this is student class"); } public void createObject3(String className) throws Exception { Class clazz = Class.forName(className); A a = (A) clazz.newInstance(); Method method = clazz.getMethod("print"); method.invoke(a); } }
反射代码
最新推荐文章于 2024-04-15 11:02:36 发布