java反射机制和junit的使用
1. 反射的原理
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。
应用在一些通用性比较高的代码中
后面学到的框架,大多数都是使用反射来实现的
在框架开发中,都是基于配置文件开发
在配置文件中配置了类,可以通过反射得到类中的所有内容,可以让类中的某个方法来执行
类中的所有内容:属性、没有参数的构造方法、有参数的构造方法、普通方法
画图分析反射的原理
首先需要把java文件保存到本地硬盘 .java
编译java文件,成.class文件
使用jvm,把class文件通过类加载加载到内存中
万事万物都是对象,class文件在内存中使用Class类表示
当使用反射时候,首先需要获取到Class类,得到了这个类之后,就可以得到class文件里面的所有内容,包含属性、构造方法和普通方法。
2. 使用反射操作类里面的无参构造方法
public class Student {private String name;private int age;
public Student() {super();}
public Student(String name, int age) {super();this.name = name;this.age = age;}
public String getName() {return name;}
public void setName(String name) {this.name = name;}
public int getAge() {return age;}
public void setAge(int age) {this.age = age;}
public void show() {System.out.println("show");}
public void method(int x, int y) {System.out.println(x + "method" + y);}
}
测试类:
@Testpublic void test1() throws Exception {// 得到ClassClass clazz = Class.forName("com.yfy.Student");// 获取无参构造方法Student s = (Student) clazz.newInstance();s.setName("张三");s.setAge(20);System.out.println(s.getName() + "--" + s.getAge());}
3. 使用反射操作有参数的构造方法
@Testpublic void test2() throws Exception {// 得到ClassClass clazz = Class.forName("com.yfy.Student");// 使用有参数的构造方法// c1.getConstructors();//获取所有的构造方法// 传递是有参数的构造方法里面参数类型,类型使用class形式传递Constructor con = clazz.getConstructor(String.class, int.class);// 通过有参数的构造方法创建Student实例Student s = (Student) con.newInstance("李四", 18);System.out.println(s.getName() + "--" + s.getAge());}
4. 使用反射操作属性
@Testpublic void test3() throws Exception {// 得到ClassClass clazz = Class.forName("com.yfy.Student");// 获取Student类中的字段,包括私有Field field = clazz.getDeclaredField("name");// 对私有字段的访问取消权限检查。暴力访问。field.setAccessible(true);Student s = (Student) clazz.newInstance();// 给s对象的name属性赋值field.set(s, "王五");//得到该字段在s对象中的属性值System.out.println(field.get(s));}
5. 使用反射操作普通方法
@Testpublic void test4() throws Exception {// 得到ClassClass clazz = Class.forName("com.yfy.Student");// 获取带参数的构造方法Constructor con = clazz.getConstructor(String.class, int.class);Student s = (Student) con.newInstance("李四", 18);//获取类中的带参方法Method method=clazz.getMethod("method", int.class,int.class);//调用带参方法method.invoke(s, 3,7);//获取类中的无参方法Method method1=clazz.getMethod("show");//调用无参方法method1.invoke(s);}
getDeclaredMethod(方法名称,方法里面参数的类型):得到任意一个方法,包括私有
getDeclaredMethods():得到所有方法,包括私有。
setAccessible(true):对私有方法取消权限检查。
6. junit的使用
JUnit 是一个 Java 编程语言的单元测试框架。JUnit 在测试驱动的开发方面有很重要的发展,是起源于 JUnit 的一个统称为 xUnit 的单元测试框架之一。
junit注解
@Test
:这个注释说明依附在 JUnit 的 public void 方法可以作为一个测试案例。@Before
:有些测试在运行前需要创造几个相似的对象。在 public void 方法加该注释是因为该方法需要在 test 方法前运行。@After
:如果你将外部资源在 Before 方法中分配,那么你需要在测试运行后释放他们。在 public void 方法加该注释是因为该方法需要在 test 方法后运行。@BeforeClass
:在 public void 方法加该注释是因为该方法需要在类中所有方法前运行。@AfterClass
:它将会使方法在所有测试结束后执行。这个可以用来进行清理活动。@Ignore
:这个注释是用来忽略有关不需要执行的测试的。
执行过程
beforeClass()
: 方法首先执行,并且只执行一次。afterClass()
:方法最后执行,并且只执行一次。before()
:方法针对每一个测试用例执行,但是是在执行测试用例之前。after()
:方法针对每一个测试用例执行,但是是在执行测试用例之后。在 before() 方法和 after() 方法之间,执行每一个测试用例。
断言
unit所有的断言都包含在 Assert 类中。
这个类提供了很多有用的断言方法来编写测试用例。只有失败的断言才会被记录。Assert 类中的一些有用的方法列式如下:
方法 | 描述 |
---|---|
assertEquals(boolean expected, boolean actual) | 检查两个变量或者等式是否平衡 |
assertTrue(boolean expected, boolean actual) | 检查条件为真 |
assertFalse(boolean condition) | 检查条件为假 |
assertNotNull(Object object) | 检查对象不为空 |
assertNull(Object object) | 检查对象为空 |
assertSame(boolean condition) | 检查两个相关对象是否指向同一个对象 |
assertNotSame(boolean condition) | 检查两个相关对象是否不指向同一个对象 |
assertArrayEquals(expectedArray, resultArray) | 检查两个数组是否相等 |
java反射机制和junit的使用相关推荐
- 【java】java反射机制,动态获取对象的属性和对应的参数值,并属性按照字典序排序,Field.setAccessible()方法的说明【可用于微信支付 签名生成】...
方法1:通过get()方法获取属性值 package com.sxd.test.controller;public class FirstCa{private Integer num;private ...
- java 反射机制及其应用
文章目录 一.反射的概述 二.关于Class类的理解并获取Class实例 2.1 关于 java.lang.Class 类的理解 2.2 获取Class实例的四种方式 三.Class实例对应的结构说明 ...
- Java反射机制笔记一
Java反射机制 15-1 Java反射机制概述 15-2 理解Class类并获取Class的实例 反射例程 15-3 类的加载与ClassLoader的理解 类的加载器例程 15-4 创建运行时类的 ...
- java 反射机制详解
火星十一郎 海纳百川, 有容乃大,QQ:791909235,Tel:13137910179 posts - 774, comments - 556, trackbacks - 0, articles ...
- 利用java反射机制 读取配置文件 实现动态类载入以及动态类型转换
作者:54dabang 在spring的学习过程之中,我们能够看出通过配置文件来动态管理bean对象的优点(松耦合 能够让零散部分组成一个总体,而这些总体并不在意之间彼此的细节,从而达到了真正的物理上 ...
- Struts2中action接收参数的三种方法及ModelDriven跟Preparable接口结合JAVA反射机制的灵活用法...
Struts2中action接收参数的三种方法及ModelDriven跟Preparable接口结合JAVA反射机制的灵活用法 www.MyException.Cn 发布于:2012-09-15 ...
- Java反射机制分析指南
一.JAVA是动态语言吗? 一般而言,说到动态言,都是指在程序运行时允许改变程序结构或者变量类型,从这个观点看,JAVA和C++一样,都不是动态语言. 但JAVA它却有着一个非常突出的动态相关机制:反 ...
- 反射 字段_详解面试中常考的 Java 反射机制
反射(Reflection) 是 Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说"自审",并能直接操作程序的内部属性和方法. 反射是一项高级 ...
- java基础-java反射机制
2019独角兽企业重金招聘Python工程师标准>>> 引述要学习Spring框架的技术内幕,必须事先掌握一些基本的Java知识,正所谓"登高必自卑,涉远必自迩" ...
最新文章
- [导入]php 安全基础 第八章 共享主机 文件系统浏览
- ARM汇编ADR,LDR等伪指令
- 信息学奥赛C++语言:数字三角形2
- 自行车测速器怎么调_一种自行车测速器及其安装方法与流程
- rust怎么拆除墙壁指令_拆除墙体前准备:区分承重墙与非承重墙,拆错影响整栋楼房...
- mysql 事务_MySQL事务隔离级别
- 李永乐复习全书线性代数 第三章 向量
- 计算机中库的创建方法,win7系统下库的创建方法
- 普通话-命题说话11-20
- html5百度地图选中标注点,jQuery百度地图单点标注
- Retrofit2 详解和使用(一)
- catkin build 工作空间锁定 —— [build] Error: Unable to find source space `/home/xxx/src`
- 利用html做一个3D 图片动态效果
- 机器学习实战——决策树(二)
- Java程序设计(一)
- 【杂谈】Remember-Me的实现
- 杰文斯效应(Jevons effect)
- 全国计算机等级考试试题练习,全国计算机等级考试一级练习试题
- fastboot 快速引导模式 介绍
- 6DoF 360视频播放器
热门文章
- 初等数论--整除--整数表示:算数分解定理/素因数分解式/进制表示
- 创新实训个人记录:metric k-center
- buu [HDCTF2019]bbbbbbrsa
- sql注入-union select
- angr学习笔记(10)(hook)
- pwn学习总结(五) —— 堆溢出经典题型整理
- MySQL INT、TINYINT、SMALLINT、MEDIUMINT、BIGINT(整数类型)
- Quartz整合Spring
- linux序列比对程序,序列比对软件简单使用教程
- cli3解决 ie11语法错误 vue_从零到一教你基于vue开发一个组件库高性能前端架构解决方案...