Java web自学笔记01

Junit单元测试

测试的种类:

1、黑盒测试:不需要写代码,只看输入输出
2、白盒测试:需要写代码,看代码具体的流程(Junit单元测试是白盒测试)
  1. 定义一个测试类(测试用例)

    放测试类的包名:xxx.xxx.xx.test
    测试类名:被测试的类名Test

  2. 定义测试的方法:可以独立运行

    方法名:test测试的方法名
    返回值:void
    参数列表:空参

  3. 给方法加@Test (这样方法就可以不在main方法中,而独立运行)

  4. 导入Junit依赖环境

  5. 判定结果:红色为错,绿色是对,使用断言来判定结果是不是预期结果,如果是就是绿色,不是就是红色
    Assert.assertEquals(期望的结果,真实的结果)

注解@Before和@After

1、@Before ---> 初始化方法,在所有测试方法执行之前默认执行,用于资源申请
2、@After ---> 释放资源方法,在所有测试方法执行完毕之后执行,
				如果测试方法有错误也依然执行,一般用于资源释放

反射

反射是框架设计的灵魂(框架:半成品软件。可以在框架的基础上进行软件开发,用于简化编码)
Java代码在计算机中执行的三个阶段
(该图片源自学习视频的截图)
在这里插入图片描述
类加载器:把字节码文件加载到内存中,在内存中使用对象来描述字节码文件(有一个类叫做Class类,把字节码中的成员变量封装成Field对象,把构造方法封装成Construction对象,成员方法封装成Methods对象)
反射就是将各个组成部分封装成其他对象(就像类加载器把字节码文件放到内存中的过程)
优点:
1、在程序的运行过程中操作这些对象
2、可以解耦,提高程序的可扩展性

获取.Class对象的三种方式

1、Class.forName(“全类名”):将字节码文件加载进内存,返回Class对象
2、类名.class :在Class类对象阶段通过类名的属性class获取
3、对象.getClass():在内存中获取class对象,getClass()方法是在Object类中定义的

获取字节码对象的三种方式

上一节说过Java代码在计算机中执行的三个阶段,其中第二个阶段class类对象阶段有获取字节码的三种方式

  1. 获取成员变量的对象

    (1)Fields[] getFields()  获取所有被public修饰的成员变量,放在数组中返回
    (2)Field getField(...)获取指定成员变量的对象,该成员变量只能是被public修饰
    (3)Field[] getDeclaredFields() 返回所有被任何权限修饰符修饰的成员变量,Field getDeclaredField(...)返回指定的成员变量对象
    (4)操作:
    get用法:成员变量.get(实体类对象)  ---> 返回该实体类对象的指定成员变量的值
    set用法:set(实体类对象,要设置的成员变量的值)
    

在这里插入图片描述
暴力反射:成员变量对象.setAccessible(true) ----> 忽略访问权限修饰符的安全检查(暴力反射)(例如私有成员变量是不允许访问的,但是暴力反射可以访问)

  1. 获取构造方法

    通过使用personClass.getConstructor(...)获取有参构造方法,personClass.getConstructor()获取无参构造方法
    操作:
    1、获取自定义类(如Person类)的字节码文件
    2、字节码文件.getConstructor(...)获取有参构造方法,返回一个构造器对象
    3、使用刚刚的构造器对象来创建实体对象:构造器对象.newInstance(要传入的参数)
    注意:如果要创建无参构造方法的对象,可以使用简化写法:类字节码文件.newInstance()
    

在这里插入图片描述

  1. 获取成员方法

    (1)getMethods()   getMethod(指定名称)获取被public修饰的成员方法
    (2)getDeclaredMethods()   getDeclaredMethods(指定名称)获取任何成员方法
    (3)操作 :
    * 执行方法:刚刚获取的方法对象.invoke(实体类对象,参数)
    注意:获取所有方法时(无论是否被public修饰)获取的不仅仅使在该类中定义的方法,还有该类的父类中相应的一些方法(不是全部)
       * 获取方法名 : String getName
    

反射案例

需求:写一个“框架”,可以帮助我们创建任意类的对象,并且执行其中任意方法
分析:
之前的做法:要创建一个类的对象要在main方法中new上这个类,不使用这个类了,要使用另一个类的对象时就要删除刚刚创建的对象,创建另一个类的对象。
弊端:框架的前提是不能改变框架中的代码,按照之前的做法会频繁改变之中的代码
改进实现:1、配置文件 2、反射
步骤:
1、将需要创建的对象的全类名(包名.类名)和需要执行的方法定义在配置文件中
2、在程序中加载读取配置文件
3、使用反射技术来加载类文件进入内存
4、创建对象
5、执行方法
代码实现:
在这里插入图片描述
在这里插入图片描述

ReflectTest类作为“框架”:

  1. 加载配置文件

    (1)创建Properties对象:
    	用Properties加载properties对象可以形成一个集合,Properties是Map集合的子类,是一个双列集合
    (2)加载配置文件转换为一个集合:
    	可以使用类加载器找到这个配置文件(类加载器可以找到src下的所有文件),再使用load加载该文件进入刚刚创建的properties集合(类名.class是字节码文件)
    

在这里插入图片描述

  1. 获取配置文件中定义的数据

在这里插入图片描述

  1. 加载要使用的类进内存

Class cls = Class.forName(className);

  1. 创建对象
  2. 获取方法对象
  3. 执行方法

在这里插入图片描述
执行结果:
在这里插入图片描述
如果要使用另一个类和另一个类的方法只需要修改配置文件即可:
在这里插入图片描述
执行结果:
在这里插入图片描述

优点:增加文件的可扩展性

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值