一、实体类java
package com.ljb.app.model; import java.io.Serializable; /** * 序列化实体类 * @author LJB * @version 2015年2月10日 */ public class Student implements Serializable{ private String name; private int age; private String gender; private transient String password; public Student () {}; public Student(String name, int age, String gender , String password) { super(); this.name = name; this.age = age; this.gender = gender; this.password = password; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String toString() { return "Student [name=" + name + ", age=" + age + ", gender=" + gender + "]"; } }
二、获取属性值app
package com.ljb.app.my_first_maven; import java.lang.reflect.Field; import com.ljb.app.model.Student; /** * 使用反射访问属性并修改属性值 * @author LJB * @version 2015年3月2日 */ public class FieldCallTest { /** * @param args */ public static void main(String[] args) { // 建立实例对象 Student stu = new Student(); stu.setName("张三"); stu.setAge(19); // 利用反射访问属性 Class cla = Student.class; // 获取指定名称属性 try { Field nameField = cla.getDeclaredField("name"); Field ageField = cla.getDeclaredField("age"); // 取消权限检查 nameField.setAccessible(true); ageField.setAccessible(true); // 获取值 String name = (String) nameField.get(stu); int age = ageField.getInt(stu); System.out.println("姓名:" + name + ",年龄" + age); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchFieldException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
运行结果:姓名:张三,年龄19maven
三、修改属性值ide
package com.ljb.app.my_first_maven; import java.lang.reflect.Field; import com.ljb.app.model.Student; /** * 使用反射访问属性并修改属性值 * @author LJB * @version 2015年3月2日 */ public class FieldCallTest { /** * @param args */ public static void main(String[] args) { // 建立实例对象 Student stu = new Student(); stu.setName("张三"); stu.setAge(19); // 利用反射访问属性 Class cla = Student.class; // 获取指定名称属性 try { Field nameField = cla.getDeclaredField("name"); Field ageField = cla.getDeclaredField("age"); // 取消权限检查 nameField.setAccessible(true); ageField.setAccessible(true); // 修改值 nameField.set(stu, "李四"); String modName = (String) nameField.get(stu); ageField.set(stu, 28); int modAge = ageField.getInt(stu); System.out.println("姓名:" + modName + ",年龄" + modAge); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchFieldException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
运行结果:姓名:李四,年龄28this