当前位置: 首页 > news >正文

JAVA高级技术入门(单元测试,反射,注解,动态代理)

JAVA高级技术入门(单元测试,反射,注解,动态代理)

  • 一、Junit单元测试
  • 二、反射
    • 1.认识反射,获取类
      • 概念:
      • 快速入门:
      • 获取Class对象的三种方式
    • 2.1获取类的构造器
    • 2.2获取类的构造器的作用:依然是初始化对象返回
    • 3.1获取类的成员变量
    • 3.2获取类的成员变量的作用:依然是赋值,取值
    • 4.1获取类的成员方法
    • 4.2获取类的成员方法的作用
    • 5.作用,应用场景
      • 反射的作用
  • 三、注解
    • 1.认识注解
    • 2.自定义注解
    • 3.注解的原理
    • 4.元注解
    • 5.注解的解析
      • 什么是注解的解析?
      • 如何解析注解?
    • 6.注解的应用场景
  • 四、动态代理
      • 什么是动态代理
  • 总结



一、Junit单元测试

Junit单元测试笔者在前文已详细讲解,如果感兴趣的话可以关注笔者的上一篇文章


二、反射

1.认识反射,获取类


概念:

加载类。并允许以编程的方式解剖类中的各种成分(成员变量,方法,构造器等)

快速入门:

  1. 加载类,获取类的字节码:Class对象
  2. 获取类的构造器:Constructor对象
  3. 获取类的成员变量:Field对象
  4. 获取类的成员方法:Method对象

获取Class对象的三种方式

  • Class c1=类名.class
  • 调用Class提供的方法:public static Class forName(String package);
  • Object提供的方法:public Class getClass(); Class c3=对象.getClass();



2.1获取类的构造器

在这里插入图片描述
在这里插入图片描述
注意:获得有参数的构造器时,参数为对于类型的Class类,如String.class,int.class




2.2获取类的构造器的作用:依然是初始化对象返回

在这里插入图片描述
在这里插入图片描述

注意:反射会破坏封装性!!!



3.1获取类的成员变量

在这里插入图片描述



3.2获取类的成员变量的作用:依然是赋值,取值

在这里插入图片描述
在这里插入图片描述



4.1获取类的成员方法

在这里插入图片描述
在这里插入图片描述

4.2获取类的成员方法的作用

在这里插入图片描述
在这里插入图片描述



5.作用,应用场景

反射的作用

  • 基本作用:可以得到一个类的全部成分然后操作
  • 可以破坏封装性
  • 最重要的用途:适合做Java的框架,基本上,主流的框架都会基于反射设计出一些通用的功能


三、注解

1.认识注解

  • 就是Java代码中的特殊标记,比如:@Override,@Test,作用是:让其它程序根据注解信息来决定怎么执行该程序
  • 注意:注解可以在类上,构造器上,方法上,成员变量上,参数上,等位置处



2.自定义注解

public @interface 注解名称 {public 属性类型 属性名() default 默认值 ;
}

特殊属性名:value

  • 如果注解中只有一个value属性,使用注解时,value名称可以不写!!
    在这里插入图片描述

注意序号1和序号2作用相同



3.注解的原理

  • 注解本身是一个接口,Java中所有的注解都是继承了Annotation接口的
  • @注解(…):其实就是一个实现类对象,实现了该注解以及Annotation接口


4.元注解

  • 指的是:修饰注解的注解
  • 常见的两个元注解

(1) @Target
在这里插入图片描述

(2).@Retention
在这里插入图片描述



5.注解的解析

什么是注解的解析?

  • 就是判断类上,方法上,成员变量上是否存在注解,并把注解里的内容解析出来

如何解析注解?

在这里插入图片描述

6.注解的应用场景

  • 一般是用来配合反射等技术做框架
  • 案例

模拟Junit框架

需求:

  • 定义若干个方法,只要加了MyTest注解,就会自动触发该方法执行

分析:

  • 定义一个自定义注解MyTest,只能注解方法,存活范围为一直都在
  • 定义若干个方法,部分方法加上@MyTest注解修饰,部分方法不加
  • 模拟一个Junit程序,可以触发加了@MyTest注解的方法执行

具体操作:

1.创建一个@MyTest注解
在这里插入图片描述

2.创建Annotation测试类

其中创建了4个测试方法,其中test2和test4加上了注解,其他未加

在这里插入图片描述


3.创建main方法,实现模拟@Test注解

主要原理是利用反射遍历Annotation中的所有方法 
解析每个方法上是否有@MyTest注解,
若有,则执行当前方法允许,
若无,则不执行
这样就成功模拟了@Test测试注解

在这里插入图片描述


4.结果

可以看到成功实现了模拟@Test注解

在这里插入图片描述




四、动态代理

什么是动态代理

代理类通常会持有一个委托类对象,代理类不会自己实现真正服务,而是通过调用委托类对象的相关方法,来提供服务,所以其实我们调用的还是委托类的服务,但是中间隔了一个代理类


总结

关于Java的这些高级技术可能在平常编写简单程序的时候不会用到,但事实上,在Java工程化项目中,这些都是最基础的知识点,大家一定要学好这部分知识,才能在Java工程化项目的底层原理面前游刃有余。

http://www.lryc.cn/news/167406.html

相关文章:

  • uni-app 实现自定义按 A~Z 排序的通讯录(字母索引导航)
  • C++ PrimerPlus 复习 第一章 命令编译链接文件 make文件
  • 微信小程序——常用组件的属性介绍
  • 【深度学习】 Python 和 NumPy 系列教程(廿七):Matplotlib详解:3、多子图和布局:散点矩阵图(Scatter Matrix Plot)
  • 解决jupyter打开的默认路径问题
  • Git 学习笔记
  • 【Qt】QGroundControl入门3:源码初探
  • 腾讯mini项目-【指标监控服务重构】2023-07-31
  • Rust通用编程概念(3)
  • 学Python的漫画漫步进阶 -- 第四步
  • 【LeetCode-中等题】18. 四数之和
  • 每日一题 102二叉树的层序遍历
  • 牛客: BM4 合并两个排序的链表
  • C语言基础知识点(六)二维数组指针和地址
  • nodejs格式化输入
  • 国家网络安全周 | 金融日,一起 get金融行业数据安全
  • 分布式事务解决方案之TCC
  • Git 的基础命令 码云 gitee
  • 探索工业4.0:数字孪生如何重塑工业生产流程?
  • window server事件ID说明
  • router-link 和 router-view的区别
  • 【Leetcode】139.单词拆分
  • PMP考试一定要报培训班吗?
  • dart 学习 之 Getters and setters
  • 使用融云 CallPlus SDK,一小时实现一款 1V1 视频应用
  • Redis Part1
  • 代理HTTP使用不当会出现哪些问题?如何正确使用代理服务?
  • 利用芯片74hc165为单片机增加输入扩展端口proteus仿真arduino
  • docker真实IP解决
  • Linux 内存泄漏检测的基本原理