java反射

mac2025-08-01  1

一、什么是反射?

Java反射说的是在运行状态中,对于任何一个类,我们都能够知道这个类有哪些方法和属性。对于任何一个对象,我们都能够对它的方法和属性进行调用。我们把这种动态获取对象信息和调用对象方法的功能称之为反射机制。

二、反射的三种方式

这里需要跟大家说一下,所谓反射其实是获取类的字节码文件,也就是.class文件,那么我们就可以通过Class这个对象进行获取。

//getClass Student student2 = new Student(); Class cl = student2.getClass(); //class Class c2 = Student.class; //Class.forName Class student = Class.forName("com.company.Student");

三、通过反射获取类的构造方法、方法以及属性

       其中,公有不包括protected

//获取公有构造方法 Constructor[] cs = student.getConstructors(); for (Constructor con:cs) { System.out.println(con); } //获取所有构造方法 Constructor[] cs2 = student.getDeclaredConstructors(); for (Constructor con:cs2) { System.out.println(con); } //获取无参构造方法 Constructor c1 = student.getConstructor(); System.out.println(c1); //获取有参构造方法 Constructor c2 = student.getConstructor(new Class[]{String.class,String.class}); System.out.println(c2); //获取类公有属性 Field[] fields = student.getFields(); for(Field field:fields) { System.out.println(field); } //获取类所有属性 Field[] fields2 = student.getDeclaredFields(); for(Field field:fields) { System.out.println(field); } //获取类属性 DeclaredField为所有属性 Field为公有属性 Field field = student.getDeclaredField("name"); Object obj = student.getConstructor().newInstance(); //暴力反射私有属性 field.setAccessible(true); field.set(obj,"张三"); Student st = (Student)obj; String name = st.getName(); System.out.println(name); //获取公有方法 Method[] methods = student.getMethods(); for (Method method:methods) { System.out.println(method); } //获取所有方法 Method[] methods2 = student.getDeclaredMethods(); for (Method method:methods2) { System.out.println(method); } //获取构造方法实例化对象,进行赋值 Method method = student.getMethod("getName",String.class); Object object = student.getConstructor().newInstance(); Object invoke = method.invoke(object,"007"); System.out.println(invoke);

四、应用

目前只发现了这个,后续的再补充

//根据字段名获取对应的值 public Object getFieldValueByName(String fieldName,Object object) throws Exception{ String firstLetter = fieldName.substring(0,1).toUpperCase(); String getter = "get"+firstLetter+fieldName.substring(1); Method method = object.getClass().getMethod(getter,new Class[]{}); return method.invoke(object); }

 

最新回复(0)