Junit与反射学习--Arsu
程序员文章站
2022-05-03 23:43:19
Junit与反射1.1测试分类Junit单元测试就是白盒测试的一种1.2Junit的使用步骤1.3 Junit的@Before和@After注解2. Java代码在计算机中经历的三个阶段图ps(Class类是用来描述所有字节码文件共同的一些特征和行为的)3.1 反射3.2 反射----获取字节码Class对象的三种方式代码创建person类package learn.reflect.domain;/** * @ClassName Person * @Descrip...
Junit与反射
1.1测试分类
Junit单元测试就是白盒测试的一种
1.2Junit的使用步骤
1.3 Junit的@Before和@After注解
2. Java代码在计算机中经历的三个阶段图
ps(Class类是用来描述所有字节码文件共同的一些特征和行为的)
3.1 反射
3.2 反射----获取字节码Class对象的三种方式
代码
创建person类
package learn.reflect.domain;
/**
* @ClassName Person
* @Description TODO
* @Author Administrator
* @Date 2020/11/11 14:32
* @Version 1.0
**/
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public Person() {
}
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;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
测试
package learn.reflect;
import learn.reflect.domain.Person;
/**
* @ClassName ReflectDemo1
* @Description TODO
* @Author Administrator
* @Date 2020/11/11 14:33
* @Version 1.0
**/
public class ReflectDemo1 {
public static void main(String[] args) throws ClassNotFoundException {
//获取Class对象方式一:Class.forName("全类名")
Class method1 = Class.forName("learn.reflect.domain.Person");
System.out.println("通过Class.forName('全类名')获取Class对象"+"------------>"+method1);
//获取Class对象方式二:类名.class
Class method2 = Person.class;
System.out.println("通过类名.class获取Class对象"+"------------>"+method2);
//获取Class对象方式三:对象.getClass()
Person person=new Person();
Class method3 = person.getClass();
System.out.println("通过对象.getClass()获取Class对象"+"------------>"+method3);
}
}
打印结果截图
3.3 反射----获取字节码Class对象的功能
3.4 反射----案例应用
自定义两个实体类(Student,Teacher)
package learn.reflect.domain;
/**
* @ClassName Teacher
* @Description TODO
* @Author Administrator
* @Date 2020/11/11 16:29
* @Version 1.0
**/
public class Teacher {
public void teach(){
System.out.println("教师讲课...");
}
}
package learn.reflect.domain;
/**
* @ClassName Student
* @Description TODO
* @Author Administrator
* @Date 2020/11/11 16:29
* @Version 1.0
**/
public class Student {
public void study(){
System.out.println("学生听课...");
}
}
在src路径下创建一个配置文件(pro.properties),内容如下
测试
package learn.reflect;
import java.io.InputStream;
import java.lang.reflect.Method;
import java.util.Properties;
/**
* @ClassName ReflectDemo2
* @Description TODO
* @Author Administrator
* @Date 2020/11/11 16:30
* @Version 1.0
**/
public class ReflectDemo2 {
public static void main(String[] args) throws Exception {
//1.加载配置文件
//1.1通过反射加载ReflectDemo2进内存并获取类加载器
ClassLoader classLoader = ReflectDemo2.class.getClassLoader();
//1.2通过类加载器getResourceAsStream方法获取输入流
InputStream inputStream = classLoader.getResourceAsStream("pro.properties");
//1.3通过Properties集合的load方法加载输入流中的配置文件
Properties prop = new Properties();
prop.load(inputStream);
//2.通过prop中的getProperty方法获取配置文件中定义的数据
String className = prop.getProperty("className");
String methodName = prop.getProperty("methodName");
//3.通过反射获取className的Class对象,加载该类进内存
Class cls = Class.forName(className);
//4.实例化对象
Object o = cls.newInstance();
//5.获取对象中的指定方法对象
Method method = cls.getMethod(methodName);
//6.执行方法
method.invoke(o);
}
}
打印结果截图
当把配置文件改为
打印结果截图为
总结:通过反射机制,能够实现在不改变类任何代码的前提下,而只需简单修改配置文件相关内容,就可以执行到所需要的方法,降低了程序间的耦合性。
本文地址:https://blog.csdn.net/arsu666/article/details/109616587
上一篇: 宰相为什么是高危职业?汉武帝执政期间,13位宰相死了7个
下一篇: 清明节喝什么茶养生 推荐这几种
推荐阅读
-
Junit与反射学习--Arsu
-
PHP进阶学习之反射基本概念与用法分析
-
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第24章:反射与简单Java类:课时111:单级属性赋值
-
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第22章:反射应用案例:课时102:反射与工厂设计模式
-
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第26章:反射与代理设计模式:课时118:动态代理设计模式
-
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第23章:反射与类操作:课时105:反射调用构造方法(含关系图-重要)
-
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第24章:反射与简单Java类:课时110:属性自动赋值实现思路
-
整合篇:零基础学习与使用Junit5
-
junit学习(十)——Springpring与Hibernate整合的单元测试
-
junit学习(十)——Springpring与Hibernate整合的单元测试