Java基础 Day28 完结篇
一、方法引用
Tips:静态方法用类名加双冒号,非静态方法用对象名加双冒号
二、单元测试
JUnit 是最流行的Java测试框架之一,提供一些功能,方便进行单元测试(第三方提供)
Tips:JUnit 单元测试类名命名规范为:XxxxxTest;
JUni t单元测试的方法,必须声明为 public void 且不能有参数
三、XML
可扩展标记语言(Extensible Markup Language)
(1)创建一个XML类型的文件,要求文件的后缀必须使用xml,如 hello_world.xml
<?xml version="1.0" encoding="UTF-8" ?>
- version:该属性是必须存在的
- encoding:该属性不是必须的
- standalone: 该属性不是必须的,描述XML文件是否依赖其他的xml文件,取值为yes/no
(3)编写根标签 (必须存在一个根标签,有且只能有一个) 标签必须成对出现
(4)特殊的标签可以不成对,但是必须有结束标记 <address/>
(5)标签中可以定义属性,属性和标签名空格隔开,属性值必须用引号引起来 <student id="1"> </student>
看xml文件中使用了哪些元素,<!ELEMENT> 可以定义元素
- 本地引入:<!DOCTYPE 根元素名称 SYSTEM 'DTD文件的路径'>
- 内部引入:<!DOCTYPE 根元素名称 [ dtd文件内容 ]>
- 网络引入:<!DOCTYPE 根元素的名称 PUBLIC "DTD文件名称" "DTD文档的URL">
- schema约束文件也是一个xml文件,符合xml的语法,这个文件的后缀名.xsd
- 一个xml中可以引用多个schema约束文件,多个schema使用名称空间区分(名称空间类似于java包名)
- dtd里面元素类型的取值比较单一常见的是PCDATA类型,但是在schema里面可以支持很多个数据类型
- schema 语法更加的复杂
- schema 用来约束一个 XML 文件,schema 也被其他文件约束
- 创建一个文件,这个文件的后缀名为.xsd
- 定义文档声明
- schema文件的根标签为: <schema>
- 在<schema>中定义属性:xmlns=http://www.w3.org/2001/XMLSchema
- 在<schema>中定义属性:targetNamespace = 唯一的url地址,指定当前这个schema文件的名称空间
- 在<schema>中定义属性:elementFormDefault="qualified",表示当前schema文件是一个质量良好的文件
- 通过element定义元素
- 判断当前元素是简单元素还是复杂元素
<students xmlns:xsi="http://www.o3.org/2001/XMLSchema-instance"xmlns="http://wwww.aaa.com"xsi:schemaLocation="http://wwww.aaa.com stu.xsd"
></students>
4、XML 解析
(1)SAX 解析: 不会把整体的xml文件都加载到内存,而是从上往下逐行进行扫描
缺点:只能读取,不能添加,不能删除
优点:因为他是逐行扫描不需要把整体的xmi文件都加载到内存,所以他可以解析比较大的xml文件
(2)DOM 解析: 会把整体的xml文件都加载到内存,形成树形结构,通过这个树形结构去解析xml文件
优点:可以读取,可以添加,可以删除
缺点:需要xml文件全部加载到内存,所以不能解析非常大的xml文件
常用 Dom4j 进行解析
四、注解
1、简介
注解的主要作用是对程序进行标注
注释是给人看的,但注解是给虚拟机看的
注解可以给类或方法增加额外的信息
编译器或JVM可以根据注解来完成对应功能
2、常见注解
@Override:表示方法的重写
@Deprecated:表示修饰的方法已过时
@SuppressWarnings("all"):压制警告
3、自定义注解
一般和反射一起使用,单独存在意义不大
public @interface 注解名称 {public 属性类型 属性名() default 默认值;
}public @interface myAnno {String show() default "show...";
}
属性的类型:基本数据类型、String、字节码对象、注解、枚举、以上类型的一维数组
注意事项
- 在使用注解时, 如果注解的属性没有给出默认值,需要手动给出
- @Anno(name="张三")
- 如果数组中只有一个属性值,在使用时{}是可以省略的
- 定义注解中如果有多个属性没有赋值,使用时需要全部赋值
- 如果只有一个属性名字为value没有赋值,使用时直接给出值,不需要写属性名
4、元注解
用在注解上的注解
(1)@Target: 用来标识注解使用的位置
如果没有使用该注解标识,则自定义的注解可以使用在任意位置
可使用的值定义在 ElementType 枚举类中,常用值如下
- TYPE 类,接口
- FIELD 成员变量
- METHOD 成员方法
- PARAMETER 方法参数
- CONSTRUCTOR 构造方法
- LOCAL_VARIABLE 局部变量
(2)@Retention:用来标识注解的生命周期(有效范围)
可使用的值定义在 RetentionPolicy 枚举类中,常用值如下
- SOURCE:注解只作用在源码阶段,生成的字节码文件中不存在
- CLASS:注解作用在源码阶段,字节码文件阶段,运行阶段不存在,默认值
- RUNTIME:注解作用在源码阶段,字节码文件阶段,运行阶段