【2019.10.08】Java Junit 反射 注解 泛型 用法

Junit
反射
注解
泛型
  • Junit使用:白盒测试

    • 步骤:

      1. 定义一个测试类(测试用例)
        • 建议:
          • 测试类名:被测试的类名Test CalculatorTest
          • 包名: xxx.xxx.xxx.test cn.ybs.test
      2. 定义测试方法:可以独立的运行
        • 建议:
          • 方法名: test测试的方法名
          • 返回值: void
          • 参数列表:空参
      3. 给方法加@Test
      4. 导入Junit依赖
    • 补充

      • @Before
      • @Close
  • 反射:框架设计的灵魂

    • 框架:半成品的软件。可以在框架的基础上进行软件开发,简化编码

    • 反射:将类的各个组成部分封装为其他对象,这就是反射机制。

      • 好处:
        1. 可以在程序运行过程中,操作这些对象
        2. 可以解耦,提高程序的可扩展性。
    • 获取Class对象的方式:

      1. Class.forName(“全类名”) : 将字节码文件加载进内存,返回class对象
        • 多用于配置文件,将类定义在配置文件中。读取文件,加载类
      2. 类名.class: 通过类名的属性获取
        • 对用于参数的传递
      3. 对象.getClass() :getClass 方法在object类中定义着
        • 多用于对象的获取字节码的方式
      • 结论
        • 同一个字节码文件(*.class)在一次程序运行过程中,只会被加载一次,不论通过哪种方式获取的Class对象,都是同一个。
    • Class 对象功能

      • 获取功能:
        • 获取成员变量
          • Fileld[] getFileds() 获取所有public 成员变量
          • Field getField(String name) 获取指定名称的public对象
        • 获取构造方法
          • getConstructors()
          • getConstructor(…)
            • 创建对象
        • 获取成员方法
          • getMethods()
          • getMethod(…)
        • 获取类名
          • getName()
      • 可以通过暴力反射获取私有变量,改变私有变量

注解

  • 概念:说明程序的。给计算机看的。

  • 注释:用文字描述程序。给程序员看的。

  • 概念描述:

    • JDK1.5之后的新特性
    • 说明程序的
    • 使用注解:@注解名称
  • 使用分类:

    • 编写文档
    • 代码分析
    • 编译检查
  • JDK中预定义的一些注解

    • @Override: 检测被该注解标注的方法是否是继承自父类(接口)
    • @Deprecated: 该注解标注的内容,表示已过时
    • @SuppressWarning: 压制警告
      • 一般传递参数 all @SuppressWarning(all)
  • 自定义注解

    • 格式
      • 元注解 public @interface 注解名称{}
    • 本质: 注解的本质就是一个接口,该接口默认继承Annotation接口
      • public interface MyAnno extends java.lang.Annotation{}
    • 属性:接口中的抽象方法
      • 要求:
        • 属性的返回值类型

          • 基本数据类型
          • String
          • 枚举
          • 注解
          • 以上类型的数组
        • 定义了属性,在使用时需要给属性赋值

          • 如果定义属性时,使用default关键字给属性默认初始化值,则使用注解时,可以不用赋值
          • 如果只有一个属性需要赋值,则直接定义值即可
          • 数组赋值时,只使用{}。如果数组中只有一个值,则{}可以省略
      • 元注解:用于描述注解的注解
        • @Target:描述注解能够作用的位置
          • ElementType取值:
            • TYPE:可以作用于类上
            • METHOD:可以作用在方法上
            • FIELD:可以作用于成员变量上
        • @Retention:描述注解被保留的阶段
        • @Documented:描述注解是否被抽取到api文档中
        • @Inherited:描述注解是否被子类继承
  • 在程序中使用(解析)注解

    • 获取注解定义的位置的对象。如:获取该类的字节码文件 XXX.class()
    • 获取指定的注解。如:获取上边的注解对象 getAnnootation(xxx)
    • 调用注解对象中定义的抽象方法,获取返回值
  • 小结

    • 通常会使用注解,而不是自定义注解
    • 直接给谁用?
      • 编译器
      • 解析程序
    • 注解不是程序的一部分,可以理解为注解就是一个标签

泛型

泛型是一种未知的数据类型,当我们不知道使用什么数据类型的时候,可以使用泛型
泛型也可以看做一个变量,用来接收数据类型
E e : Element

  • 不使用泛型
    • 好处:默认的类型就是Object类型,可以存储任意类型的数据
    • 弊端:不安全,会引发异常

泛型的上限限定 extends
泛型的下限限定 super

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值