java中的反射机制使用,java反射的实现
00-1010学习背景1。Java反射机制是什么?1.1反射原理1.2反射例2。Java反射机制中获取类的三种方式及区别?2.1几种获取类的方式2.2几种代码演示方式的区别3。Java反射机制有哪些应用场景?3.1应用场景3.2工厂方法模式优化3.2.1什么是工厂方法模式?3.2.2工厂方法模式的用途是什么?3.2.3如何实现简单工程模式?3.2.4工厂方法模式优化3.2.5工厂方法模式再优化3.3代理模式下的动态代理实现3.3.1什么是代理模式?3.3.2什么是静态代理?3.3.2什么是动态代理?3.4 Java JDBC数据库操作的实现3.4.1使用反射加载JDBC驱动3 . 4 . 2 Java JDBC连接实例的访谈总结
00-1010学Java的小伙伴可能听说过Java反射机制,熟悉但有点陌生。本文主要针对面试中经常被问到的几个关于Java反射机制的问题,然后通过理论知识结合代码实例和应用场景进行讲解,从而加深自己对Java反射机制的认识和理解,希望对有需要的小伙伴有所帮助~
目录
00-1010 (1) Java反射是一种在Java语言中访问、检测和修改自身的动态(运行时)能力。它的主要作用是动态(运行时)获取一个类的完整结构信息并调用对象的方法~更简单的说,Java程序在运行时(动态)创建一个类的反射对象,然后对该类进行相关操作,比如:
获取对象的成员变量赋值,调用对象的方法(包括构造方法,有无参数)判断对象所属的类。
PS:不过说实话,直接理解官方的定义还是有点困难。再通俗点说吧~
(2)一般来说,我们在使用一个类的时候,都会知道这个类,知道用它做什么。我们可以通过new实例化直接创建一个对象,然后用这个对象来操作类。这属于正形~
(3)反射是指一开始不知道初始化什么类,不能用new实例化和创建对象。主要通过JDK提供的反射API来实现。运行时知道要操作什么类,就可以得到类的完整结构,调用相应的方法。这是反思~
00-1010代码如下:
包com . Justin . Java . lang;导入Java . lang . reflect . constructor;导入Java . lang . reflect . method;/* * * @ program : JDK 1.8 test * @ description 3360正射和反射的简单调用示例* @ author 3360 Justin Qin * @ create : 2021/8/22 1:23 * @ version 3360v 1 . 0 . 0 * */Public Class Student { Private Public void setId(int id){ this . id=id;} public int getId(){ return id;} public static void main(string[]args)抛出异常{//I .正字法调用过程Student Student=new Student();student . setid(1);System.out.println(正交调用过程Student id : Student . getid());//二。反射调用进程class clz=class . forname( com . Justin . Java . lang . student );constructor student constructor=clz . get constructor();object studentObj=student constructor . new instance();方法setId method=clz . get method( setId ,int . class);setIdMethod.invoke(studentObj,2);method getId method=clz . get method( getId );System.out.println(正交调用过程StudentID : getidmethod . invoke(Studentobj));
}}输出结果:
正射调用过程Student id:1反射调用过程Student id:2
上述例子反射的调用过程,可以看到获取一个类的反射对象,主要过程为:
获取类的Class实例对象根据Class实例对象获取Constructor对象再根据Constructor对象的newInstance方法获取到类的反射对象获取到类的反射对象后,就可以对类进行操作了~ 例如,上述示例中对类的方法进行调用过程为:
根据Class实例对象获取到类的Method对象再根据Method对象的invoke方法调用到具体类的方法前面一点也提到了获取到类的Class实例对象,上面示例反向调用过程中我们是通过Class.forName("类的全局定名")这种方式来获取到类的Class实例对象,除了这种,常用的还有其他两种,往下讲解~
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。