反射基础

一.获取Class类的实例的方式

方式一:调用运行时类的属性 .class

 Class<Person> p1 = Person.class;

方式二:

    Person p=new Person();
           Class<? extends Person> p2 = p.getClass();

 

方式三:

  Class<?> p3 = Class.forName("Reflect.Person");

方式四:使用类的加载器

 ClassLoader classLoader= ReflectTest.class.getClassLoader();
Class<?> p4 = classLoader.loadClass("preson");

二.通过反射创建运行时类的对象

newInstance(); 使用空参构造器

   Person person = p1.newInstance();

三.反射实例的方法

1.获取运行时类的属性

class.getFields() 获取当前运行时类及其父类中声明为public访问权限的属性结构

class.getDeclaredFields() 获取当前运行时类当中获取的所有属性(与权限无关)

getModifiers()获取权限修饰符 返回INT

getType()获取数值类型

getName() 获取变量名

2.获取运行时类的方法结构

class.getMethods()获取当前运行时类及其父类中声明为public访问权限的方法结构

class.getDeclaredMethods()获取当前运行时类当中获取的所有方法(与权限无关)

四.获取指定属性

1.方式一; 权限为public

   //获取指定的属性
           Field xname = clazz.getField("xname");
           //set(object,value)设置属性的值     参数一:运行时类的对象 参数二:赋值
           xname.set(o,"fdsaf");
           //get(object) 获取当前属性的值
           System.out.println(xname.get(o));

2.方法二:

            Field id = clazz.getDeclaredField("id");
           id.setAccessible(true);//必须设置 保证当前数据是可以访问的
           id.set(o,10);
           System.out.println(id.get(o));

调用指定的构造器

            Constructor<?> constructor = clazz.getDeclaredConstructor(int.class,                    String.class, int.class);//参数列表为数据类型
           constructor.setAccessible(true);
           Object tom = constructor.newInstance(20, "tom", 32);
           System.out.println(tom);

 



posted @ 2022-05-14 19:44  与否业务NOW  阅读(22)  评论(0)    收藏  举报