单元测试

  • 最小的功能单元编写测试代码,java针对方法,检查方法的正确性

JUnit单元测试框架

@Test注解

public class A {
@Test
public void a(){
.....
}
}
  • 必须导入jar包
  • 定义的测试方法必须是无参数无返回值的,且公开的方法
  • 测试的方法要用@Test注解

注解

  • @Test
  • @Before 实例方法,每个测试方法之前执行
  • @After 实例方法,每个测试方法之前执行
  • @BeforeClass 静态方法,所有测试方法之前执行一次
  • @AfterClass静态方法,在所有测试方法之后执行一次

初始化资源

释放资源

反射

是指对于任何一个Clss类,在运行是都可以直接得到这个类的全部成分

  • 类构造对象:Constructor
  • 类的成员变量对象:Filed
  • 类的成员方法对象:Method
  • 动态获取类的信息以及动态的调取类中的成分的能力称为java语言的反射机制
Class c = A.class;

获得类对象

Class类中的静态方法:

  • forName(String className)
  • 类名.class
  • 对象.getClass()
main(){
Class c =Class.forName("com.hjz.entity.Student");
Class c =Student.class;
Student s =new Student();
Class c = s.getClass();
}

获得构造器对象:

1.获得Class类对象

2.获得构造器对象

  • Constructor<?> getConstructors()返回所有的构造器数组(只拿public)
  • Constructor<?> getDeclredConstructors()返回所有的构造器数组,有就能拿到
  • Constructor getConstructors( Class<?>... paramerTypes)返回单个构造器
  • Constructor getDeclredConstructors( Class<?>... paramerTypes)
main(){
Class c =Student.class;
Constructor[] cs = c.getConstructors();
Constructor[] cs = c.getDeclredConstructors(String.class,int.class);//有一个构造方法是啥用啥
}

创建对象:

  • T newInstance(Object...initargs) 指定的构造器创建对象
  • public void setAccesible(boolean flag) 设置为true 表示取消访问检查,进行暴力反射
main(){
Class c =Student.class;
Constructor cs = c.getDeclredConstructors();//有一个构造方法是啥用啥
//反射会破坏封装性
cs.setAccesible(true);//是私有的
Student s = (Student)cs.new newInstance();
}

获得成员变量对象:

1.获得Class类对象

2.获得成员变量对象

  • Filed[] getDeclredFileds()
  • Filed getDeclredFiled(String name)

方法:

  • getType()
main(){
Field agef =c.getDeclredFiled("age");
agef.setAccessible(true);
Student s =new Student();
agef.set(s.18);
int age = (int) agef.get(s);
}

获得方法对象

  • Method[] getMothod()
  • Method getDeclredConstructor( ,String name,Class<?>... paramerTypes)

....和之前的一样

反射的作用

  • 反射是在运行时使用的技术,此时集合泛型就不能产生约束了,此时是可以为集合存入其他任何类型的元素的
ArrayList<Integer> list =new ArrayList<>();

实际跑起来都是Arraylist的类型了,不用管Integer了

  • 反射的通用框架

1.定义一个方法可以接受任意的对象

2.每次收到一个对象后,解析这个对象的全部成员变量

3.这个对象是任意的

4.遍历这个成员变量,提取成员变量的具体的值

5.把名称和值放到成员变量对应的文件里面

注解

JDK5 引入的标注

  • 对java的类、方法、对象有特殊处理

自定义注解

public @interface 注解名称{
public属性名称 属性名()default 默认值;
}

例子:

public @interface MyBook{
String name();
String[] authors();
double price();
}
public class a{
@MyBook(name="java",autors={"黑马","我的"},price=200)
public void ss(){ }
}

只有一个value属性可以写可以不写

元注解

注解上的注解

  • @Target:约束自定义注解只能在哪使用

    发现ElementType是个枚举。属性作用如下:

    TYPE:接口、类、枚举

    FIELD:字段、枚举的常量

    METHOD:方法

    PARAMETER:方法参数

    CONSTRUCTOR:构造函数

    LOCAL_VARIABLE:局部变量

    ANNOTATION_TYPE:注解

    PACKAGE:包

  • @Retention:申明注解的生命周期

    按生命周期来划分可分为3类:

    1、RetentionPolicy.SOURCE:注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃;

    2、RetentionPolicy.CLASS:注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期;

    3、RetentionPolicy.RUNTIME:注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在;

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyBook{
String name();
String[] authors();
double price();
}

注解解析

  • Annotation:注解的顶级接口,注解都是Annotation的类型对象
  • AnnotatedElement:给接口定义了注解解析相关的解析方法

动态代理(重点)

代理为对象的行为实现一些辅助操作:

有时间看吧

xml

xml解析---xpath解析技术

可扩展标记语言

数据表示格式

<?xml version="1.0" encoding="utf-8">
<--注释有且仅有一个-->
  • &lt小于
  • &gt大于
  • &amp 和
  • &apos 单引号
  • &quot 引号

文档约束

  • DTD
  • schema

解析数据技术:Dom4J框架底层技术

  • SAX解析
  • DOM解析

数据检索技术XPath

  • Dom4J需要进行全文检索,然后寻找资源
  • Xpath技术适合数据检索

完结了我草终于2022.05.07

javaEE(单元测试、反射、动态代理、xml)的更多相关文章

  1. 【译】11. Java反射——动态代理

    原文地址:http://tutorials.jenkov.com/java-reflection/dynamic-proxies.html 博主最近比较忙,争取每周翻译四篇.等不急的请移步原文网页. ...

  2. java 反射 动态代理

    在上一篇文章中介绍Java注解的时候,多次提到了Java的反射API.与javax.lang.model不同的是,通过反射API可以获取程序在运行时刻的内部结构.反射API中提供的动态代理也是非常强大 ...

  3. 【Java核心技术】类型信息(Class对象 反射 动态代理)

    1 Class对象 理解RTTI在Java中的工作原理,首先需要知道类型信息在运行时是如何表示的,这是由Class对象来完成的,它包含了与类有关的信息.Class对象就是用来创建所有“常规”对象的,J ...

  4. 深入理解Java反射+动态代理

    答:   反射机制的定义: 是在运行状态中,对于任意的一个类,都能够知道这个类的所有属性和方法,对任意一个对象都能够通过反射机制调用一个类的任意方法,这种动态获取类信息及动态调用类对象方法的功能称为j ...

  5. java---解析XML文件,通过反射动态将XML内容封装到一个类中

    本博客讲的XML解析,使用的是dom4j. 首先建立一个maven项目,在dom.xml中引入相应的dom4j的版本.作者下载的是热度很高的1.6.1版本.maven的使用在这里不做详细讲解. 引入成 ...

  6. 【对线面试官】Java 反射&&动态代理

    // 抽象类,定义泛型<T> public abstract class BaseDao<T> { public BaseDao(){ Class clazz = this.g ...

  7. 静态代理和利用反射形成的动态代理(JDK动态代理)

    代理模式 代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用. 静态代理 1.新建 ...

  8. JDK动态代理+反射实现动态修改注解属性值

    这是最近朋友的一个需求,正好闲来无聊有些时间,跟着研究一下,如有不正确的地方,欢迎大家指正~ 一.准备自定义注解 注:如何实现自定义注解,请移步百度. 二.实现 1.实现方式1:通过反射+动态代理动态 ...

  9. 七 MyBatis整合Spring,DAO开发(传统DAO&动态代理DAO)

    整合思路: 1.SQLSessionFactory对象应该放到Spring中作为单例存在 2.传统dao开发方式中,应该从Spring容器中获得SqlSession对象 3.Mapper代理行驶中,应 ...

  10. JAVAEE——Mybatis第一天:入门、jdbc存在的问题、架构介绍、入门程序、Dao的开发方法、接口的动态代理方式、SqlMapConfig.xml文件说明

    1. 学习计划 第一天: 1.Mybatis的介绍 2.Mybatis的入门 a) 使用jdbc操作数据库存在的问题 b) Mybatis的架构 c) Mybatis的入门程序 3.Dao的开发方法 ...

随机推荐

  1. 基于python的数学建模---最小二乘拟合

    import numpy as np import matplotlib.pyplot as plt from scipy.optimize import leastsq from matplotli ...

  2. Dubbo-Activate实现原理

    前言 在Dubbo中有Filter使用,对于Filter来说我们会遇到这样的问题,Filter自身有很多的实现,我们希望某种条件下使用A实现,另外情况下使用B实现,这个时候我们前面介绍@SPI和@Ad ...

  3. 推荐一款 .NET 编写的 嵌入式平台的开源仿真器--Renode

    Renode 是一个开发框架,通过让你模拟物理硬件系统来加速物联网和嵌入式系统开发. Renode 可以模拟 Cortex-M.RISC-V 等微控制器,不仅可以模拟 CPU指令,还可以模拟外设,甚至 ...

  4. 一次MTU问题导致的RDS访问故障

    导语 VPN是一种通过公网连接两个或多个私网站点的专用网络,使得这些站点仿佛是通过专线连接在一起.IPSec是一套协议框架,用于保证数据传输的私密性,完整性,真实性.但是VPN网络经常会带来一些连通性 ...

  5. Spring MVC文件请求处理详解:MultipartResolver

    org.springframework.web.multipart.MultipartResolver是Spring-Web针对RFC1867实现的多文件上传解决策略. 1 使用场景 前端上传文件时, ...

  6. day29-JQuery02

    JQuery02 4.jQuery选择器02 4.3过滤选择器 4.3.1基础过滤选择器 $("li:first") //第一个li $("li:last") ...

  7. SpringMVC01:入门、请求参数绑定、自定义类型转换器、常见注解

    一.介绍--三层架构和MVC 1.三层架构介绍和MVC设计模型介绍 开发架构一般都是基于两种形式,一种是 C/S 架构,也就是客户端/服务器,另一种是 B/S 架构,也就是浏览器/服务器.在 Java ...

  8. 【Java EE】Day04 MySQL多表、事务、事务隔离级别、DCL

    一.多表查询 1.概述 笛卡尔积:两集合的所有组成情况 多表查询:消除笛卡尔积得到的无用数据 2.分类 内连接查询(满足指定条件无空值,只显示有关联的数据) 隐式内连接:使用where限制消除无用数据 ...

  9. JavaScript:输入语法:prompt与confirm

    prompt prompt有两个参数: 第一个参数会显示在弹窗的输入框的上方: 第二个参数是可选的,会显示在输入框内,是一个初始值: 我们在输入框内输入的任何内容,都会作为返回值,返回给变量resul ...

  10. win7安装Anaconda+TensorFlow(cpu版)+配置PyCharm

    本着不折腾不舒服斯基,好久没安装软件玩了.今天趁天气不错,安装下TensorFlow(cpu版)(因为没钱上GPU),首先在网上搜了下教程,原文出处: https://blog.csdn.net/u0 ...