一、主要方法
* 获取本类所有权限属性(Class): public Field[] getDeclaredFields() throws SecurityException {}
* <p>
* 获取该类所有公有权限属性(Class): public Field[] getFields() throws SecurityException {}
* <p>
* 设置属性值(Field): public void set(Object obj, Object value)
* throws IllegalArgumentException, IllegalAccessException{}
* <p>
* 获取属性值(Field): public Object get(Object obj)
* throws IllegalArgumentException, IllegalAccessException{}
* <p>
* 解除封装(Field): public void setAccessible(boolean flag) {}
* <p>
* 获取属性类型(Field): public Class<?> getType() {}
* <p>
* 获得简单名称(Class): public String getSimpleName() {}
二、完整代码
package reflect.classhandle;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
/**
* 获取类成员属性
* <p>
* 获取本类所有权限属性(Class): public Field[] getDeclaredFields() throws SecurityException {}
* <p>
* 获取该类所有公有权限属性(Class): public Field[] getFields() throws SecurityException {}
* <p>
* 设置属性值(Field): public void set(Object obj, Object value)
* throws IllegalArgumentException, IllegalAccessException{}
* <p>
* 获取属性值(Field): public Object get(Object obj)
* throws IllegalArgumentException, IllegalAccessException{}
* <p>
* 解除封装(Field): public void setAccessible(boolean flag) {}
* <p>
* 获取属性类型(Field): public Class<?> getType() {}
* <p>
* 获得简单名称(Class): public String getSimpleName() {}
*
* @ClassName: GetClassField
* @Author: Xlu
* @Date: 2020-06-14 13:40
* @Version 11
**/
public class GetClassField {
public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
Class<?> cls = Class.forName("reflect.classhandle.GetClassFieldDome");
Object obj = cls.getDeclaredConstructor().newInstance();
/**
* 获取本类所有权限属性
* private java.lang.String reflect.classhandle.GetClassFieldDome.name
* private int reflect.classhandle.GetClassFieldDome.age
*/
Field[] declaredFields = cls.getDeclaredFields();
for (Field f : declaredFields) {
System.out.println(f);
}
System.out.println("-----------------");
/**
* 获取所有公有权限属性
* public java.lang.String reflect.classhandle.AbstractField.sex
*/
Field[] fields = cls.getFields();
for (Field f : fields) {
System.out.println(f);
}
//得到本类中的属性
Field field = cls.getDeclaredField("name");
/**
* 解除封装
* 没有接触封装的话会报错
* java.lang.IllegalAccessException: class reflect.classhandle.GetClassField cannot access a member of class reflect.classhandle.GetClassFieldDome with modifiers "private"
*/
field.setAccessible(true);
//设置属性值
field.set(obj , "张三");
/**
* 得到属性值
* 张三
*/
System.out.println(field.get(obj));
/**
* 得到属性类型
* class java.lang.String
* String
*/
System.out.println(field.getType());
System.out.println(field.getType().getSimpleName());
}
}
class GetClassFieldDome extends AbstractField {
private String name;
private int age;
public GetClassFieldDome() {
}
public GetClassFieldDome(String name , int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "GetClassFieldDome{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
abstract class AbstractField {
public String sex;
}