【设计模式】代理模式

1.Java对象的创建

1.1 new的方式创建

在这里插入图片描述

1.2 反射的方式创建

Java世界是运行在JVM之上的,我们编写的类代码,在经过编译器编译之后,会为每个类生成对应的.class文件,这个就是JVM可以加载执行的字节码。运行时期间,当我们需要实例化任何一个类时,JVM会首先尝试看看在内存中是否有这个类,如果有,那么会直接创建类实例;如果没有,那么就会根据类名去加载这个类,当加载一个类,或者当加载器(ClassLoader)的defineClass()被JVM调用,便会为这个类产生一个Class对象(一个Class类的实例),用来表达这个类,该类的所有实例都共同拥有着这个Class对象,而且是唯一的。

1.2.1Class对象和类的区别

类:只是信息描述的,写明了有哪些内部属性及接口,可以理解为是定义了一套规则。
Class对象:被用来对类的情况进行表述的一个实例,也就是是类的实际表现,可以理解为是对规则的图表化,这样JVM才能直观的看懂,可以看做是一个模版,Class对象包含了一个类的所有信息,比如构造器、方法、字段等
类的实例化对象,就是通过模版,开辟出的一块内存进行实际的使用。

1.2.2再看对象创建过程

在这里插入图片描述
所谓的Class对象,是Class类的实例,而Class类是描述所有类的,比如Person类,Student类。
在这里插入图片描述
我们对一个事物下定义通常有两种方式
我们对一个东西下定义有两种方式

方式解释
属类定义用大的集合去描述小集合,如:学生是在上学的人,对象是类的实例等
关系定义当一个集合无法找到比他更大的范围时,用临近关系定义,如:物质和意识的关系
如:如果要跟概念下定义,则概念的概念是什么?我们可以找到更大的集合来描述它。
概念:思维的基本形式之一,反映客观事物的一般的、本质的特征。

元数据:我们通常把用来描述数据的数据成为元数据
如:类是对象的元数据,它描述了对象的结构。

1.2.2获取Class类实例的4种方法

①前提:若已知具体的类,通过类的class属性获取,该方法最为安全可靠,
程序性能最高

Class clazz = String.class;

②前提:已知某个类的实例,调用该实例的getClass()方法获取Class对象

Class clazz = “www.atguigu.com”.getClass();

③前提:已知一个类的全类名,且该类在类路径下,可通过Class类的静态方
法forName()获取,可能抛出ClassNotFoundException

Class clazz = Class.forName(java.lang.String);

④其他方式

ClassLoader cl = this.getClass().getClassLoader();
Class clazz4 = cl.loadClass(“类的全类名”);

1.2.3有了Class对象,能做什么?

①创建类的对象
调用Class对象的newInstance()方法
1)类必须有一个无参数的构造器。
2)类的构造器的访问权限需要足够。
②获取运行时类的完整结构
Field、Method、Constructor、Superclass、Interface、Annotation
 实现的全部接口
 所继承的父类
 全部的构造器
 全部的方法
 全部的Field

2.静态代理

3.动态代理

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值