单元测试、反射、注解、动态代理

打印 上一主题 下一主题

主题 660|帖子 660|积分 1980

单元测试JUnit

单元测试的目的是针对方法进行测试,
JUnit的两个要点:①必须是公开的,无参数,无返回值的方法                  ②测试方法必须使用@Test注解标记
  1. public class JUnitTest {
  2.     @Test
  3.     public void Testusername() {
  4.         way way = new way();
  5.         String rs = way.username("123");
  6.         //JUnit提供的断言
  7.         Assertions.assertEquals("登陆成功",rs);
  8.     }
  9. }
  10. class way {
  11.     public String username(String un) {
  12.         if(un.equals("123")) {
  13.             return "登陆成功";
  14.         }else
  15.             return "登陆失败";
  16.     }
  17. }
复制代码
反射

反射概述

反射是在运行时获取类的字节码文件对象,然后可以解析类中的全部成分。
反射的关键:得到编译以后的class文件对象。
获取Class对象的方法说明Class c1 = Class.forName(包名+类名)Class类中的一个静态方法Class c2 = 类名.class直接用类名获得,最方便Class c3 = 对象.getClass()实例化后用对象获得利用反射获取构造器对象


**反射的构造器可以用于创建对象 **
  1. public class Reflect {
  2.     public static void main(String[] args) throws Exception {
  3.         //1.获取Class对象
  4.         Class c1 = Student.class;
  5.         //2.获取构造器对象
  6.         Constructor student = c1.getDeclaredConstructor();
  7.         //3.利用构造器对象来实例化对象
  8.         Student stu = (Student) student.newInstance();
  9.         //演示私有构造器如何获取
  10.         Class c2 = Student.class;
  11.         //1.有参构造器声明类型
  12.         Constructor student2 = c2.getDeclaredConstructor(String.class,int.class);
  13.         //2.破坏构造器私有性
  14.         student2.setAccessible(true);
  15.         student2.newInstance("jack",18);
  16.     }
  17. }
复制代码
利用反射获取成员变量对象

  1. public class Reflect {
  2.     public static void main(String[] args) throws Exception {
  3.         //1.获取Class对象
  4.         Class c1 = Student.class;
  5.         //2.获取Field对象
  6.         Field field = c1.getDeclaredField("age");
  7.         field.setAccessible(true);
  8.         //3.给成员变量赋值
  9.         Student student = new Student();
  10.         field.set(student,18);
  11.         //4.获取成员变量
  12.         int result = (int) field.get(student);
  13.         System.out.println(result);
  14.     }
复制代码
利用反射获取方法

  1. public class Reflect {
  2.     public static void main(String[] args) throws Exception {
  3.         //1.获取Class对象
  4.         Class c1 = Student.class;
  5.         //2.获取Method对象
  6.         Method name = c1.getDeclaredMethod("setName", String.class);
  7.         //3.Method.invoke(对象)来调用方法
  8.         Student student = new Student();
  9.         name.invoke(student,"Jack");
  10.     }
  11. }
复制代码
反射作用:绕过编译为集合添加数据

说明:①编译成Class文件进入运行阶段后,泛型会自动擦除
​                        ②反射是作用在运行时的技术,此时已经不存在泛型
  1. public class Reflect {
  2.     public static void main(String[] args) throws Exception {
  3.         ArrayList<Integer> list = new ArrayList<>();
  4.         list.add(1);
  5.         list.add(2);
  6.         //无法加入String类型的变量
  7.         //list.add("Jack");
  8.         //使用放射来强行加入String(运行时)
  9.         Class d = ArrayList.class;
  10.         Method add = d.getDeclaredMethod("add", Object.class);
  11.         add.invoke(list,"Jack");
  12.         for (Object integer : list) {
  13.             System.out.println(integer);
  14.         }
  15.     }
  16. }
  17. //运行结果:1 2 Jack
复制代码
反射作用:通用框架的底层原理

说明:①可以在运行时得到一个类的全部成分
​                        ②做Java高级框架
​                        ③可以针对不同的对象,获取他们的信息
注解

对Java中类、方法、成员变量做标记,然后进行特殊处理
自定义注解


元注解

注解注解的注解(放在注解定义上方)
常见的元注解有两个:
注解说明@Target约束自定义注解只能在哪些地方使用@Retention申明注解的生命周期
注解解析

判断是否存在注解,存在注解就解析出内容

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

自由的羽毛

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表