利用反射获取字段并获取值或者设置值

package Reflect;

import java.lang.reflect.Field;
class User
{
public String account;
public String password;
}
class Student extends User
{
public int age;
public String name;
private String sex;

public Student()
{
System.out.println("调用无参构造器创建对象");
}
private Student(int age,String name)
{
this.age=age;
this.name=name;
System.out.println("调用有参构造器创建对象");
}
public void readBook()
{
System.out.println("我爱读书");
}
public static void crazy()
{
System.out.println("这是一个静态方法");
}
//可变参数方法
public static void printNumber(int ...args)
{
System.out.println("这是一个打印数字的可变参数方法");
for(int i:args)
{
System.out.println(i);
}
}

public static void printNumber(int args)
{
System.out.println("这是一个打印一个数字的方法");
System.out.println(args);

}

public static void printString(String ...args)
{
System.out.println("这是一个打印字符串的可变参数方法");
for(String i:args)
{
System.out.println(i);
}
}

private void Sleep()
{
System.out.println("我要睡觉");
}

@Override
public String toString() {
return "Student [age=" + age + ", name=" + name + ", sex=" + sex + "]";
}

}

public class GetFieldDemo {
/**
* 学习了利用反射获取构造器和方法之后 对获取字段就会有自己的思路了
* @param args
* @throws SecurityException
* @throws NoSuchFieldException
* @throws InstantiationException
* @throws IllegalAccessException
* @throws IllegalArgumentException
*/
public static void main(String[] args) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, InstantiationException {
//1 获取字节码文件对象
Class<Student> clazz=Student.class;

//1获取所有公共字段(包括继承)
Field[] f1=clazz.getFields();
for(Field f:f1)
{
System.out.println(f);
}
System.out.println("分割线===========================");
//2 获取所有字段(不包括继承)
Field[]f2=clazz.getDeclaredFields();
for(Field f:f2)
{
System.out.println(f);
}
System.out.println("分割线===========================");
//3 获取单个共有字段
Field f3=clazz.getField("password");
System.out.println(f3);
System.out.println("分割线===========================");
//4 获取单个私有字段
Field f4=clazz.getDeclaredField("sex");
System.out.println(f4);

//5
//1)为字段设置值
//public void set(Object obj,Object value)
//参数:
// obj - 应该修改其字段的对象
// value - 正被修改的 obj 的字段的新值

//2)获取字段的值
//public Object get(Object obj)
//obj - 从中提取所表示字段的值的对象
//返回:
//对象 obj 中的所表示字段的值;在返回之前,基值包装在一个适当的对象中

//如果是私有 需要设置访问权限
f4.setAccessible(true);
Student student=clazz.newInstance();
f4.set(student, "男");
String sex=(String) f4.get(student);
System.out.println(sex);

}
}

时间: 2024-10-10 17:49:31

利用反射获取字段并获取值或者设置值的相关文章

[js]作用域链查找规则获取值和设置值

作用域链查找规则获取值和设置值 <script> /** 1.作用域链查找规则 私有作用域出现的一个变量不是私有的,则往上一级作用域查找,上级作用域没有则继续向上级查找,一直找到window为止,如果window也没有了? 1)如果是获取值,则报错 2)如果是设置值,则相当于给window设置了一个属性 2.js代码一旦报错,则不往下执行了. */ function fn() { console.log(total); //获取值 total = 100; //设置值 } fn(); cons

使用sessionStorage获取值和设置值

<body><button id="btn1">设置值</button><button id="btn2">获取值</button> <!-- 总结:设置值 值是字符串 sessionStorage.setItem('key','value'); 使用sessionStorage.getItem('key');获取值 --><script> // 使用sessionStorage设置

jQuery 之 模态编辑框实例(文本获取值与设置值)

代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="jquery3.js"></script> <style> .modal{ position: fixed; top: 50%; left:

Siebel 找字段、下拉菜单设置值、弹出新页面、弹出选择框、设置默认值 、按钮代码

产品缺陷太多,跟用户交互不人性化.例如搜索新建客户功能,用户输入后会自动保存数据,一旦保存后一. 找字段1.简单 CTRL+Q CTRL+Q 服务请求编号----对应的表.字段.长度: 客户编码-----对应的表.字段.长度(弹出新页面):- 点击上面的pick Applet会弹出“选取客户”对话框 有JOIN就不用TABLE:require代表必填 字段有两个值----项目编号 下图确定只有projectNum有用 3.表单中的字段(不在list column中,而是在control) 二.下

关于select标签取值和设置值

获取当前select的选中值可以这样做: var osName = $("#selOsName").find("option:selected").val();或者直接var osName = $("#selOsName").val();实际测试好用建议第一个比较好. 设置select选中某一值可以这样做: $("#selOsName option[value='"+osName+"']").attr(&q

easyUI validatebox设置值和获取值,以及属性和方法

一:表单元素使用easyui时,textbox和validatebox设置值和获取值的方式不一样[转] 1.为text-box设置值只能使用id选择器选择表单元素,只能使用textbox("setValue", value) 方式设置值,使用textbox("getValue")  获取值: 例如:var snumber = $("#addSnumber").textbox('getValue'); $("#addSnumber&quo

easyui-textbox 和 easyui-validatebox 设置值和获取值

表单作如下定义:该input使用easyui的"easyui-textbox" 1 <input id="addSnumber" style="width: 200px; height: 30px;" class="easyui-textbox" type="text" name="snumber" data-options="required:true, missing

利用反射机制,获取类的字段、方法、并实现简单调用

这篇文章是为之后要介绍Android的ICO框架做预备的,所以,如果想最近学习Android的ICO框架的同学,可以稍微看一下. 首先,简单介绍一下Java里面的反射. JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. 不知道这样的一段解释,你能否看懂.如果更简单的说,反射就是能够根据你给出类名实例化出一个实实在在的对象.所以,对象的实例

C#利用反射获取对象属性值

public static string GetObjectPropertyValue<T>(T t, string propertyname){     Type type = typeof(T); PropertyInfo property = type.GetProperty(propertyname); if (property == null) return string.Empty; object o = property.GetValue(t, null); if (o == n