log日志、类加载器、xml、XPath、单元测试、注解

一、log日志

- 用处:记录程序运行过程中的信息

- 优势:可以将系统执行的信息选择性的记录到指定位置;可以以开关的形式控制是否记录日志,不需要修改源代码

- 日志规范:接口的形式。Commons Logging、Simple Logging Facade for Java

二、类加载器

- 作用:将类的class文件加载到内存当中

- 加载的时机:只要使用就会加载。比如创建类的对象、访问类中的成员

- 类加载的过程

1. 加载
  1. 通过全类名获取此类的二进制字节流
  2. 将字节流转化为运行时数据结构(加载到内存当中)
  3. 在内存中生成一个代表这个类的对象,用来存储类的成员信息
2. 验证:确保class文件字节流中包含的信息符合当前虚拟机的要求
3. 准备:为静态成员分配内存并初始化
4. 解析:将类的二进制数据流中的符号引用替换为直接引用

三、配置文件xml

1. 基础概念

  1. xml全称:可扩展的标记语言。

  2. 标记语言:通过标签来描述数据的语言

  3. 可扩展:标签的名字可以自己定义

2. xml的组成

- 第一行必须是文档声明:<?xml version="1.0" encoding="字符集"?>
- xml标签规则:
  1. 特殊的标签可以不成对,但是必须有结束标记。比如:<br/>
  2. 标签中可以定义属性,属性值要用引号。<Student id="1">
- xml中的特殊字符:< & > " '
  • 使用特殊字符的两种方法:
方法一:

< 等同于 &lt;
> 等同于 &gt;
& 等同于 &amp;
' 等同于 &apos;
" 等同于 &quot;

方法二:
<![CDATA[ ]]>

3. xml文档的约束

- 约束的作用:用来限定xml文件中的标签以及属性的书写
-约束方式:DTD、schema

四、XPath

- 作用:使用路径获取标签或属性

- 成员方法:

//获取单个节点
Node selectSingleNode("表达式")

//获取所有符合要求的表达式
List<Node> selectNodes("表达式")

五、单元测试

1. 基础概念:

  1. 单元测试是针对最小的功能单元编写的测试代码。
  2. Java中最小的功能单元是方法
  3. 单元测试就是针对Java方法的测试

2. 优点

  1. 可以灵活的选择要测试的代码,使用@Test进行注解
  2. 单元测试中的某个方法测试失败,不会影响其他测试方法的测试

3. JUnit单元测试框架的常用注解

  1. @Test:用来测试方法

  2. @Before:使用这个注解的方法会在测试之前运行。用来对数据进行备份,防止在测试过程中污染数据

  3. @After:使用这个注解的方法会在测试之后运行。对数据进行恢复

4. JUnit测试框架补充:

  1. 只有public、void、无参、非静态的方法才可以使用JUnit测试。

  2. 如果要测试有参数的方法,可以创建一个类进行测试。使用断言Assert类中的方法进行判断

    Assert.assertEquals(message,expect result, real result)
    

六、注解(Annotation)

1. 基础概念

  • 注解:使用@符号标记

2. 作用:

  • 对程序进行标注,为类增加额外的信息
  • 为编译器或JVM提供操作提示,编译器或者JVM通过注解完成对应的功能

3. 注解与注释的区别

  • 注解:给编译器或者JVM看,会保留到字节码文件中
  • 注释:为程序员提供信息,编译时会被擦除

4. 常见的注解

  • @Override:用于标记重写的方法
  • @Deprecated:用于标记过时的方法/类 。可以使用,但是会有删除线警告。
  • @SuppressWarnings(“all”):用于压制警告

5. 自定义注解

5.1 自定义注解的格式
public @interface 注解名称{
	public 属性类别 属性名() default 默认值;
}

其中,属性类别:基本数据类型、String、注解、美剧、Class、还有对应的一维数组也可以

6. 元注解:写在注解上的注解

元注解的两个例子

  1. @Target:限制注解的作用对象
@Target(ElementType.Method)
  1. @Retention:用来定义注解的生命周期
SOURCE:源码阶段。生成字节码文件中不会有注解
CLASS:字节码阶段。代码运行阶段不会出现
RUNTIME:源码阶段、字节码阶段、运行阶段都会存在

7. 结合反射解析注解可以做一个简单的Test测试

  1. 获取类的Class文件,通过反射获取类中的方法
//1. 利用反射获取class文件,获取类中的方法信息
        Class clazz = Class.forName("myjunit.MethodTest");

        Method[] methods = clazz.getDeclaredMethods();
  1. 注解中的方法:(使用这个方法,可以判断方法是否被注解)
boolean isAnnotationPresent(定义注解的类的class文件)
  1. 如果方法被注解,使用反射中的invoke方法
//比如method2()被@MyTest注解

boolean result = method2.isAnnotationPresent(MyTest.Class);
//使用invoke方法
method2.invoke(new MethodClass());	//MethodClass是method2所在的类

关于invoke方法(我自己的理解)

为什么要在invoke方法中传入MethodClass的对象?

method2.invoke(MethodClass mc, Object...args)
    
参数一mc:用MethodClass对象调用method2()
参数二:调用method2()要传递的参数.如果method2没有形参,可以不传递
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值