1. 反射的原理

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。

  • 应用在一些通用性比较高的代码中

  • 后面学到的框架,大多数都是使用反射来实现的

  • 在框架开发中,都是基于配置文件开发

  • 在配置文件中配置了类,可以通过反射得到类中的所有内容,可以让类中的某个方法来执行

  • 类中的所有内容:属性、没有参数的构造方法、有参数的构造方法、普通方法

画图分析反射的原理

  1. 首先需要把java文件保存到本地硬盘 .java

  2. 编译java文件,成.class文件

  3. 使用jvm,把class文件通过类加载加载到内存中

  4. 万事万物都是对象,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注解

  1. @Test:这个注释说明依附在 JUnit 的 public void 方法可以作为一个测试案例。

  2. @Before:有些测试在运行前需要创造几个相似的对象。在 public void 方法加该注释是因为该方法需要在 test 方法前运行。

  3. @After:如果你将外部资源在 Before 方法中分配,那么你需要在测试运行后释放他们。在 public void 方法加该注释是因为该方法需要在 test 方法后运行。

  4. @BeforeClass:在 public void 方法加该注释是因为该方法需要在类中所有方法前运行。

  5. @AfterClass:它将会使方法在所有测试结束后执行。这个可以用来进行清理活动。

  6. @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的使用相关推荐

  1. 【java】java反射机制,动态获取对象的属性和对应的参数值,并属性按照字典序排序,Field.setAccessible()方法的说明【可用于微信支付 签名生成】...

    方法1:通过get()方法获取属性值 package com.sxd.test.controller;public class FirstCa{private Integer num;private ...

  2. java 反射机制及其应用

    文章目录 一.反射的概述 二.关于Class类的理解并获取Class实例 2.1 关于 java.lang.Class 类的理解 2.2 获取Class实例的四种方式 三.Class实例对应的结构说明 ...

  3. Java反射机制笔记一

    Java反射机制 15-1 Java反射机制概述 15-2 理解Class类并获取Class的实例 反射例程 15-3 类的加载与ClassLoader的理解 类的加载器例程 15-4 创建运行时类的 ...

  4. java 反射机制详解

    火星十一郎 海纳百川, 有容乃大,QQ:791909235,Tel:13137910179 posts - 774, comments - 556, trackbacks - 0, articles ...

  5. 利用java反射机制 读取配置文件 实现动态类载入以及动态类型转换

    作者:54dabang 在spring的学习过程之中,我们能够看出通过配置文件来动态管理bean对象的优点(松耦合 能够让零散部分组成一个总体,而这些总体并不在意之间彼此的细节,从而达到了真正的物理上 ...

  6. Struts2中action接收参数的三种方法及ModelDriven跟Preparable接口结合JAVA反射机制的灵活用法...

    Struts2中action接收参数的三种方法及ModelDriven跟Preparable接口结合JAVA反射机制的灵活用法 www.MyException.Cn   发布于:2012-09-15 ...

  7. Java反射机制分析指南

    一.JAVA是动态语言吗? 一般而言,说到动态言,都是指在程序运行时允许改变程序结构或者变量类型,从这个观点看,JAVA和C++一样,都不是动态语言. 但JAVA它却有着一个非常突出的动态相关机制:反 ...

  8. 反射 字段_详解面试中常考的 Java 反射机制

    反射(Reflection) 是 Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说"自审",并能直接操作程序的内部属性和方法. 反射是一项高级 ...

  9. java基础-java反射机制

    2019独角兽企业重金招聘Python工程师标准>>> 引述要学习Spring框架的技术内幕,必须事先掌握一些基本的Java知识,正所谓"登高必自卑,涉远必自迩" ...

最新文章

  1. [导入]php 安全基础 第八章 共享主机 文件系统浏览
  2. ARM汇编ADR,LDR等伪指令
  3. 信息学奥赛C++语言:数字三角形2
  4. 自行车测速器怎么调_一种自行车测速器及其安装方法与流程
  5. rust怎么拆除墙壁指令_拆除墙体前准备:区分承重墙与非承重墙,拆错影响整栋楼房...
  6. mysql 事务_MySQL事务隔离级别
  7. 李永乐复习全书线性代数 第三章 向量
  8. 计算机中库的创建方法,win7系统下库的创建方法
  9. 普通话-命题说话11-20
  10. html5百度地图选中标注点,jQuery百度地图单点标注
  11. Retrofit2 详解和使用(一)
  12. catkin build 工作空间锁定 —— [build] Error: Unable to find source space `/home/xxx/src`
  13. 利用html做一个3D 图片动态效果
  14. 机器学习实战——决策树(二)
  15. Java程序设计(一)
  16. 【杂谈】Remember-Me的实现
  17. 杰文斯效应(Jevons effect)
  18. 全国计算机等级考试试题练习,全国计算机等级考试一级练习试题
  19. fastboot 快速引导模式 介绍
  20. 6DoF 360视频播放器

热门文章

  1. 初等数论--整除--整数表示:算数分解定理/素因数分解式/进制表示
  2. 创新实训个人记录:metric k-center
  3. buu [HDCTF2019]bbbbbbrsa
  4. sql注入-union select
  5. angr学习笔记(10)(hook)
  6. pwn学习总结(五) —— 堆溢出经典题型整理
  7. MySQL INT、TINYINT、SMALLINT、MEDIUMINT、BIGINT(整数类型)
  8. Quartz整合Spring
  9. linux序列比对程序,序列比对软件简单使用教程
  10. cli3解决 ie11语法错误 vue_从零到一教你基于vue开发一个组件库高性能前端架构解决方案...