java-反射-3

    科技2024-07-08  73

    package reflect_2020_09_29; import java.lang.reflect.*; /** * 学习通过反射访问 成员变量 的方法 * * 1.要使用java.lang.reflact.File这个包 * * Class c=Class.getName("类名"); * 语法:File []f=c.getFile();//返回所有的共有属性 * * 2.常用的方法 * * 1.getModifiers();//成员变量的修饰符 * 2.getName();//成员变量的名字 * 3.getType();//成员变量的申明类型 * * 3.获取成员变量名字 * * 1.获取所有的成员变量 class.getFiles(); * 2.获取指定的成员变量 class.getFile(String name);//参数是变量的名字 * * 3.获取包括私有的成员变量 class.getDeclaredFiles(); * 4.获取指定的包括私有的成员变量 class.getDeclaredFile(String name); * * 4.获取变量的值 * * 第一步:首先判断是不是私有的,如果是私有的,加一行代码 * setAccessible(true);//获取权限 * * 第二步:获取这个值 * * 1.getBoolean(Object o);2.getByte(Object o);3.getChar(Object o);4.getDouble(Object o); * 5.getInt(Object o);6.getLong(Object o);7.getShort(Object o); * * 第三步:修改这个值 * * * 1.setBoolean(Object o);2.setByte(Object o);3.setChar(Object o);4.setDouble(Object o); * 5.setInt(Object o);6.setLong(Object o);7.setShort(Object o); * @author 小虎牙 * */ public class reflact_3 { public static void main(String[] args) { Class<pension> c = pension.class; /** * 获取共有的所有属性 * * field.getModifiers()//获取修饰符返回int类型 * 0是默认的 * 1是共有的 * 2是私有的 * 4是保护的 * */ System.out.println("------------------------------"); System.out.println("获取类共有的属性"); Field f[] = c.getFields(); for (Field field : f) { switch (field.getModifiers()) { case 0:System.out.print(" ");break; case 1:System.out.print("public ");break; case 2:System.out.print("private ");break; case 4:System.out.print("protected ");break; } System.out.println(field.getName()); } System.out.println("------------------------------"); System.out.println("获取本类所有的属性"); /** * 获取本类所有的属性 */ f = c.getDeclaredFields(); for (Field field : f) { //上个方法使用case,这里使用Modifier.toString()取代switch case这个作用 System.out.print(Modifier.toString(field.getModifiers())+" "); System.out.print(field.getType().getSimpleName()+" ");//这个可以简化一下。getSimpleName() System.out.println(field.getName()); } System.out.println("-------------------"); System.out.println("public或者proteced的属性"); //对类进行操作要用到Construct try { Constructor cs=c.getConstructor(); pension p=(pension) cs.newInstance();//调用它的无参函数 Field f1=c.getDeclaredField("name");//定义要调用的属性关联Filed System.out.println(f1.get(p)); f1.set(p, "小明");//修改 System.out.println(f1.get(p)); System.out.println("-------------------"); System.out.println("private的属性"); Field f2=c.getDeclaredField("age");//定义要调用的属性关联Filed f2.setAccessible(true);//获取权限 System.out.println(f2.get(p)); f2.set(p, 11);//修改 System.out.println(f2.get(p)); } catch (NoSuchMethodException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } catch (SecurityException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } // 调用无参的构造方法 catch (InstantiationException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } catch (IllegalAccessException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } catch (IllegalArgumentException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } catch (InvocationTargetException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } catch (NoSuchFieldException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } } } package reflect_2020_09_29; public class pension { public int id; private int age; protected String name; public pension() { // TODO 自动生成的构造函数存根 } public pension(int id) { super(); this.id = id; } public pension(int age, String name) { super(); this.age = age; this.name = name; } private pension(int id, int age, String name) { super(); this.id = id; this.age = age; this.name = name; } @Override public String toString() { return "pension [id=" + id + ", age=" + age + ", name=" + name + "]"; } }
    Processed: 0.032, SQL: 8