71、注解
1、 Java 中 @Override 注解是用来指定方法重写的,只能修饰方法并且只能用于方法重写,不能修饰其它的元素。它可以强制一个子类必须重写父类方法或者实现接口的方法。
2、 Java 中 @Deprecated 可以用来注解类、接口、成员方法和成员变量等,用于表示某个元素(类、方法等)已过时。当其他程序使用已过时的元素时,编译器将会给出警告。
3、 Java 中的 @SuppressWarnings 注解指示被该注解修饰的程序元素(以及该程序元素中的所有子元素)取消显示指定的编译器警告,且会一直作用于该程序元素的所有子元素。
4、 在学习 Lambda 表达式时,我们提到如果接口中只有一个抽象方法(可以包含多个默认方法或多个 static 方法),那么该接口就是函数式接口。@FunctionalInterface 就是用来指定某个接口必须是函数式接口,所以 @FunInterface 只能修饰接口,不能修饰其它程序元素。
72、元注解
元注解是负责对其它注解进行说明的注解,自定义注解时可以使用元注解。Java 5 定义了 4 个注解,分别是 @Documented、@Target、@Retention 和 @Inherited。Java 8 又增加了 @Repeatable 和 @Native 两个注解。这些注解都可以在 java.lang.annotation 包中找到
1、@Documented 是一个标记注解,没有成员变量。用 @Documented 注解修饰的注解类会被 JavaDoc 工具提取成文档。默认情况下,JavaDoc 是不包括注解的,但如果声明注解时指定了 @Documented,就会被 JavaDoc 之类的工具处理,所以注解类型信息就会被包括在生成的帮助文档中。
2、 @Target 注解用来指定一个注解的使用范围,即被 @Target 修饰的注解可以用在什么地方。
3、 @Retention 用于描述注解的生命周期,也就是该注解被保留的时间长短。@Retention 注解中的成员变量(value)用来设置保留策略,value 是 java.lang.annotation.RetentionPolicy 枚举类型,RetentionPolicy 有 3 个枚举常量,如下所示。
**SOURCE:**在源文件中有效(即源文件保留)
**CLASS:**在 class 文件中有效(即 class 保留)
**RUNTIME:**在运行时有效(即运行时保留)
4、@Repeatable 注解是 Java 8 新增加的,它允许在相同的程序元素中重复注解,在需要对同一种注解多次使用时,往往需要借助 @Repeatable 注解。Java 8 版本以前,同一个程序元素前最多只能有一个相同类型的注解,如果需要在同一个元素前使用多个相同类型的注解,则必须使用注解“容器”。
5、声明自定义注解使用 @interface 关键字(interface 关键字前加 @ 符号)实现。
73、向量
// 创建默认大小的向量(10)
Vector v = new Vector();
// 在此向量的指定位置插入指定的元素。
v.add(0, "张三");
// 插入元素
v.add("大锤");
// 将指定的组件添加到此向量的末尾,将其大小增加 1。
v.addElement(new Date());
System.out.println(v);
// 返回此向量的当前容量。
System.out.println(v.capacity());
// 从此向量中移除所有元素。
// v.clear();
// 如果此向量包含指定的元素,则返回 true。
System.out.println(v.contains("大锤"));
// 返回向量中指定位置的元素
System.out.println(v.get(2));
// 返回此向量中的组件数
System.out.println(v.size());
74、栈
//创建栈对象,栈的特点:先进后出
Stack s = new Stack();
//往栈当中存放数据,压栈
s.push("阿龙");
s.push("阿鸡");
s.push("阿狗");
s.push("阿猫");
//查看堆栈顶部的对象,但不从堆栈中移除它
//获取栈的大小
System.out.println(s.size());
System.out.println(s.pop());
//判断栈是否为空
System.out.println(s.empty());
//取元素(出栈或者弹栈)
75、哈希表
//创建hashtable对象
Hashtable<String,HashMap<String,String>> table = new Hashtable<>();
HashMap<String,String> map = new HashMap<>();
map.put("阿达", "ad");
//添加元素
table.put("阿达",map);
//获取哈希表的大小
System.out.println(table.size());
//判断哈希表是否为空
System.out.println(table.isEmpty());
//获取指定key的值
System.out.println(table.get("阿达"));
76、队列以及双端队列
/**
* queue队列的特点:
* 先进先出(单项队列)
*
*常用方法:
* 添加元素:offer()
* 出队元素:poll()
* 查看对头元素peek()
*/
//创建queue对象
Queue<String> queue = new LinkedList<>();
//获取队列的大小
int size = queue.size();
System.out.println(size);
//元素入队
queue.offer("阿龙");
queue.offer("阿猫");
queue.offer("阿狗");
//查看队头元素
System.out.println("对头元素为:" + queue.peek());
//元素出队
for (int i = 0; i < 3; i++) {
String poll = queue.poll();
System.out.println(poll);
size = queue.size();
System.out.println(size);
}
/**
* 双端队列
* java.util.Deque接口
* Deque接口继承Queue接口,双端队列是指两端都可以进出的队列
* 常用的实现类:linkedlist
*/
import java.util.Deque;
import java.util.LinkedList;
public class DequeDemo01 {
public static void main(String[] args) {
//创建双端队列
Deque<String> dq = new LinkedList<>();
//将元素添加到队列的末尾
dq.offer("阿龙");
dq.offer("阿猫");
dq.offer("阿狗");
System.out.println(dq);
//在此queue的最前面插入指定的元素
dq.offerFirst("九九");
//在此queue的末尾插入指定的元素
dq.offerLast("卡卡");
//从队首取元素
System.out.println(dq.pollFirst());
//从队尾取元素
System.out.println(dq.pollLast());
77、Properties表
/**
* 将文件写入到文件当中
*/
import java.io.*;
import java.util.Properties;
public class Demo01 {
public static void main(String[] args) throws Exception {
//创建properties对象
Properties p = new Properties();
//创建文件字节流对象
FileOutputStream fow = new FileOutputStream("./dir/p2.properties");
//创建转换流对象
OutputStreamWriter osw = new OutputStreamWriter(fow,"utf-8");
//定义换成字符流
BufferedWriter bw = new BufferedWriter(osw);
p.setProperty("driver","com.jbda.driver.Driver");
p.setProperty("dc","我是阿龙");
//创建字符串输出流对象
PrintWriter w = new PrintWriter(bw,true);
/**
* 以适合使用load(IputStream)方法加载到Peoperties表中的格式
* 将此Properties表中的属性列表(键和元素对)写入输出流
*/
p.store(w,"自定义properties文件数据");
}
}