Java反射机制

1. java代码

在 java 语言中最核心的就是代码的运行, 按照面向对象的思想,在调用java代码时往往需要先创建对象,再调用方法, 而写在方法中的即所谓的java 代码

先分析Class对象的图解:

Java有哪三大核心技术 java的三种核心机制_java代码

一段java代码在程序运行期间会经历三个阶段: source-->class-->runtime

2. Class 对象

在java中用一个Class对象来表示一个java类的class阶段,Class对象封装了一个java类中定义的成员变量、成员方法、构造方法、类名、包名等。

获得class对象的三种方式和区别

// 1. 根据给定的类名来获得 用于类加载
// 来自配置文件
String classname = "cn.itcast.reflect.Person";
// 此对象代表Person.class
Class clazz = Class.forName(classname);
// 2. 如果拿到了对象,不知道是什么类型 用于获得对象的类型
Object obj = new Person();
// 获得对象具体的类型
Class clazz1 = obj.getClass();
//java对象的比较不能用==,而是用equals,但是,有一个对象除外Class
If(clazz1 == Person.class)
// 3. 如果是明确地获得某个类的Class对象 主要用于传参
Class clazz2 = Person.class;
// 在java中所有的类型都会对应一个Class对象 int Integer
Class intClazz = int.class;
Class intarrClazz = int[].class;
Class voidClazz = void.class;

Java有哪三大核心技术 java的三种核心机制_Java有哪三大核心技术_02

3. 反射的概念

反射就是获得一个java类的各个组成部分

// 反射类的成员方法
Class clazz = Person.class;
Method method = clazz.getMethod(methodName, new Class[]{paramClazz1,paramClazz2});
method.invoke();
// 反射类的构造函数
Constructor con = clazz.getConstructor(new Class[]{paramClazz1,paramClazz2,...})
con.newInstance(params...)
// 反射类的属性
Field field = clazz.getField(fieldName);
field.setAccessible(true);
field.setObject(value);

Java有哪三大核心技术 java的三种核心机制_java代码_03

4. 反射用在哪里?

到底框架是什么? 框架就是将开发中大量重复的代码集中起来写个通用的程序

框架就是用反射来实现的

框架需要现在的类调用将来写的类

框架是将来的程序员调用的,框架不能实现完整的功能,框架只是一些一些通用的代码

框架要运行一定会依赖将来写的类

现在写的类要调用将来写的类,我们先针对接口进行调用,将来的类需要实现接口,那么方法就固定了

但是将来写的类的类名我们无法获知,这时就需要调用者通过配置文件告诉框架具体的类名