Java笔记

第十四周笔记
注解
一、注解简介
从 Java 5 版本之后可以在源代码中嵌入一些补充信息,这种补充信息称为注解(Annotation)。注解都是 @ 符号开头的,例如 @Override 注解。同 Class 和 Interface 一样,注解也属于一种类型。

Annotation 可以翻译为“注解”或“注释”,一般翻译为“注解”,因为“注释”一词已经用于说明“//”、“/*.../”和“/.../”等符号了,这里的“注释”是英文 Comment 翻译。

注解可以元数据这个词来描述,即一种描述数据的数据。所以可以说注解就是源代码的元数据。

       注解常见的作用有以下几种:
    1、生成帮助文档。这是最常见的,也是 Java 最早提供的注解。常用的有 @see、@param 和 @return 等;
    2、跟踪代码依赖性,实现替代配置文件功能。比较常见的是 Spring 2.5 开始的基于注解配置。作用就是减少配置。现在的框架基本都使用了这种配置来减少配置文件的数量;
    3、在编译时进行格式检查。如把 @Override 注解放在方法前,如果这个方法并不是重写了父类方法,则编译时就能检查出。
    提示:元注解就是负责注解其他的注解。
    基本注解包括:@Override、@Deprecated、@SuppressWarnings、@SafeVarargs 和 @FunctionalInterface。

二、@Override注解

Java 中 @Override 注解是用来指定方法重写的,只能修饰方法并且只能用于方法重写,不能修饰其它的元素。它可以强制一个子类必须重写父类方法或者实现接口的方法。

类型为 Person 的方法t0String()必须覆盖或实现超类型方法

三、@Deprecated注解
Java 中 @Deprecated 可以用来注解类、接口、成员方法和成员变量等,用于表示某个元素(类、方法等)已过时。当其他程序使用已过时的元素时,编译器将会给出警告。

@Deprecated 注解增加了以下两个属性: forRemoval:该 boolean 类型的属性指定该 API 在将来是否会被删除。 since:该 String 类型的属性指定该 API 从哪个版本被标记为过时。

四、@SuppressWarnings:抑制编译器警告
注解的使用有以下三种: 抑制单类型的警告:@SuppressWarnings("unchecked") 抑制多类型的警告:@SuppressWarnings("unchecked","rawtypes") 抑制所有类型的警告:@SuppressWarnings("unchecked")

五、Java 元注解作用及使用
1、@Target
@Target 注解用来指定一个注解的使用范围,即被 @Target 修饰的注解可以用在什么地方。@Target 注解有一个成员变量(value)用来设置适用目标,value 是 java.lang.annotation.ElementType 枚举类型的数组,下表为 ElementType 常用的枚举常量。

名称

说明

CONSTRUCTOR

用于构造方法

FIELD

用于成员变量(包括枚举常量)

LOCAL_VARIABLE

用于局部变量

METHOD

用于方法

PACKAGE

用于包

PARAMETER

用于类型参数(JDK 1.8新增)

TYPE

用于类、接口(包括注解类型)或 enum 声明

2、@Retention
@Retention 用于描述注解的生命周期,也就是该注解被保留的时间长短。@Retention 注解中的成员变量(value)用来设置保留策略,value 是 java.lang.annotation.RetentionPolicy 枚举类型,RetentionPolicy 有 3 个枚举常量,如下所示。 ​ SOURCE:在源文件中有效(即源文件保留) ​ CLASS:在 class 文件中有效(即 class 保留) ​ RUNTIME:在运行时有效(即运行时保留)

生命周期大小排序为 SOURCE < CLASS < RUNTIME,前者能使用的地方后者一定也能使用。

@Inherited 是一个标记注解,用来指定该注解可以被继承。使用 @Inherited 注解的 Class 类,表示这个注解可以被用于该Class 类的子类。就是说如果某个类使用了被 @Inherited 修饰的注解,则其子类将自动具有该注解。

六、Java 自定义注解
声明自定义注解使用 @interface 关键字(interface 关键字前加 @ 符号)实现。

定义注解和定义类相似,注解前面的访问修饰符和类一样有两种,分别是公有访问权限(public)和默认访问权限(默认不写)。一个源程序文件中可以声明多个注解,但只能有一个是公有访问权限的注解。且源程序文件命名和公有访问权限的注解名一致。

根据注解是否包含成员变量,可以分为如下两类。

标记注解:没有定义成员变量的注解类型被称为标记注解。这种注解仅利用自身的存在与否来提供信息,如前面介绍的 @Override、@Test 等都是标记注解。

元数据注解:包含成员变量的注解,因为它们可以接受更多的元数据,所以也被称为元数据注解。

Java 数据结构
Java工具包提供了强大的数据结构。在Java中的数据结构主要包括以下几种接口和类:

(1)枚举(Enumeration)

(2)位集合(BitSet)

(3)向量(Vector)

(4)栈(Stack)

(5)字典(Dictionary)

(6)哈希表(Hashtable)

(7)属性(Properties)

一、枚举(Enumeration)
枚举(Enumeration)接口虽然它本身不属于数据结构,但它在其他数据结构的范畴里应用很广。 枚举(The Enumeration)接口定义了一种从数据结构中取回连续元素的方式。

方法

方法描述

boolean hasMoreElements( )

测试此枚举是否包含更多的元素。

Object nextElement( )

如果此枚举对象至少还有一个可提供的元素,则返回此枚举的下一个元素。

二、位集合(BitSet)
位集合类实现了一组可以单独设置和清除的位或标志。

BitSet定义了两个构造方法。

第一个构造方法创建一个默认的对象:

BitSet()

第二个方法允许用户指定初始大小。所有位初始化为0。

BitSet(int size)

三、向量(Vector)

向量(Vector)类和传统数组非常相似,但是Vector的大小能根据需要动态的变化。

Vector 类实现了一个动态数组。和 ArrayList 很相似,但是两者是不同的: 1、Vector 是同步访问的。 2、Vector 包含了许多传统的方法,这些方法不属于集合框架。

ector 主要用在事先不知道数组的大小,或者只是需要一个可以改变大小的数组的情况。Vector 类支持 4 种构造方法。第一种构造方法创建一个默认的向量,默认大小为 10:

Vector()

第二种构造方法创建指定大小的向量。

Vector(int size)

第三种构造方法创建指定大小的向量,并且增量用 incr 指定。增量表示向量每次增加的元素数目。

Vector(int size,int incr)

第四种构造方法创建一个包含集合 c 元素的向量:

Vector(Collection c)

四、栈(Stack)

栈(Stack)实现了一个后进先出(LIFO)的数据结构。可以把栈理解为对象的垂直分布的栈,当你添加一个新元素时,就将新元素放在其他元素的顶部。

栈是Vector的一个子类,它实现了一个标准的后进先出的栈。

堆栈只定义了默认构造函数,用来创建一个空栈。 堆栈除了包括由Vector定义的所有方法,也定义了自己的一些方法。

Stack()

五、字典(Dictionary)
字典(Dictionary) 类是一个抽象类,它定义了键映射到值的数据结构。当想要通过特定的键而不是整数索引来访问数据的时候,这时候应该使用Dictionary。

Dictionary 类是一个抽象类,用来存储键/值对,作用和Map类相似。

六、哈希表(Hashtable)
Hashtable类提供了一种在用户定义键结构的基础上来组织数据的手段。

Hashtable定义了四个构造方法。第一个是默认构造方法:

Hashtable()

第二个构造函数创建指定大小的哈希表:

Hashtable(int size)

第三个构造方法创建了一个指定大小的哈希表,并且通过fillRatio指定填充比例。填充比例必须介于0.0和1.0之间,它决定了哈希表在重新调整大小之前的充满程度:

Hashtable(int size,float fillRatio)

第四个构造方法创建了一个以M中元素为初始化元素的哈希表。哈希表的容量被设置为M的两倍。

Hashtable(Map m)

七、属性(Properties)
Properties 继承于 Hashtable.Properties 类表示了一个持久的属性集.属性列表中每个键及其对应值都是一个字符串。Properties 类被许多Java类使用。

Properties 继承于 Hashtable。表示一个持久的属性集.属性列表中每个键及其对应值都是一个字符串。Properties 类被许多 Java 类使用。例如,在获取环境变量时它就作为 System.getProperties() 方法的返回值。Properties 定义如下实例变量.这个变量持有一个 Properties 对象相关的默认属性列表。

Properties defaults;

Properties类定义了两个构造方法. 第一个构造方法没有默认值。

Properties()

第二个构造方法使用propDefault 作为默认值。两种情况下,属性列表都为空:

Properties(Properties propDefault)

八、队列(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 实现设计的;在大多数实现中,插入操作不会失败。

抛出异常

返回特殊值

插入

add(e)

offer(e)

删除

remove()

poll()

检查

element()

peek()

offer,add 区别:

一些队列有大小限制,因此如果想在一个满的队列中加入一个新项,多出的项就会被拒绝。

这时新的 offer 方法就可以起作用了。它不是对调用 add() 方法抛出一个 unchecked 异常,而只是得到由 offer() 返回的 false。

poll,remove 区别:

remove() 和 poll() 方法都是从队列中删除第一个元素。remove() 的行为与 Collection 接口的版本相似, 但是新的 poll() 方法在用空集合调用时不是抛出异常,只是返回 null。因此新的方法更适合容易出现异常条件的情况。

peek,element区别:

element() 和 peek() 用于在队列的头部查询元素。与 remove() 方法类似,在队列为空时, element() 抛出一个异常,而 peek() 返回 null。
————————————————
版权声明:本文为CSDN博主「陈易奇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_68851097/article/details/128036193

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值