专业编程基础技术教程

网站首页 > 基础教程 正文

java 反射属性Field总结

ccvgpt 2024-11-20 13:00:19 基础教程 5 ℃

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

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

java 反射属性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);
		
	}
}

最终打印结果:

Tags:

最近发表
标签列表