反射

来源:互联网 发布:ct重建算法 编辑:程序博客网 时间:2024/06/08 16:03

day15:
第一章 反射
关于.class文件被加载到内存的时机
1.当第一次使用一个类的时候,这个类的.class文件会被加载到内存
2.第二次以后使用这个类的时候,不再需要加载

类的加载
1.加载:
就是将.class文件读入内存
接着jvm会为这个.class文件创建一个Class对象,来保存.class文件中的信息
对象类型为Class类型
public class Class{
}
Class对象:字节码文件对象
2.连接:

3.初始化:

反射的关键:
获取字节码文件对象

Class类的初始化时机:
1.创建一个类的对象new Person();
2.使用类的静态成员,或者为静态变量赋Person.num=100;

3.类的静态方法 Person work()

4.使用反射方式来强制创建某个类或接口对应的Java.lang.Class对象
5初始化某个类的子类

6直接使用java.exe命令来运行某个主类

反射(Reflect):是运行时的机制
在程序运行的时候我们获取一个字节码文件对象,从而从中获取构造方法,成员方法,成员变量等,然后动态调用的过程

javaBean;

就是一个普通的java类.用来存储数据的java类,专门用来存储数据的.

万物皆对象
一个class文件也是一个对象 Class类型

构造方法:构造方法对象

6个单词:
class 类
每一个对象代表一个字节码文件对象
Constructor构造
每一个对象代表一个构造方法
Method 方法
每一个对象代表一个成员方法
Field字段
每一个对现在,代表一个成员变量/代表一个字段
instance实例 newInstance创建对象
invoke()执行/调用

反射中的语法和我们不用发射语法
对象名.方法名

方法名.invoke(对象)

获取Class对象的三种方式:
1.通过一个类的静态成员就可以获取字节码文件对象
格式:类名.class

2.通过一个类的对象的getCalss方法也能获取该类的字节码对象
3.通过一个字符串类型的名字,强制加载该类就可以获取该类的字节码文件对象

Class.forName();

获取字节码文件对象中的构造方法:

getConStructors();//获取多个构造
//只能获取public修饰的

getConStructor(参数类型.class)

newInstandce()

私有构造方法的反射(暴力反射):
getDeclaredConStructors()getDeclaredConStructor(参数类型)
设置暴力访问权限:
setAccessible(true)
通过反射最快速的创建对象(无参的)
底层:newInstance方法中,先获取无参构造,调用无参构造返回对象
1.无参构造必须是public修饰
2.无参构造必须存在

反射获取方法并调用
getMethod

===============================
总结反射中的方法:
反射:
1获取字节码对象:
三种方式:
a类.class
b对象.getClass();
cClass.forName()
2.获取构造:
“public”修饰的
Consturtoc[]get Consturtors();//
获取所有的public 的构造

Consturtoc[]get Consturtor(参数类型1.class,参数类型2.class);//
获取指定参数的public 的构造

“public”修饰的
Consturtoc[]get Declared Consturtors();//
获取所有的修饰符的构造

Consturtoc[]getDeclared Consturtor(参数类型1.class,参数类型2.class);//
获取指定参数的构造
3 获取普通成员方法::
Method[]getMethod();
4.获取字段
Field[] getField{}
5.如果构造 成员方法或者字段是非public修饰的,需要设置暴力访问权限

设计模式(23种):解决问题的套路

代理模式:静态代理,动态代理

代理设计模式的原理:
1.基于接口
代理设计模式的作用:
增强被代理对象的功能

原创粉丝点击