一、Comparable接口

package java.lang;

import java.util.*;

public interface Comparable<T> {
/**
* int x = a.compareTo(b)
* a > b, x > 0
* a == b, x = 0
* a < b, x < 0
*/
public int compareTo(T o);
}

该接口主要用于排序

二、Serializable 与 Externalizable 接口

package java.io;

/**
* 主要用于非transient关键词修饰的属性序列化
*/
public interface Serializable {
}

Serializable接口的实现类主要配合 SerialVersionUID 属性、 transient关键词使用。

package java.io;

import java.io.ObjectOutput;
import java.io.ObjectInput; /**
* 使用Externalizable完成自定义的序列化工作
*/
public interface Externalizable extends java.io.Serializable { void writeExternal(ObjectOutput out) throws IOException; void readExternal(ObjectInput in) throws IOException, ClassNotFoundException;
}

Externalizable 的实现类必须有无参构造方法

三、java.util.Iterator 接口

package java.util;

import java.util.function.Consumer;

public interface Iterator<E> {

    /** 如果存在下一个元素,则返回true;否则返回false */
boolean hasNext(); /** 返回下一个元素 */
E next(); /** 将迭代器新返回的元素删除。 */
default void remove() {
throw new UnsupportedOperationException("remove");
} /** 使用Lambda表达式来遍历集合元素 */
default void forEachRemaining(Consumer<? super E> action) {
Objects.requireNonNull(action);
while (hasNext())
action.accept(next());
}
}

用于实现foreach。

四、Cloneable

package java.lang;

public interface Cloneable {
}

这个接口表示实现类允许clone(), 实现类必须重写clone()。

五、AutoCloseable

package java.lang;

public interface AutoCloseable {
/**
* 关闭资源
*/
void close() throws Exception;
}

在引入这个接口之前,对于一些不能被JVM控制的资源,我们需要利用代码进行手动关闭 xxx.close()。这一类代码繁琐枯燥,而且很容易忘记(尤其在多个资源需要关闭时,情况更加复杂)。

try{
Reader r = new BufferedReader(new FileReader(new Path("xxx")));
return r.readLine();
} finally {
r.close();
}

当实现了AutoCloseable,程序员可以不考虑关闭这一类流的操作,把注意力放在具体的业务上。

try-finally可以转化为Java7引入的新语法 try-with-resources。

try(Reader r = new BufferedReader(new FileReader(new Path("xxx")))) {
return r.readLine();
}

Java源码赏析(二)Java常见接口的更多相关文章

  1. Java源码赏析(三)初识 String 类

    由于String类比较复杂,现在采用多篇幅来讲述 这一期主要从String使用的关键字,实现的接口,属性以及覆盖的方法入手.省略了大部分的字符串操作,比如split().trim().replace( ...

  2. Java源码赏析(五)再识 String 类

    在 Java源码赏析(三)初识 String 类   中,我们已经大概理解了String的接口,接下来我们描述一下String的常用工具方法. /** * 为了精简的String结构,之前提到的方法省 ...

  3. Java源码赏析(六)Class<T> 类

    目的 Class 类是每一个程序员都必须了解的,也是使用反射机制的基础. 这篇文章将Class 类的公共方法大致介绍了一遍(省略了安全.枚举.断言.注解相关代码). 代码 package java.l ...

  4. 【java集合框架源码剖析系列】java源码剖析之java集合中的折半插入排序算法

    注:关于排序算法,博主写过[数据结构排序算法系列]数据结构八大排序算法,基本上把所有的排序算法都详细的讲解过,而之所以单独将java集合中的排序算法拿出来讲解,是因为在阿里巴巴内推面试的时候面试官问过 ...

  5. Java源码赏析(四)Java常见注解

    元注解 @Target :标识注解的目标,默认为所有 ElementType.TYPE(用于类) ElementType.FIELD(用于域,包括enum) ElementType.METHOD(用于 ...

  6. Java源码赏析(一)Object 类

    写这个系列的原因,其实网上已经有无数源码分析的文章了,多一篇不多,少一篇不少,但为什么还要写这部分文章呢?于私,其一,上班族已经很久没有打过完整的一整段有意义的话,算是锻炼个人的书写.总结能力,其二, ...

  7. Java 源码赏析 - java.lang - Void

    被人鄙视了,于是也来读读源码... package java.lang; /** * The Void class is an uninstantiable placeholder class to ...

  8. Java源码赏析(六)Java String 三顾

    在大致了解了String之后,可能有的读者发现了,我们并没有谈到CharSequence接口. 原因是在这一节,CharSequence要和StringBuilder(Java1.5).StringB ...

  9. 从Java源码到Java字节码

    Java最主流的源码编译器,javac,基本上不对代码做优化,只会做少量由Java语言规范要求或推荐的优化:也不做任何混淆,包括名字混淆或控制流混淆这些都不做.这使得javac生成的代码能很好的维持与 ...

随机推荐

  1. 你真的了解 get 和 post 的区别么

    get 和 post 是两种最常用的 HTTP 请求方法,要说它们两个的区别,相必接触过 WEB 开发的人都能够说出一二. 如果我问你这个问题,你的内心充满了自信和喜悦.你可能已经写过无数个 GET ...

  2. 个人项目作业WC(JAVA)

    GitHub地址:https://github.com/1666403186/WC 一.题目描述 Word Count1. 实现一个简单而完整的软件工具(源程序特征统计程序).2. 进行单元测试.回归 ...

  3. 使用dd命令快速生成大文件或者小文件

    使用dd命令快速生成大文件或者小文件 需求场景: 在程序的测试中有些场景需要大量的小文件或者几个比较大的文件,而在我们的文件系统里一时无法找到那么多或者那么大的文件,此时linux的dd命令就能快速的 ...

  4. 牛客网PAT练兵场-锤子剪刀布

    题目地址:https://www.nowcoder.com/questionTerminal/79db907555c24b15a9c73f7f7d0e2471 题解:无 /** * *作者:Ycute ...

  5. Java数据结构——图的基本理论及简单实现

    1. 图的定义图(graph)是由一些点(vertex)和这些点之间的连线(edge)所组成的:其中,点通常被成为"顶点(vertex)",而点与点之间的连线则被成为"边 ...

  6. GPU虚拟机创建时间深度优化

    ​桔妹导读:GPU虚拟机实例创建速度慢是公有云面临的普遍问题,由于通常情况下创建虚拟机属于低频操作而未引起业界的重视,实际生产中还是存在对GPU实例创建时间有苛刻要求的业务场景.本文将介绍滴滴云在解决 ...

  7. PyTorch入门-CIFAR10图像分类

    CIFAR10数据集下载 CIFAR10数据集包含10个类别,图像尺寸为 3×32×32 官方下载地址很慢,这里给一个百度云: https://pan.baidu.com/s/1oTvW8wNa-VO ...

  8. Apache Pulsar 社区周报:08-15 ~ 08-21

    关于 Apache Pulsar Apache Pulsar 是 Apache 软件基金会顶级项目,是下一代云原生分布式消息流平台,集消息.存储.轻量化函数式计算为一体,采用计算与存储分离架构设计,支 ...

  9. lombok配置

    lombok在springboot中无需配置即可在控制台输出. 一般使用backlog.xml作为配置文件. 在application中指定backlog位置 不做任何配置时候,logback.xml ...

  10. HDU-1754-I Hate It(单点更新+区间查询)

    很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少. 这让很多学生很反感. 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问.当然,老师有 ...