java8之反射技术

阅读: 评论:0

java8之反射技术

java8之反射技术

反射的基本概念

使用反射机制可以动态获取当前class的信息,比如方法的信息,注解信息,方法的参数,属性等。

反射技术应用的场景

(1)JDBC加载驱动连接Class.forName("");

   (2)Spring容器框架IOC实例化对象。

 (3)自定义注解生效(反射 +Aop)   

   (4)第三方核心的框架

反射技术的使用

Class类代表类的实体,在运行的java应用程序中表示类和接口。

Field类代表类的成员变量(成员变量也称为类的属性)

Method类 代表类的方法

Constructor类 代表类的构造方法

Class<?> class = Class.forName("类路径“)

我们来玩玩这个方法:

@Data
public class User {private  Integer age;private String name;public User(){System.out.println("######=======我是无参构造函数===============#######");}public User(Integer age,String name){System.out.println("######=======我是有参构造函数===============#######");this.age = age;this.name = name;}public String name(String name) {System.out.println("name========######:"+name);return "柳如是";}}

说这个之前我们来讲讲,初始化对象的方式:

第一种通过new的方式去初始化:

    User user = new User();  

第二种通过反射技术:

 Class.forName("类的完整路径地址");

走无参构造函数初始化对象:

 Class<?> aClass = Class.forName("ity.User");//newInstance()初始化对象,实际上走的是无参构造函数初始化对象User user = (wInstance();System.out.println("user初始化对象########:"+user);

打印:

走有参构造函数初始化:

  Class<?> aClass = Class.forName("ity.User");Constructor<?> constructor = Constructor(Integer.class, String.class);User user = (User) wInstance(22, "懂小宛");System.out.println("走有参构造函数初始化##############:"+user);

 对私有对象属性赋值操作:

   Class<?> aClass = Class.forName("ity.User");User user = (wInstance();//获取到私有对象属性Field age = DeclaredField("age");age.set(user,22);Field name = DeclaredField("name");name.set(user,"苏小小");System.out.println(user);

执行上面这段代码,会报错:

因为我们是给私有的属性赋值,所以要开放权限,总结下:如果使用反射给私有属性或者调用私有的方做操作,都需要设置权限。

 Class<?> aClass = Class.forName("ity.User");User user = (wInstance();//获取到私有对象属性Field age = DeclaredField("age");age.setAccessible(true);age.set(user,22);Field name = DeclaredField("name");name.setAccessible(true);name.set(user,"苏小小");System.out.println(user);

打印:

 使用反射机制调用方法:

  Class<?> aClass = Class.forName("ity.User");//参数一获是要调用的方法,参数二是方法参数类型Method nameFuncaty = DeclaredMethod("getName", String.class);User user = (User) wInstance();nameFuncaty.invoke(user,"柳如是");

本文发布于:2024-01-29 14:09:49,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170650859115831.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:反射   技术
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23