一、Java反射机制具体是什么

文章目录二、通过反射获取运行时标识Class类 三、获取到Class类能做些什么四、反射优缺点 总结
前言
今天在复习Java的反射机制,其实笔者第一遍学习Java的时候,那时候不是很理解反射机制有什么用,恰巧互联网关于Java反射机制的论调(包括《Java核心技术》),大体便是如果你仅仅是做程序开发,而不是工具类的开发,你大概只要略读一下,了解个大概就行了 。
但是当笔者在学习框架、移动安全、Java底层相关知识的时候,笔者就深深感觉到了反射机制的强大,尽管很多时候反射机制的效率一直为人所诟病,但在帮助程序员向高阶迈进的时候,反射仍然不失为一项伟大的机制 。
一、Java反射机制具体是什么
这里引用了一些总结对Java反射机制具体是什么给出描述
能够分析类能力的程序称为反射() ——《Java核心技术》
Java 反射机制在程序运行时,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性 。这种 动态的获取信息 以及 动态调用对象的方法 的功能称为 java 的反射机制 。反射机制很重要的一点就是“运行时”,其使得我们可以在程序运行时加载、探索以及使用编译期间完全未知的 .class 文件 。换句话说,Java 程序可以加载一个运行时才得知名称的 .class 文件,然后获悉其完整构造,并生成其对象实体、或对其 (变量)设值、或调用其 (方法) 。
划重点:动态、运行时,对于任意一个类或对象,都能知道或调用这个类和属性和方法
为什么Java要有反射机制,为什么像C++之类的语言不需要有反射机制
关于这个问题有许多博主给出过其他解读,笔者这里根据自己的理解进行整理
反射机制宏观上能让我们做些什么
相关博客
根据反射获取注解内容
二、通过反射获取运行时标识Class类 1.Class类是什么
在程序运行期间,Java运行时,系统始终会为所有对象维护一个运行时类型标识,标识这个运行对象所属的类——虚拟机利用运行时类型信息选择要执行的正确方法,大家所熟悉的多态机制便是在运行时,虚拟机动态去选择正确的方法进行执行 。
而针对所有对象从属类,进行信息保存的类便是Class类 。
在笔者看来,Class类更像是一个登记类,军地里士兵(对象)众多,但很多士兵从属一个兵种如弓箭手、步兵(类),而每种士兵都要去一本小本本上登记自己是哪种士兵,以及这个士兵有什么可以干啥——弓箭手有50支箭,可以射箭;而针对每种士兵对应的每个小本本,便是Class类
2.如何获取Class类
通过反射获取类有以下三种方法:
代码演示如下:
package com.qjy.javabasicpractice.string.reflection;import com.qjy.javabasicpractice.string.bean.Employee;import com.qjy.javabasicpractice.string.bean.Manager;import java.lang.reflect.InvocationTargetException;public class ReflectionTest {public static void main(String[] args) {/*** 获取Class类的三种方式*/Employee employee = new Employee("Julian",20, true, 2000.00);//getClass()方法Class aClass = employee.getClass();//Class.forName()方法String name = aClass.getName();Class bClass = null;try {bClass = Class.forName(name);} catch (ClassNotFoundException e) {e.printStackTrace();}//T.class;Class cClass=Employee.class;}}
其中第二种方法Class.();输入的参数是想要获取到类的Class对应的包名+类名,如想要获取到位于com..res包下的util类的Class类,则第二种方法输入的参数为
字符串形式

一、Java反射机制具体是什么