Java源码赏析(二)Java常见接口
一、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常见接口的更多相关文章
- Java源码赏析(三)初识 String 类
由于String类比较复杂,现在采用多篇幅来讲述 这一期主要从String使用的关键字,实现的接口,属性以及覆盖的方法入手.省略了大部分的字符串操作,比如split().trim().replace( ...
- Java源码赏析(五)再识 String 类
在 Java源码赏析(三)初识 String 类 中,我们已经大概理解了String的接口,接下来我们描述一下String的常用工具方法. /** * 为了精简的String结构,之前提到的方法省 ...
- Java源码赏析(六)Class<T> 类
目的 Class 类是每一个程序员都必须了解的,也是使用反射机制的基础. 这篇文章将Class 类的公共方法大致介绍了一遍(省略了安全.枚举.断言.注解相关代码). 代码 package java.l ...
- 【java集合框架源码剖析系列】java源码剖析之java集合中的折半插入排序算法
注:关于排序算法,博主写过[数据结构排序算法系列]数据结构八大排序算法,基本上把所有的排序算法都详细的讲解过,而之所以单独将java集合中的排序算法拿出来讲解,是因为在阿里巴巴内推面试的时候面试官问过 ...
- Java源码赏析(四)Java常见注解
元注解 @Target :标识注解的目标,默认为所有 ElementType.TYPE(用于类) ElementType.FIELD(用于域,包括enum) ElementType.METHOD(用于 ...
- Java源码赏析(一)Object 类
写这个系列的原因,其实网上已经有无数源码分析的文章了,多一篇不多,少一篇不少,但为什么还要写这部分文章呢?于私,其一,上班族已经很久没有打过完整的一整段有意义的话,算是锻炼个人的书写.总结能力,其二, ...
- Java 源码赏析 - java.lang - Void
被人鄙视了,于是也来读读源码... package java.lang; /** * The Void class is an uninstantiable placeholder class to ...
- Java源码赏析(六)Java String 三顾
在大致了解了String之后,可能有的读者发现了,我们并没有谈到CharSequence接口. 原因是在这一节,CharSequence要和StringBuilder(Java1.5).StringB ...
- 从Java源码到Java字节码
Java最主流的源码编译器,javac,基本上不对代码做优化,只会做少量由Java语言规范要求或推荐的优化:也不做任何混淆,包括名字混淆或控制流混淆这些都不做.这使得javac生成的代码能很好的维持与 ...
随机推荐
- 使用docker搭建redis集群
创建网卡 docker network create redis --subnet 172.20.0.0/ --gateway 172.20.0.1 通过脚本创建6个redis配置 for i in ...
- webstorm激活码2020--定期更新
2020年8月22日更新 一般错误关闭软件重填即可,key is invalid 错误需要恢复破解或者重装,才能使用 V8AF5QDT5R-eyJsaWNlbnNlSWQiOiJWOEFGNVFEVD ...
- seo快速排名利器之高权重二级域名
http://www.wocaoseo.com/thread-225-1-1.html 正规的白帽手法优化一个关键词一般都需要两三个月才能把词做上去,但是现在也有一批做网站优化的采取特殊 ...
- 3个必备cookie实用方法
今天跟大家介绍一下三种cookie的使用方法,selenium提供了我们add_cookie()方法来跳过验证码直接登录的方法.我们现在以博客园登录为例,都知道现在博客园登录要拼图验证. 先在网页打开 ...
- JS 替换日期的横杠为斜杠
例如1: <script type="text/javascript"> var dt = "2010-01-05"; ...
- 在JAVASCRIPT中,为什么document.getElementById不可以再全局(函数外)使用?
今天在使用JavaScript使用document.ElementById("ID")的时候,发现var x = document.getElementById("chi ...
- Android开发之http网络请求返回码问题集合。
HTTP状态码(HTTP Status Code) 一些常见的状态码为: 200 - 服务器成功返回网页 404 - 请求的网页不存在 503 - 服务不可用 一.1xx(临时响应) 表示临时响 ...
- Photogrammetry and Game
https://skulltheatre.wordpress.com/2013/02/11/photogrammetry-in-video-games-frequently-asked-questio ...
- 良许被百万大V安排得服服帖帖,还跟美女小姐姐合影了……
大家好,我是良许. 很多人问我说,良许,你在工作之余还花这么多时间精力去写公众号运营自媒体,到底是为了什么? 其实原因很简单,就是想做个副业,万一到了 35 岁真的失业了,我至少还有另外一份收入,不至 ...
- ASP.NET Core 进程内与进程外的性能对比
ASP.NET Core 进程内与进程外的性能对比 本文内容是<深入去浅出ASP.NET Core>提供的扩展内容,毕竟在书里说进程内外的性能说明对比,对于初学者而言,稍微复杂了点. 我在 ...