ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

javaEE(单元测试、反射、动态代理、xml)

2022-06-23 21:03:17  阅读:168  来源: 互联网

标签:xml 对象 javaEE 单元测试 class public Student 注解 Class


单元测试

  • 最小的功能单元编写测试代码,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

标签:xml,对象,javaEE,单元测试,class,public,Student,注解,Class
来源: https://www.cnblogs.com/HJZ114152/p/16406717.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有