反射_案例与反射_获取字节码Class对象的三种方式

反射_案例

  Class对象功能:

      获取功能:

1.获取成员变们
Field[] getFields() :获取所有public修饰的成员变量
Field getField(string name) 获取指定名称的public修饰的成员变量

Field[] getDeclaredFields()获取所有的成员变量,不考虑修饰符
Field getDeclaredField(string name)

2.获取构造方法们
   constructor<?>[]getconstructors()
   constructor<T> getconstructor(类<?>... parameterTypes)
   constructor<T> getDeclaredconstructor(类<?>... parameterTypes)
   constructor<?>[getDeclaredconstructors()

3。获取成员方法们︰
  Method[] getMethods()
  Method getMethod(string name,类<?>... parameterTypes)
  Method[] getDeclaredMethods()
  Method getDeclaredMethod(string name,类<?>... parameterTypes)

4.获取类名
  String getName()

 

 

 

 

 

反射_获取字节码Class对象的三种方式

1.获取成员变们
Field[] getFields() :获取所有public修饰的成员变量
Field getField(string name) 获取指定名称的public修饰的成员变量

Field[] getDeclaredFields()获取所有的成员变量,不考虑修饰符
Field getDeclaredField(string name)

2.获取构造方法们
   constructor<?>[]getconstructors() 
   constructor<T> getconstructor(类<?>... parameterTypes) 
   constructor<T> getDeclaredconstructor(类<?>... parameterTypes) 
   constructor<?>[getDeclaredconstructors()

3。获取成员方法们︰ 
  Method[] getMethods()
  Method getMethod(string name,类<?>... parameterTypes) 
  Method[] getDeclaredMethods() 
  Method getDeclaredMethod(string name,类<?>... parameterTypes)

4.获取类名 
  String getName()
Field:成员变量

  操作:

     1.设置值

        

void set(Object obj,Object value)
     2.获取值

get (Object obj)
      3.忽略访问权限修饰符的安全检查

field.setAccessible(true);//暴力反射  

class对象功能∶获取功能∶

package day01.Demo01_Day017.da;

import java.lang.reflect.Field;


/*
class对象功能∶
获取功能∶
1.获取成员变们
Field[] getFields()
Field getField(string name)
Field[] getDeclaredFields()
Field getDeclaredField(string name)
2.获取构造方法们
constructor<?>[]getconstructors()
constructor<T> getconstructor(类<?>... parameterTypes)
constructor<T> getDeclaredconstructor(类<?>... parameterTypes)
constructor<?>[getDeclaredconstructors()
3。获取成员方法们︰
Method[] getMethods()
Method getMethod(string name,类<?>... parameterTypes)
Method[] getDeclaredMethods()
Method getDeclaredMethod(string name,类<?>... parameterTypes)
4.获取类名
String getName()
*/
public class ReflectDemo2 {
public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
//1.获取Person的class对象
Class<Person> personClass = Person.class;
/*
1.获取成员变们
Field[] getFields()
Field getField(string name)
Field[] getDeclaredFields()
Field getDeclaredField(string name)
*/
//1. Field[] getFields()
Field[] fields = personClass.getFields();
for (Field field : fields) {
System.out.println(field);
}
System.out.println("--------------");
Field a = personClass.getField("a");
//获取成员变量a的值
Person p = new Person();
Object value = a.get(p);
System.out.println(value);
//设a的值
a.set(p,"张三");
System.out.println(p);

System.out.println("=====================");
//Field[] getDeclaredFields()//获取所有的成员变量,不考虑修饰符
Field[] declaredFields = personClass.getDeclaredFields();
for (Field declaredField : declaredFields) {
System.out.println(declaredField);
}
//Field getDeclaredField(string name)
Field field = personClass.getDeclaredField("d");
//忽略访问权限修饰符的安全检查
field.setAccessible(true);//暴力反射
Object o = field.get(p);
System.out.println(o);


}
}

 

 


 

 


 

 
 

 

posted @ 2022-10-13 11:18  zj勇敢飞,xx永相随  阅读(17)  评论(0编辑  收藏  举报