写在前面的话:读书破万卷,编码如有神
--------------------------------------------------------------------
这篇博客主要来谈谈"Java标记接口"的相关知识,主要内容包括:

1. 概述

2. Serializable

3. Cloneable

4. RandomAccess

--------------------------------------------------------------------
1、概述

  Java中常用的三个标记接口分别是:RandomAccess、Cloneable、Serializable,在查看JDK源码的时候,我们会经常发现这些接口的存在,它们不包含任何的方法,但是却广泛的存在,这种接口我们称之为标记接口(Mark Interface),这些接口我们不用实现任何的方法,它们的作用就是当某个类实现这个接口的时候,我们就认为这个类拥有了接口标记的某种功能。

2、Serializable

  java.io.Serializable这个接口是用来标记类是否支持序列化的,所谓的序列化就是将对象的各种信息转换成可以存储或者传输的一种形式。如果一个类没有实现该接口,却被拿去序列化的了,那么虚拟机就会抛出不支持序列化的异常。

3、Cloneable

Cloneable接口在深度拷贝的时候经常被用到,如下:

 public interface Cloneable{
}

它的作用是标记该对象是否拥有克隆的能力,可能这里会感觉有一点奇怪,我们都知道java.lang.Object类中本身已经有了一个方法:

 protected native Object clone()  throws CloneNotSupportedException

按道理来说的话每一个类都应该可以运行clone方法才对呀,为什么还需要这样一个标记接口呢?这样的好处是以接口的形式标记对象是否拥有某种能力。想一想,如果不通过标记接口的形式,我们在平时的开发中,会怎么去实现呢? 一般来说都是通过增加变量或者设置枚举来达到控制的效果,这样或许能解决问题,但是往往不能从面向对象的角度来优雅的解决问题。想想接口的作用是什么?接口就是用来标记某个类拥有了哪些功能、特性,而标记接口则是在面向对象的角度来看,更高级的一种抽象:即使你拥有这个方法也不行,因为你没有这个功能的标记接口,所以在调用clone方法的过程中,如果对象没有实现Cloneable接口,那么虚拟机就会抛出一个CloneNotSupportedException异常。

4、RandomAccess

 public interface RandomAccess(){
}

这个接口的作用是判断集合是否能快速访问,也就是通过索引下标能否快速的移动到对应的元素上。我们在使用某个集合类中,集合中的元素可以通过索引index下标快速的访问到,那么在该类的定义处,一般会有一个RandomAccess接口的实现标签

比如:java.util.ArrayList<E>有这个接口,java.util.LinkedList<E>就没有

 public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
{
//...
}
 public class LinkedList<E>
extends AbstractSequentialList<E>
implements List<E>, Deque<E>, Cloneable, java.io.Serializable
{
...
}

--------------------------------------------------------------------

--------------------------------------------------------------------

内功心法 -- Java标记接口的更多相关文章

  1. Java 标记接口

    没有声明或定义方法的接口称为标记接口(Mark Interface).某个类实现该接口时不需要重写方法,表明具有接口标记的功能.Java中常用的3个标记接口如下: 1 Serializable jav ...

  2. Java标记接口

    写在前面的话:读书破万卷,编码如有神--------------------------------------------------------------------这篇博客主要来谈谈" ...

  3. 为什么这些java接口没有抽象方法?浅谈Java标记接口

    在jdk的源码中,存在这样的一些接口,他们不包含任何的(抽象)方法,但是却广泛的存在. 这种接口我们称之为Mark Interface,也就是标记接口. 这些接口呢,我们不用来实现任何的方法,他们的作 ...

  4. 【java】[转]标记接口和标记注解注解

    Java中的标记接口和标记注解 http://blog.sina.com.cn/s/blog_7fdce91f0101d93m.html

  5. Effective Java 第三版——41.使用标记接口定义类型

    Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...

  6. Java的四个标记接口:Serializable、Cloneable、RandomAccess和Remote接口

    一.概述 标记接口是一些没有属性和方法的接口,也是一种设计思想.Java中的一个标记接口表示的的是一种类的特性,实现了该标记接口的类则具有该特性.如实现了Serializable接口的类,表示这个类的 ...

  7. java中的标记接口(标签接口)

    Java中的标记接口(Marker Interface),又称标签接口(Tag Interface),具体是不包含任何方法的接口.在Java中很容易找到标记接口的例子,比如JDK中的Serialzab ...

  8. Java中的标记接口(zz)

    1.什么是标记接口? Java中把没有定义任何方法和常量的接口称之为标记接口,我们经常使用的比较多的是“”Serializable“”,这个接口也是没有定义人任何方法和常量的. 2.标记接口的作用? ...

  9. 什么是Java Marker Interface(标记接口)

    先看看什么是标记接口?标记接口有时也叫标签接口(Tag interface),即接口不包含任何方法.在Java里很容易找到标记接口的例子,比如JDK里的Serializable接口就是一个标记接口. ...

随机推荐

  1. java 并发多线程异步

    http://www.cnblogs.com/dolphin0520/category/602384.html   并发 http://blog.csdn.net/column/details/con ...

  2. (中等) UESTC 94 Bracket Sequence,线段树+括号。

    There is a sequence of brackets, which supports two kinds of operations. we can choose a interval [l ...

  3. iOS-模糊查询

    http://blog.csdn.net/qq_33701006/article/details/51836914 版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[+]   前言 ...

  4. sql数据库中查询第几条到第几条的数据

    通用方法: select top 500 * from (select top 1000 * from UserSearchDatas order by ID) a order by ID desc ...

  5. iOS 获取本地文件的各种坑

    1.无论:TXT,EPUB,PDF等各种格式的文件,保存到本地的时候,最好都保存成字母或者数字,不要保存成汉字,否则,在取文件的时候,由于编码的问题,各种瓦特 2.如果文件名真的保存成了汉字,那么进行 ...

  6. ARM处理器简介

    参考: http://www.arm.com/zh/products/processors/instruction-set-architectures/index.php 1.ARM核演变图 2.AR ...

  7. Spring MVC之RequestMapping

    第一部分.概述 /**映射URL到控制器类或处理程序*/@Target({ElementType.METHOD, ElementType.TYPE})@Retention(RetentionPolic ...

  8. 安卓 ArrayList,LinkedList,HashSet,Vector,TreeSet的区别和使用

    java的集合就那么几种 总体为:List,Set,Map (都是接口由其子类去实现具体的方法) ArrayList,LinkedList,Vector都属于List List:元素是有顺序的,元素可 ...

  9. jQuery图片轮播的具体实现

    先看一看html代码,以及对应的css代码: <div id="scrollPics">    <ul class="slider" > ...

  10. Mybatis中常见的SQL DML

    1.sql select 查询 <select id="query" resultType="CfCurrbusilogEntity" > sele ...