接口中的域

因为你放入接口中的任何域都自动是static和final的,所以接口就成为了一种很便捷的用来创建常量组的工具。在Java SE5之前,这是产生于C或C++中的enum具有相同效果的类型的唯一途径。因此在Java SE5之前的代码中,你可能会看到下面这样的代码:

package interfaces.classprocessor;

//Using interface to create groups of constants.
public interface Month {
    int JANUARY = 1, FEBRUARY = 2, MARCH = 3,
            APRIL = 4, MAY = 5, JUNE = 6, JULY = 7,
            AUGUST = 8, SEPTEMBER = 9, OCTOBER = 10,
            NOVEMBER = 11, DECEMBER = 12;
}

请注意,Java中标识具有常量初始值的static final时,会使用大写字母的风格(在一个标识符中用下划线来分割多个单词)。接口中的域自动是public的,所以没有显式的指明这一点。
有了JavaSE5,你就可以使用更强大而灵活的enum关键字了,因此使用接口来定义常量显得就没什么意义了。
在接口中定义的域不能是“空final”的,但是可以被非常量表达式初始化。例如:

package interfaces.classprocessor;

import java.util.Random;

public interface RandVals {
    Random rand = new Random(47);
    int RANDOM_INT = rand.nextInt();
    long RANDOM_LONG =rand.nextLong();
}

package interfaces.classprocessor;

import java.io.StringReader;

public class TestRandVals {
    public static void main(String[] args){
        System.out.println(RandVals.RANDOM_INT);
        System.out.println(RandVals.RANDOM_LONG);
    }
}

需要记住的一点是:这些域不是接口的一部分,他们的值被存储在该接口的静态存储区内。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 这篇文章是我之前翻阅了不少的书籍以及从网络上收集的一些资料的整理,因此不免有一些不准确的地方,同时不同JDK版本的...
    高广超阅读 15,737评论 3 83
  • 第6章类文件结构 6.1 概述 6.2 无关性基石 6.3 Class类文件的结构 java虚拟机不和包括java...
    kennethan阅读 973评论 0 2
  • 对象的创建与销毁 Item 1: 使用static工厂方法,而不是构造函数创建对象:仅仅是创建对象的方法,并非Fa...
    孙小磊阅读 2,031评论 0 3
  • 相关概念 面向对象的三个特征 封装,继承,多态.这个应该是人人皆知.有时候也会加上抽象. 多态的好处 允许不同类对...
    东经315度阅读 2,005评论 0 8
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 11,184评论 6 13