码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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 默认值 ;
    }
    
    • 1
    • 2
    • 3

    特殊属性名: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加上了注解,其他未加
    
    • 1

    在这里插入图片描述


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

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

    在这里插入图片描述


    4.结果

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

    在这里插入图片描述




    四、动态代理

    什么是动态代理

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


    总结

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

  • 相关阅读:
    MetaGPT: Merging Large Language Models Using Model Exclusive Task Arithmetic
    红黑树同时封装实现 map 和 set——红黑树の华丽二重奏
    分析悬链线中心的横坐标位置
    中英文说明书丨CalBioreagents艾美捷肠病毒单克隆抗体
    2022.09.22学习笔记
    Oracle-expdp方式升级19c问题合集
    如何将Python打包后的exe还原成.py?
    Android 13 第一个开发者预览版本来了,网友直呼:Android 12 还没透
    Netty进阶——粘包与半包(滑动窗口)
    IDEA中使用Tomcat Maven 插件
  • 原文地址:https://blog.csdn.net/haobabiu/article/details/132778122
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号