java笔记20221011

泛型

  1. 为什么使用泛型
    1. 安全性:使用了范型之后编译器会对一些原本为Object类的对象开启检查,避免类型错误引起bug
    2. 消除转换:消除许多强制转换,可读性更好
    3. 提升性能:避免了Object类型拆箱装箱的操作
    4. 重用性:
  2. 泛型四个主要用法
    1. 泛型类 public class GenericClass{}
    2. 泛型接口 public calss GI{} public class GImpl implement GI{}
    3. 泛型方法 public T GFunction(T value){ }
    4. 泛型通配符
  3. ETKV在源码中的意思
    1. Element
    2. Type(Java类)
    3. Key
    4. Value
    5. Number:数值类型

Junit单元测试

  1. 分类

    1. 黑盒测试:不需要写代码,给输出,看是否给出期望值
    2. 白盒测试:需要写代码,关注程序具体执行流程
    3. junit是白盒测试
  2. Junit使用

    1. 第一步:定义一个测试类(测试用例)

      1. 建议:测试类名:类名+Test;包名:xxx.xxx.xxx.test
    2. 第二步:定义测试方法:可以独立运行

      1. 建议:方法名:test+测试的方法名; 返回值使用void; 参数列表建议空参数
    3. 第三步:给方法加注解@Test

    4. 倒入Junit依赖

    5. 判定:红色说明有错,绿色说明没有异常,一般使用断言判断输出结果数据是否正确Assert.assertEquals(expected,result)

  3. @Before 和 @After 进行初始化和测试结束

反射

框架设计的灵魂

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

java笔记20221011_第1张图片

  1. 前言:java代码在计算机中的三个阶段:

    1. Source源代码阶段:java类转换成字节码文件,其中成员变量,构造方法,其他类内方法被分别存储
    2. Class类对象阶段:用class类对象描述字节码文件,Field,constructor,Method
    3. Runtime运行时阶段:用class类对象信息创建对象
  2. 概念:将类的各个组成部分封装为其他对象,这就是反射机制。

    1. 好处:可以在程序运行时,操作这些对象
    2. 好处:可以解藕,提供程序的可扩展性。
  3. 获取class对象的方式:三种方式,对应java代码的三个阶段

    1. Class.forName(“全类名”):将字节码文件加载进内存,返回Class对象,全类名指:全部包名.类名

      多用于配置文件,将类名定义在配置文件中,读取文件,加载类

    2. 类名.class:通过类名.class属性方式获取

      多用于参数传递

    3. 对象.getClass():通过对象继承的Object类里的getClass方法获取。

      多用于对象的获取字节码的方式

    4. 结论:同一个字节码文件在一次程序运行过程中,只会被加载一次,不论通过哪一种方式获取的class对象都是同一个对象。

  4. Class对象功能:

    1. 获取功能
      1. 获取成员变量
        1. Field[] getFields();Field getField(String name);
        2. Field[] getDeclaredFields();Field getDeclaredField(String name);
      2. 获取构造方法: 跟上面类似:Constructor[] getConstructors()
      3. 获取成员方法 :Method[] getMethods();
      4. 获取类名 String getName()
  5. getFields和getField操作:

    1. 只能获取public修饰的变量名称
    2. 获取到成员变量后的操作:设置值set;获取值get ; 获取名称getName
    3. 获取Field的类型:使用getType(),这里不能使用getClass,getClass变成获取class对象了,不是获取类型。
  6. getDeclaredFields和getDeclaredField操作:

    1. 可以获取全部声明的修饰变量名称
    2. 即使是private成员变量也可以进行访问与修改,在使用非public修饰成员之前,需要忽略安全检查field.setAccseeible(true),也称之为暴力反射。

练习:使用反射和泛型实现一下BeanUtil.copyProperties

  1. getConstructor() :创建对象
    1. 返回一个构造器,参数为构造函数的参数类型(String.class),也可以使用空参数的构造器
    2. constructor.newInstance(实参) 创建对象的方法
    3. 当创建空参数的对象时,可以使用class对象的newInstance方法
    4. 同理,对于使用带Declared的构造器,也需要关闭安全检查
  2. getMethod():执行该方法
    1. 获取方法二要素:方法名,参数类型列表
    2. 执行方法:invoke( ) ,需要传递一个真实的对象,以及实际的参数列表。
    3. getMethods():会获取到他的所有方法,包括继承父类的(Object)。
    4. 同理,对于使用带Declared的构造器,也需要关闭安全检查,支持暴力反射。
    5. 获取方法名称:method.getName()
  3. 获取类名:String className = personClass.getName() 这个获取的是全类名,即包括包名。

你可能感兴趣的:(java,junit,单元测试)