一、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. await,async 我要把它翻个底朝天,这回你总该明白了吧

    一:背景 1. 讲故事 await,async 这玩意的知识点已经被人说的烂的不能再烂了,看似没什么好说的,但我发现有不少文章还是从理论上讲述了这两个语法糖的用法,懂得还是懂,不懂的看似懂了过几天又不 ...

  2. new操作符创建对象的四个步骤

    new操作符创建对象可以分为以下四个步骤: 创建一个空对象 将所创建对象的__proto__属性值设为构造函数的prototype的属性值 执行构造函数中的代码,构造函数中的this指向该对象 返回对 ...

  3. 01.图文理解RDB和AOF两种持久化机制

    一.RDB和AOF两种持久化机制的介绍 RDB:对redis中的数据执行周期性的持久化,每隔一个时刻生成一个RDB文件,这个RDB文件包含这个时刻所有的数据. AOF:记录每条写入命令,以append ...

  4. Nodejs模块:querystring

    /** * @description querystring模块 */ const querystring = require('querystring'); const url = 'https:/ ...

  5. 《spring源码解读》 - IoC 之解析 import 标签

    在上一文中我们分析了注册 BeanDefinition 的过程,在其中我们了解到在解析跟节点和子节点时分两种情况,对于默认名称空间的标签我们通过 DefaultBeanDefinitionDocume ...

  6. IntPtr to bytes

    byte[] managedArray = new byte[size]; Marshal.Copy(pnt, managedArray, 0, size);

  7. Educational Codeforces Round 68 (Rated for Div. 2)-C-From S To T

    You are given three strings ss, tt and pp consisting of lowercase Latin letters. You may perform any ...

  8. Google Kick Start Round G 2019

    Google Kick Start Round G 2019 Book Reading 暴力,没啥好说的 #include<bits/stdc++.h> using namespace s ...

  9. vue require.context自动化导入

    语法: require.context(directory, useSubdirectories = false, regExp = /^.//); directory {String} -读取文件的 ...

  10. 关于Vuex的那些事儿

    vuex vuex是一个专门为Vue.js应用程序开发的状态管理模式,集中式的存储应用的所有组件的状态 以相应的规则保证状态以一种可预测的方式发生变化 单向数据流 State:驱动应用的数据源(单向数 ...