欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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与反射学习--Arsu
Junit单元测试就是白盒测试的一种

1.2Junit的使用步骤

Junit与反射学习--Arsu
Junit与反射学习--Arsu

1.3 Junit的@Before和@After注解

Junit与反射学习--Arsu

2. Java代码在计算机中经历的三个阶段图

Junit与反射学习--Arsu

ps(Class类是用来描述所有字节码文件共同的一些特征和行为的)

3.1 反射

Junit与反射学习--Arsu

3.2 反射----获取字节码Class对象的三种方式

Junit与反射学习--Arsu
代码
创建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);
        

    }
}

打印结果截图
Junit与反射学习--Arsu

3.3 反射----获取字节码Class对象的功能

Junit与反射学习--Arsu

Junit与反射学习--Arsu
Junit与反射学习--Arsu
Junit与反射学习--Arsu

3.4 反射----案例应用

Junit与反射学习--Arsu
自定义两个实体类(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),内容如下
Junit与反射学习--Arsu
测试

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);
    }
}

打印结果截图
Junit与反射学习--Arsu
当把配置文件改为
Junit与反射学习--Arsu
打印结果截图为
Junit与反射学习--Arsu

总结:通过反射机制,能够实现在不改变类任何代码的前提下,而只需简单修改配置文件相关内容,就可以执行到所需要的方法,降低了程序间的耦合性。

本文地址:https://blog.csdn.net/arsu666/article/details/109616587