反射获得类的属性 蔚落 2022-03-16 07:12 158阅读 0赞 package Reflect; public class Student { //属性 public String name; protected int age; String address; private int idNum; /* //静态代码块,类加载的时候执行 static{ System.out.println("加载类-->我是静态代码块"); } { System.out.println("生成了对象-->我是构造代码块"); } public static void m1(int i){ } public static int m1(int i,String a){ return 1; } public static void m2(){ }*/ } package Reflect; import java.io.File; import java.io.FileDescriptor; import java.lang.reflect.Field; import java.lang.reflect.Modifier; /** * 通过反射得到类的属性: * Java中定义了一个Field类来表示属性 * @author john * */ public class Demo2 { /** * @param args * @throws ClassNotFoundException * @throws SecurityException * @throws NoSuchFieldException * @throws IllegalAccessException * @throws InstantiationException */ public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, SecurityException, InstantiationException, IllegalAccessException { Class class1=Class.forName("Reflect.Student"); /** * 获得属性基本信息 */ System.out.println("========================获得可访问属性==================================="); //获得可访问属性 //getFields()获得的是public修饰的属性 Field[] field1=class1.getFields(); for(Field fs:field1){ System.out.println(fs); } System.out.println("=========="); //获得所有的属性 Field[] field2=class1.getDeclaredFields(); for(Field fs:field2){ System.out.println(fs); } System.out.println("=========="); //获得单独属性 Field field3=class1.getDeclaredField("name"); System.out.println(field3); System.out.println("======================== 给属性赋值==================================="); /** * 给属性赋值(注意public与private属性) */ //得到对象 Object o=class1.newInstance(); //赋值 field3.set(o,"小汪"); //查看属性的值 System.out.println("给public属性赋值:name="+field3.get(o)); //给private修饰的属性赋值 Field field4=class1.getDeclaredField("idNum"); field4.setAccessible(true);//打破封装-->导致属性不安全 field4.set(o, 114); System.out.println("给private属性赋值:idNum="+field4.get(o)); System.out.println("================获得属性中的类型,修饰符,变量名称==============================="); /** * 获得属性中的类型,修饰符,变量名称 */ //获得类型 for(Field fs:field2){ Class type=fs.getType(); System.out.println(type); } System.out.println("=========="); //获得变量名称 for(Field fs:field2){ System.out.println(fs.getName()); } System.out.println("=========="); //获得修饰符(返回的数字代表不同的修饰符号) for(Field fs:field2){ int i=fs.getModifiers(); System.out.println(Modifier.toString(i)); } System.out.println("=================================================================="); } }
还没有评论,来说两句吧...