知识大全 “类”常数分组
Posted 常数
篇首语:什么是知识?它不是别的,是记录下来的经验。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 “类”常数分组相关的知识,希望对你有一定的参考价值。
由于置入一个接口的所有字段都自动具有static和final属性 所以接口是对常数值进行分组的一个好工具 它具有与C或C++的enum非常相似的效果 如下例所示 //: Months java // Using interfaces to create groups of constants package c ; public interface Months int JANUARY = FEBRUARY = MARCH = APRIL = MAY = JUNE = JULY = AUGUST = SEPTEMBER = OCTOBER = NOVEMBER = DECEMBER = ; ///:~ 注意根据Java命名规则 拥有固定标识符的static final基本数据类型(亦即编译期常数)都全部采用大写字母(用下划线分隔单个标识符里的多个单词) 接口中的字段会自动具备public属性 所以没必要专门指定 现在 通过导入c *或c Months 我们可以从包的外部使用常数——就象对其他任何包进行的操作那样 此外 也可以用类似Months JANUARY的表达式对值进行引用 当然 我们获得的只是一个int 所以不象C++的enum那样拥有额外的类型安全性 但与将数字强行编码(硬编码)到自己的程序中相比 这种(常用的)技术无疑已经是一个巨大的进步 我们通常把 硬编码 数字的行为称为 魔术数字 它产生的代码是非常难以维护的 如确实不想放弃额外的类型安全性 可构建象下面这样的一个类(注释①) //: Month java // A more robust enumeration system package c ; public final class Month private String name; private Month (String nm) name = nm; public String toString() return name; public final static Month JAN = new Month ( January ) FEB = new Month ( February ) MAR = new Month ( March ) APR = new Month ( April ) MAY = new Month ( May ) JUN = new Month ( June ) JUL = new Month ( July ) AUG = new Month ( August ) SEP = new Month ( September ) OCT = new Month ( October ) NOV = new Month ( November ) DEC = new Month ( December ); public final static Month [] month = JAN JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC ; public static void main(String[] args) Month m = Month JAN; System out println(m); m = Month month[ ]; System out println(m); System out println(m == Month DEC); System out println(m equals(Month DEC)); ///:~ ① 是Rich Hoffarth的一封E mail触发了我这样编写程序的灵感 这个类叫作Month 因为标准Java库里已经有一个Month 它是一个final类 并含有一个private构建器 所以没有人能从它继承 或制作它的一个实例 唯一的实例就是那些final static对象 它们是在类本身内部创建的 包括 JAN FEB MAR等等 这些对象也在month数组中使用 后者让我们能够按数字挑选月份 而不是按名字(注意数组中提供了一个多余的JAN 使偏移量增加了 也使December确实成为 月) 在main()中 我们可注意到类型的安全性 m是一个Month 对象 所以只能将其分配给Month 在前面的Months java例子中 只提供了int值 所以本来想用来代表一个月份的int变量可能实际获得一个整数值 那样做可能不十分安全 这儿介绍的方法也允许我们交换使用==或者equals() 就象main()尾部展示的那样 cha138/Article/program/Java/hx/201311/26405相关参考