龙空技术网

java 反射属性Field总结

小瓜瓜666 131

前言:

此刻我们对“java基本属性”大致比较关怀,各位老铁们都想要分析一些“java基本属性”的相关文章。那么小编也在网络上汇集了一些有关“java基本属性””的相关文章,希望各位老铁们能喜欢,兄弟们快快来了解一下吧!

注意:想通过反射创建对象、获取类的属性,类的方法等,都必须要先获取到这个类的字节码文件,字节码文件是反射的前提;类的所有信息都会封装在Class字节码文件中;

Field作用:在反射中,类的属性会被封装到Field对象当中,Field对象包含属性的访问修饰符、属性的类型、属性的名字、属性的值等等;

private String name;以上一行代码会被封装到一个Field对象中;以下是Field类的简化结构class Field extends AccessibleObject implements Member {    private String		name;//属性的名字    private Class		type;//属性的类型    private int			modifiers;//属性的修饰符    }

Field类的重要方法总结:

int getModifiers() 返回的 Field对象表示的场java语言修饰符为整数。 String getName() 返回的 Field对象表示的字段的名称。类<?> getType() 返回一个 类对象标识声明类型的 Field对象表示的场。void set(Object obj, Object value) 设置域为代表的这 Field对象指定对象上的参数指定的新价值。Object get(Object obj) 返回的 Field表示字段的值,指定对象上。

1、使用反射创建一个学生类,name=张三,age=22,address=南京

package com.zd.ref;import java.lang.reflect.Field;public class Ref02 {		public static void main(String[] args) throws Exception {				//先获取Student类的字节码文件		Class stuClass = Class.forName("com.zd.bean.Student");		//通过反射创建对象		Object obj = stuClass.newInstance();				//获取name属性		Field nameField = stuClass.getDeclaredField("name");		nameField.setAccessible(true);		//设置name属性的值		nameField.set(obj, "张三");				Field ageField = stuClass.getDeclaredField("age");		ageField.setAccessible(true);		ageField.set(obj, 22);				Field addressField = stuClass.getDeclaredField("address");		addressField.setAccessible(true);		addressField.set(obj, "南京");				System.out.println(obj);			}}

以上代码执行结果:

2、使用反射反编译String类,打印出String类的所有属性;

package com.zd.ref;import java.lang.reflect.Field;import java.lang.reflect.Modifier;public class Ref02 {		public static void main(String[] args) throws Exception {				//先获取Student类的字节码文件		Class strClass = Class.forName("java.lang.String");				StringBuffer s = new StringBuffer();		s.append( Modifier.toString(strClass.getModifiers()) + " class "+ strClass.getSimpleName() +" {\n");				Field[] fields = strClass.getDeclaredFields();		for (Field field : fields) {			s.append("\t");			s.append(Modifier.toString(field.getModifiers()));			s.append(" ");			s.append(field.getType().getSimpleName());			s.append(" ");			s.append(field.getName());			s.append(";\n");		}						s.append("}");				System.out.println(s);			}}

最终打印结果:

标签: #java基本属性 #java反射获取所有属性值