Java中的注解、数据结构、XML

# 注解

# 一、注解简介
​        从 Java 5 版本之后可以在源代码中嵌入一些补充信息,这种补充信息称为注解(Annotation),是 Java 平台中非常重要的一部分。注解都是 @ 符号开头的,例如我们在学习方法重写时使用过的 @Override 注解。同 Class 和 Interface 一样,注解也属于一种类型。
    注解并不能改变程序的运行结果,也不会影响程序运行的性能。有些注解可以在编译时给用户提示或警告,有的注解可以在运行时读写字节码文件信息。
注解常见的作用有以下几种:
​        1、生成帮助文档。这是最常见的,也是 Java 最早提供的注解。常用的有 @see、@param 和 @return 等;
​        2、跟踪代码依赖性,实现替代配置文件功能。比较常见的是 Spring 2.5 开始的基于注解配置。作用就是减少配置。现在的框架基本都使用了这种配置来减少配置文件的数量;
​        3、在编译时进行格式检查。如把 @Override 注解放在方法前,如果这个方法并不是重写了父类方法,则编译时就能检查出。\
# 二、@Override注解
​        Java 中 @Override 注解是用来指定方法重写的,只能修饰方法并且只能用于方法重写,不能修饰其它的元素。它可以强制一个子类必须重写父类方法或者实现接口的方法。
# 三、@Deprecated注解
​        Java 中 @Deprecated 可以用来注解类、接口、成员方法和成员变量等,用于表示某个元素(类、方
法等)已过时。当其他程序使用已过时的元素时,编译器将会给出警告。
# 四、@SuppressWarnings:抑制编译器警告
​        Java 中的 @SuppressWarnings 注解指示被该注解修饰的程序元素(以及该程序元素中的所有子元素)取消显示指定的编译器警告,且会一直作用于该程序元素的所有子元素。例如,使用 @SuppressWarnings 修饰某个类取消显示某个编译器警告,同时又修饰该类里的某个方法取消显示另一个编译器警告,那么该方法将会同时取消显示这两个编译器警告。
五、@SafeVarargs注解
       注意:@SafeVarargs注解不适用于非 static 或非 final 声明的方法,对于未声明为 static 或 final 的方法,如果要抑制 unchecked 警告,可以使用 @SuppressWarnings 注解。
# 六、@FunctionalInterface注解
​        在学习 Lambda 表达式时,我们提到如果接口中只有一个抽象方法(可以包含多个默认方法或多个 static 方法),那么该接口就是函数式接口。@FunctionalInterface 就是用来指定某个接口必须是函数
式接口,所以 @FunInterface 只能修饰接口,不能修饰其它程序元素。
# 七、Java 元注解作用及使用
​        元注解是负责对其它注解进行说明的注解,自定义注解时可以使用元注解。Java 5 定义了 4 个注解,分别是 @Documented、@Target、@Retention 和 @Inherited。Java 8 又增加了 @Repeatable 和 @Native 两个注解。这些注解都可以在 java.lang.annotation 包中找到
## 1、@Documented
​        @Documented 是一个标记注解,没有成员变量。用 @Documented 注解修饰的注解类会被 JavaDoc 工具提取成文档。默认情况下,JavaDoc 是不包括注解的,但如果声明注解时指定了 @Documented,就会被 JavaDoc 之类的工具处理,所以注解类型信息就会被包括在生成的帮助文档中
## 2、@Target
​        @Target 注解用来指定一个注解的使用范围,即被 @Target 修饰的注解可以用在什么地方。@Target 注解有一个成员变量(value)用来设置适用目标,value 是 java.lang.annotation.ElementType 枚举类型的数组,
## 3、@Retention
​        @Retention 用于描述注解的生命周期,也就是该注解被保留的时间长短。@Retention 注解中的成员变量(value)用来设置保留策略,value 是 java.lang.annotation.RetentionPolicy 枚举类型,RetentionPolicy 有 3 个枚举常量,如下所示。
​                **SOURCE:**在源文件中有效(即源文件保留)
​                **CLASS:**在 class 文件中有效(即 class 保留)
​                **RUNTIME:**在运行时有效(即运行时保留)
## 4、@Repeatable
​        @Repeatable 注解是 Java 8 新增加的,它允许在相同的程序元素中重复注解,在需要对同一种注解多次使用时,往往需要借助 @Repeatable 注解。Java 8 版本以前,同一个程序元素前最多只能有一个相同类型的注解,如果需要在同一个元素前使用多个相同类型的注解,则必须使用注解“容器”。
# 八、Java 自定义注解
​        声明自定义注解使用 @interface 关键字(interface 关键字前加 @ 符号)实现。定义注解与定义接口非常像,如下代码可定义一个简单形式的注解类型。
# Java 数据结构

Java工具包提供了强大的数据结构。在Java中的数据结构主要包括以下几种接口和类:
- 枚举(Enumeration)
- 位集合(BitSet)
- 向量(Vector)
- 栈(Stack)
- 字典(Dictionary)
- 哈希表(Hashtable)
- 属性(Properties)
# 一、枚举(Enumeration)
​        枚举(Enumeration)接口虽然它本身不属于数据结构,但它在其他数据结构的范畴里应用很广。 枚举(The Enumeration)接口定义了一种从数据结构中取回连续元素的方式。
# 二、位集合(BitSet)
​        位集合类实现了一组可以单独设置和清除的位或标志。该类在处理一组布尔值的时候非常有用,只需要给每个值赋值一"位",然后对位进行适当的设置或清除,就可以对布尔值进行操作了。
# 三、向量(Vector)
​        向量(Vector)类和传统数组非常相似,但是Vector的大小能根据需要动态的变化。和数组一样,Vector对象的元素也能通过索引访问。使用Vector类最主要的好处就是在创建对象的时候不必给对象指定大小,它的大小会根据需要动态的变化。
​        Vector 类实现了一个动态数组。和 ArrayList 很相似,但是两者是不同的:
​                1、Vector 是同步访问的。
​                2、Vector 包含了许多传统的方法,这些方法不属于集合框架。
# 四、栈(Stack)
​        栈(Stack)实现了一个**后进先出**(LIFO)的数据结构。可以把栈理解为对象的垂直分布的栈,当你添加一个新元素时,就将新元素放在其他元素的顶部。
​        栈是Vector的一个子类,它实现了一个标准的后进先出的栈。
​        堆栈只定义了默认构造函数,用来创建一个空栈。 堆栈除了包括由Vector定义的所有方法,也定义了自己的一些方法。
# 五、字典(Dictionary)
​        字典(Dictionary) 类是一个抽象类,它定义了键映射到值的数据结构。当想要通过特定的键而不是整数索引来访问数据的时候,这时候应该使用Dictionary。由于Dictionary类是抽象类,所以它只提供了键映射到值的数据结构,而没有提供特定的实现。
​        Dictionary 类是一个抽象类,用来存储键/值对,作用和Map类相似。
# 六、哈希表(Hashtable)
​        Hashtable类提供了一种在用户定义键结构的基础上来组织数据的手段。例如,在地址列表的哈希表中,你可以根据邮政编码作为键来存储和排序数据,而不是通过人名。哈希表键的具体含义完全取决于哈希表的使用情景和它包含的数据。
​        Hashtable是原始的java.util的一部分, 是一个Dictionary具体的实现 。然而,Java 2 重构的Hashtable实现了Map接口,因此,Hashtable现在集成到了集合框架中。它和HashMap类很相似,但是它支持同步。像HashMap一样,Hashtable在哈希表中存储键/值对。当使用一个哈希表,要指定用作键的对象,以及要链接到该键的值。然后,该键经过哈希处理,所得到的散列码被用作存储在该表中值的索引。
# 七、属性(Properties)
​        Properties 继承于 Hashtable.Properties 类表示了一个持久的属性集.属性列表中每个键及其对应值都是一个字符串。Properties 类被许多Java类使用。例如,在获取环境变量时它就作为System.getProperties()方法的返回值。
​        Properties 继承于 Hashtable。表示一个持久的属性集.属性列表中每个键及其对应值都是一个字符串。Properties 类被许多 Java 类使用。例如,在获取环境变量时它就作为 System.getProperties() 方法的返回值。Properties 定义如下实例变量.这个变量持有一个 Properties 对象相关的默认属性列表。
# 八、队列(Queue)
​        Queue是java中实现队列的接口,它总共只有6个方法,我们一般只用其中3个就可以了。Queue的实现类有LinkedList和PriorityQueue。最常用的实现类是LinkedList。
Queue的6个方法分类:
​        压入元素(添加):add()、offer()
​                相同:未超出容量,从队尾压入元素,返回压入的那个元素。
​                区别:在超出容量时,add()方法会对抛出异常,offer()返回false
​        弹出元素(删除):remove()、poll()
​                相同:容量大于0的时候,删除并返回队头被删除的那个元素。
​                区别:在容量为0的时候,remove()会抛出异常,poll()返回false
​        获取队头元素(不删除):element()、peek()
​                相同:容量大于0的时候,都返回队头元素。但是不删除。
​                区别:容量为0的时候,element()会抛出异常,peek()返回null。
​        队列除了基本的 Collection 操作外,还提供特有的插入、提取和检查操作(如上)。每个方法都存在两种形式:一种抛出异常(操作失败时),另一种返回一个特殊值(null 或 false,具体取决于操作)。插入操作的后一种形式是用于专门为有容量限制的 Queue 实现设计的;在大多数实现中,插入操作不会失败。

## 一、XML基础
### 1.1、XML是什么?
​        XML(可扩展标记语言)是一种很流行的简单的基于文本的语言来用作应用程序之间的通信模式。它被认为是传输标准装置和存储数据。JAVA提供了极好的支持和丰富的库来解析,修改或查询XML文档。
​        XML是一种简单的基于文本的语言,它被设计为储存和运输以纯文本格式的数据。它代表着可扩展标记语言。以下是一些XML的显着特征。
​                XML是一种标记语言。
​                XML是一种标记语言就像HTML一样。
​                XML标签不是像HTML那样预定义。
​                可以定义自己的标签,这就是为什么它被称为可扩展的语言。
​                XML标签被设计成自描述性的。
​                XML是W3C推荐用于数据存储和传输。
### 1.4、XML语法

​        1、声明:<?xml version="1.0" encoding="UTF-8"?>
​        2、根节点:必须只能有一个根节点
​        3、标签:标签必须有结束且区分大小写,标签必须顺序嵌套
​        4、属性:必须引号引起值
​        5、空格会被保留,HTML空格最多保留一个
​        6、命名规则:命名必须见名知意
             a)名字可包含字母、数字以及其他的字符 
             b)名字不能以数字或者标点符号开始
             c)名字不能以字符“xml”(或者XML、Xml)开始
​        7、名字不能包含空格
​        8、 不应在 XML 元素名称中使用 ":" ,这是由于它用于命名空间(namespaces)的保留字。
​        9、标签优先于属性。
​        10、XML 命名空间可提供避免元素命名冲突的方法。
​        11、CDATA:字符数据,<![CDATA[字符数据]]> ,字符数据不进行转义
​        12、实体:&实体;
### 1.5、Xml约束

#### 1.5.1、XML DTD 约束

​        DTD(DocType Definition 文档类型定义)的作用是定义 XML 文档的合法构建模块。它使用一系列的合法元素来定义文档结构。用于约定XML格式。

**1、DTD引用方式**
​        1.1、内部 <!DOCTYPE 根元素 [元素声明]>
#### 1.5.2、XML Schema 约束

​        XML Schema 是基于 XML 的 DTD 替代者。XML Schema 描述 XML 文档的结构。XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD)。
​        DTD不是通过XML语法定义文档结构, 不能定义数据类型和限制Schema通过XML语法定义文档结构,可以定义数据类型和限制

**约定XML格式**
        定义可出现在文档中的元素
        定义可出现在文档中的属性
        定义哪个元素是子元素
        定义子元素的次序
        定义子元素的数目
        定义元素是否为空,或者是否可包含文本
        定义元素和属性的数据类型
        定义元素和属性的默认值以及固定值
**1、为何使用Schema**
        XML Schema 是 DTD 的继任者
        XML Schema 可针对未来的需求进行扩展
        XML Schema 更完善,功能更强大
        XML Schema 基于 XML 编写
        XML Schema 支持数据类型和限制
        XML Schema 支持命名空间

**2、Schema引用方式**

```xml
<users xmlns="命名空间"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="命名空间 Schema位置">
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值