java反射相关

一、java反射原理:

1、把java文件保存到本地硬盘:.java。

2、编辑java文件,生成.class文件。

3、使用jvm,把class文件通过 类加载器 加载到内存中。

4、万事万物皆对象,class文件在内存中使用Class类来表示。

5、使用反射时,获取到Class类,就获取了里面的所有内容,包括:

      1)属性:Filed类。

      2)构造器:Constructor类。

      3)普通方法:Method类。


二、通过反射获取Class类的方法:

1、通过类名.class获取:Class cla = SysUser.class;

2、通过对象.getClass()方法获取:Class cla = new SysUser().getClass();

3、通过Class.forName("类的全路径")获取: Class cla = Class.forName("com.cosy.module.sys.module.SysUser");


三、通过反射操作类的构造方法:

1、操作无参构造:SysUser sysUser = cla.newInstance();

2、操作有参构造:SysUser sysUser = cla.newInstance("姓名", "年龄"); 【有参构造方法内参数是什么,这里就写什么】。


四、通过反射操作类的属性:

1、获取Class对象:Class cla = SysUser.class;

2、获取name属性:Filed filed = clas.getDeclaredField("name");

3、获取SysUser实例对象:SysUser sysUser = cla.newInstance();

4、给name属性赋值:

       【如果name属性是私有属性,需要设置权限:field.setAccessible(true);】

         field.set(sysUser, "名字");   【该步相当于:sysUser.setName("名字")】


五、通过反射操作类的普通方法【Spring AOP 底层原理中设计到用此来 调用目标对象方法】:

1、方法的权限是public :

    1).获取“introduceYourself”方法,参数是String类型

        Method method = claz.getDeclaredMethod("introduceYourself", String.class);

    2).调用方法:

        method.invoke(claz.newInstance(), "赵大")

2、方法的权限是private :

    1).获取“introduceYourself”方法,参数是String类型

        Method method = claz.getDeclaredMethod("introduceYourself", String.class);

    2).调用方法:

        method.setAccessible(true);

        method.invoke(claz.newInstance(), "赵大")

 3、方法是静态方法,即用static修饰:

    1).获取“introduceYourself”方法,参数是String类型

        Method method = claz.getDeclaredMethod("introduceYourself", String.class);

    2).调用方法:【静态方法不需要实例对象】

        method.invoke(null, "赵大")


猜你喜欢

转载自blog.csdn.net/qq_41306795/article/details/80966918