前言:
如今各位老铁们对“javaweb文件读取”都比较注重,你们都需要了解一些“javaweb文件读取”的相关资讯。那么小编在网络上收集了一些对于“javaweb文件读取””的相关知识,希望姐妹们能喜欢,大家一起来了解一下吧!一、Junit测试
1.1 测试就是对所完成功能的校验,查看功能是否有缺陷有漏洞。在工作中,每次做完功能后都要进行测试,测试通过才可以结束该功能的编写。测试是开发中很重要的一部分。
1.2 测试分类:
1. 黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望的值。
2. 白盒测试:需要写代码的。关注程序具体的执行流程。
1.3 Junit使用步骤:
1. 定义一个测试类(测试用例):
命名建议:
测试类名:被测试的类名Test CalculatorTest
包名:xxx.xxx.xx.test cn.itcast.test
2. 定义测试方法:可以独立运行
方法建议:
方法名:test测试的方法名 testAdd()
返回值:void
参数列表:空参
3. 给方法加@Test
4. 导入junit依赖环境
判定结果:
红色:失败
绿色:成功
一般我们会使用断言操作来处理结果
Assert.assertEquals(期望的结果,运算的结果);
1.3.1 注意事项:进行单元测试时,一定先要引入Junit包才可以使用。并且该注解必须在方法名上。
1.3.2 代码举例:
1.4 Junit中的@Before和@After:
@Before:修饰的方法会在测试方法之前被自动执行
@After:修饰的方法会在测试方法执行之后自动被执行
每一个测试方法的调用顺序为: @Before –> @Test –> @After
二、反射
2.1 框架概念:半成品软件,可以在框架的基础上进行软件开发,简化编码
2.2 反射:在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
好处:
1. 可以在程序运行过程中,操作这些对象。
2. 可以解耦,提高程序的可扩展性。
2.3 获取字节码Class对象的三种方式:
1. Class.forName("全类名"):将字节码文件加载进内存,返回Class对象
多用于配置文件,将类名定义在配置文件中。读取文件,加载类
2. 类名.class:通过类名的属性class获取
多用于参数的传递
3. 对象.getClass():getClass()方法在Object类中定义着。
多用于对象的获取字节码的方式
2.3.1 注意事项:同一个字节码文件(*.class)在一次程序运行过程中,只会被加载一次,不论通过哪一种方式获取的Class对象都是同一个。
2.4 Class对象常用方法:
2.4.1 获取成员变量:
Field[] getFields() :获取所有public修饰的成员变量
Field getField(String name) 获取指定名称的 public修饰的成员变量
Field[] getDeclaredFields() 获取所有的成员变量,不考虑修饰符
Field getDeclaredField(String name)
2.4.2. 获取构造方法:
Constructor<?>[] getConstructors()
Constructor<T> getConstructor(类<?>... parameterTypes)
Constructor<T> getDeclaredConstructor(类<?>... parameterTypes)
Constructor<?>[] getDeclaredConstructors()
2.4.3. 获取成员方法:
Method[] getMethods()
Method getMethod(String name, 类<?>... parameterTypes)
Method[] getDeclaredMethods()
Method getDeclaredMethod(String name, 类<?>... parameterTypes)
2.4.4. 获取全类名 String getName()
2.5 反射综合案例:
2.5.1 需求:写一个"框架",不能改变该类的任何代码的前提下,可以帮我们创建任意类的对象,并且执行其中任意方法
2.5.2 实现步骤:
1. 将需要创建的对象的全类名和需要执行的方法定义在配置文件中
2. 在程序中加载读取配置文件
3. 使用反射技术来加载类文件进内存
4. 创建对象
5. 执行方法
2.5.3 代码实现:
三、注解
3.1 注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。
3.2 作用分类:
①编写文档:通过代码里标识的注解生成文档【生成文档doc文档】
②代码分析:通过代码里标识的注解对代码进行分析【使用反射】
③编译检查:通过代码里标识的注解让编译器能够实现基本的编译检查【Override】
3.3 JDK内置注解:
@Override:限定重写父类方法。对于子类中被@Override修饰的方法,如果存在对应的被重写的父类方法,则正确;如果不存在,则报错。@Override 只能作用于方法,不能作用于其他程序元素。
@Deprecated:该注解标注的内容,表示已过时
@SuppressWarnings:压制警告,一般传递参数all @SuppressWarnings("all")
3.4 自定义注解:
3.4.1 格式:
元注解
public @interface 注解名称{
属性列表;
}
3.4.2 注意事项:注解本质上就是一个接口,该接口默认继承Annotation接口
3.4.3 接口定义中的属性:接口中的抽象方法
要求:
1. 属性的返回值类型有下列取值
基本数据类型
String
枚举
注解
以上类型的数组
2. 定义了属性,在使用时需要给属性赋值
a. 如果定义属性时,使用default关键字给属性默认初始化值,则使用注解时,可以不进行属性的赋值。
b. 如果只有一个属性需要赋值,并且属性的名称是value,则value可以省略,直接定义值即可。
c. 数组赋值时,值使用{}包裹。如果数组中只有一个值,则{}可以省略
3.4.4 元注解:用于描述注解的注解
3.4.4.1 元注解分类:
@Target:描述注解能够作用的位置
ElementType取值:
TYPE:可以作用于类上
METHOD:可以作用于方法上
FIELD:可以作用于成员变量上
@Retention:描述注解被保留的阶段
@Retention(RetentionPolicy.SOURCE) 注解仅存在于源码中,在class字节码文件中不包含
@Retention(RetentionPolicy.CLASS) 默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得,
@Retention(RetentionPolicy.RUNTIME) 注解会在class字节码文件中存在,在运行时可以通过反射获取到
首先要明确生命周期长度 SOURCE < CLASS < RUNTIME ,所以前者能作用的地方后者一定也能作用。一般如果需要在运行时去动态获取注解信息,那只能用RUNTIME注解;如果要在编译时进行一些预处理操作,比如生成一些辅助代码(如 ButterKnife),就用 CLASS注解;如果只是做一些检查性的操作,比如 @Override 和@SuppressWarnings,则可选用 SOURCE 注解。
@Documented:描述注解是否被抽取到api文档中
@Inherited:描述注解是否被子类继承
标签: #javaweb文件读取