- 浏览: 187268 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (83)
- J2EE/Core Java (24)
- J2EE/Portal (2)
- J2EE/UI (4)
- J2EE/ATG (1)
- J2EE/Report (1)
- J2EE/Web Service/Rest API (2)
- Design Pattern (2)
- Arithmetic (4)
- Linux (12)
- Ruby&Rails (17)
- Database (5)
- J2EE/Payment (1)
- J2EE/JVM (1)
- Encryption/Decryption (3)
- J2EE/Multi Threading (4)
- SQL (1)
- https://community.teamviewer.com/t5/Knowledge-Base/Where-can-I-download-older-TeamViewer-versions-nbsp/ta-p/7729 (0)
最新评论
把常量定义在接口里与类里都能通过编译,那2者到底有什么区别呢?那个更合理?
1. 常量接口
存在问题:
1) 无法限制开发员继承/实现接口.
2) 开发员能够在子接口里继续添加常量.而这些常量可能得不到祖先层的支持.
3) 常量作为参数时,是String,int等弱类型,开发员可以传入没有在常量接口里定义的值,这个问题无法通过编译器发现.
4) 由于开发员可以直接写常量值, 所以不能用==对比,只能用equals对比,不能优化性能
5) 开发员在没有参考资料时,不可能知道某个int型的参数到底应该赋什么内容.
6) 编译时,是直接把常量的值编译到类的二进制代码里,常量的值在升级中变化后,需要重新编译所有引用常量的类,因为里面存的是旧值.
2. 常量类
常量类可以设置构造函数为private,从而限制继承,也就没有继续添加常量的问题了.
但是其他问题与常量接口一样无法解决
3. 枚举常量类
解决了以上所有问题,主要体现在:
1) 私有构造函数,避免被继承和扩展.
2) 定义方法的参数时,必须用枚举常量类类型,如上面的EnumClassA类型,这样就转变成了强类型,不会出现弱类型引起的问题.
3) 常量值地址唯一,可以用==直接对比,性能会有提高.
4) 开发员可以根据该参数类型打开对应的类,从而找到定义的常量.
5) 编译时,没有把常量值编译到代码里,即使常量的值发生变化也不会影响引用常量的类.
4. enum类型
这是JDK1.5引入的,其实就是枚举常量类的代码封装简化而已.
查看enum反编译后的代码与枚举常量类的结构非常相似.
这可能是因为java的设计者一开始觉得enum与OO思想不符,所以没有提供支持,但是随着常量接口的滥用和枚举常量类方案的出现,才在JDK1.5里增加了enum.
原文地址:http://blog.csdn.net/jxc/archive/2009/03/18/4001397.aspx
1. 常量接口
public interface ConstInterfaceA { public static final String CONST_A = "aa"; public static final String CONST_C = "ac"; }
存在问题:
1) 无法限制开发员继承/实现接口.
2) 开发员能够在子接口里继续添加常量.而这些常量可能得不到祖先层的支持.
3) 常量作为参数时,是String,int等弱类型,开发员可以传入没有在常量接口里定义的值,这个问题无法通过编译器发现.
4) 由于开发员可以直接写常量值, 所以不能用==对比,只能用equals对比,不能优化性能
5) 开发员在没有参考资料时,不可能知道某个int型的参数到底应该赋什么内容.
6) 编译时,是直接把常量的值编译到类的二进制代码里,常量的值在升级中变化后,需要重新编译所有引用常量的类,因为里面存的是旧值.
2. 常量类
public class ConstClassA { public static final String CONST_A = "aa"; public static final String CONST_C = "ac"; private ConstClassA() { } }
常量类可以设置构造函数为private,从而限制继承,也就没有继续添加常量的问题了.
但是其他问题与常量接口一样无法解决
3. 枚举常量类
public class EnumClassA { private String name; private EnumClassA(String name) { this.name = name; } public static final EnumClassA CONST_A = new EnumClassA("aa"); public static final EnumClassA CONST_C = new EnumClassA("ac"); }
解决了以上所有问题,主要体现在:
1) 私有构造函数,避免被继承和扩展.
2) 定义方法的参数时,必须用枚举常量类类型,如上面的EnumClassA类型,这样就转变成了强类型,不会出现弱类型引起的问题.
3) 常量值地址唯一,可以用==直接对比,性能会有提高.
4) 开发员可以根据该参数类型打开对应的类,从而找到定义的常量.
5) 编译时,没有把常量值编译到代码里,即使常量的值发生变化也不会影响引用常量的类.
4. enum类型
public static enum Grade { A(4), B(3), C(2), D(1), F(0); private int points; Grade(int points) { this.points = points; } int getPoints() { return points; } };
这是JDK1.5引入的,其实就是枚举常量类的代码封装简化而已.
查看enum反编译后的代码与枚举常量类的结构非常相似.
这可能是因为java的设计者一开始觉得enum与OO思想不符,所以没有提供支持,但是随着常量接口的滥用和枚举常量类方案的出现,才在JDK1.5里增加了enum.
原文地址:http://blog.csdn.net/jxc/archive/2009/03/18/4001397.aspx
发表评论
-
Start tomcat with port 80 without Linux root user-Use iptables mapping
2016-05-25 17:39 830引用In linux system. only root us ... -
Format XML in JAVA
2016-01-11 12:23 601public static String format ... -
HttpURLConnection下载文件
2015-08-07 11:25 792public class HttpDownloadUtilit ... -
Ehcache RMI Replicated Cluster(RMI集群)
2013-04-25 23:39 1067引用本文是ehcache RMI集群的例子,导入附件中的jav ... -
Integrete unitils for database(dao) testing
2013-02-01 18:39 1691引用Database testing Unit tests f ... -
JAXB入门
2012-10-16 11:59 785引用jaxb是一个读写xml的工具,还可以提供验证,不需要额外 ... -
Freemarker使用入门
2012-10-16 11:54 1017引用freemarker是一种模板标记工具,可以做页面静态化, ... -
perforce java api使用
2012-10-16 11:43 1253引用perforce是种版本管理软件,提供啦完整的java a ... -
XPath 入门
2012-10-16 11:29 879引用xpath可以快速定位获取XML文件中指定属性和值,jdk ... -
Java File Diff-diffutils
2012-09-27 17:35 74441. Maven Dependency <depende ... -
XSD 入门使用
2012-09-18 23:20 774<?xml version="1.0" ... -
nexus-2.1.1安装及使用入门
2012-08-13 22:52 14441. 安装 地址http://www.sonatype.org ... -
File Demo
2012-06-25 22:55 1307package org.springside.examples ... -
Java 访问sharepoint webservice(NTLM & SSL)
2012-06-12 09:47 3771引用遇到需要使用java访问微软的sharepoint的web ... -
Selenium Web Driver入门
2012-05-27 23:17 58351 What is Selenium? 引用Selenium ... -
HttpClient4.1.2 & HtmlUnit2.9 处理文件下载
2012-01-09 18:18 1024TestCode import java.io.Fi ... -
HttpClient4.1.2 & HtmlUnit2.9 NTLM 验证 和 Httpclient4.1.2 https/SSL
2012-01-09 18:13 15941. HttpClient4.1.2 & HtmlUn ... -
HttpClient4登陆ITeye
2012-01-08 23:33 1895import java.io.IOException; im ... -
Spring2集成测试
2011-08-25 22:21 761Spring2测试类继承层次 集成测试例子 public ... -
Learning EasyMock3.0 By Official Example
2011-08-24 16:48 1375Maven Installation+ add followi ...
相关推荐
使用类常量方式实现PHP枚举
易语言C枚举常量转换源码,C枚举常量转换,报错
包含了关于枚举类的应用,以及枚举类和接口的组合应用,扩展映射关系。很有用的工具类。
Java1.5提供了关键字enum,能够通过该关键字方便得定义自己须要的枚举类型,比方 enum Season { SPRING, SUMMER, AUTUMN, WINTER } 定义了一个季节枚举类型。 在本例中,对于Season.SPRING这个...
jdk1.5以上版本中新增加的特性描述,带有代码例子让你很清晰的明白jdk的 常量 、枚举、 for each、反射等各种新的特性,相信需要的你,一定满足。
C枚举常量转换易语言源码,源码调用了玉米花香-词法分析模块.ec,是易语言的初级应用。
Excel VBA 常用枚举常量列表对应的数字,可以帮助开发者更快更准确更高效的EXCEL开发与实例。是非常有价值的文档。希望对你有用。
现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。 public enum Color { RED, GREEN, BLANK, YELLOW } 用法二:switch JDK1.6之前的switch语句只支持int,char,...
C枚举常量转换.rar
集成调试平台,支持类结构/jar结构预览、支持方法调试和监听、支持修改类字段(变量、常量、枚举)等。前端功能包括:文章列表、文章类别、站长/博主信息、最新/最热文章、分页、友情链接、文章详情等。后台功能包括:...
ThinkPHP系统常量,好东西就是拿出来分享。
今天小编就为大家分享一篇关于举例说明易语言中枚举常量的使用方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
在程序运行的过程中始终固定不变的量称为常量。由于在程序设计和开发时经常会反复地运用一些常数,而且它们代表的含义有时候非常难记,所以每次都需要去核对,如果定义了常量将使之简单化,则可提高代码的可读性及可...
易语言C枚举常量转换易语言源码.rar 易语言C枚举常量转换易语言源码.rar 易语言C枚举常量转换易语言源码.rar 易语言C枚举常量转换易语言源码.rar 易语言C枚举常量转换易语言源码.rar 易语言C枚举常量转换易语言...
易语言源码C枚举常量转换易语言源码.rar 易语言源码C枚举常量转换易语言源码.rar 易语言源码C枚举常量转换易语言源码.rar 易语言源码C枚举常量转换易语言源码.rar 易语言源码C枚举常量转换易语言源码.rar ...
前些时间。需要在LotusScript写Excel中录制的宏。但是,里面的参数在LotusScript中无法使用。后来,就从网上找了这些参数对应的数字。这样代码就可以使用了。
2.当需要定义一组常量时,强烈建议使用枚举类。 3.如果枚举类中只有一个对象,则可以作为单例模式的实现方式。 二、如何定义枚举类 方式一:Jdk5.0之前,自定义枚举类 方式二:jdk5.0之后,可以使用enum关键字定义...
C枚举常量转换易语言源码.rar
1、用enum关键字说明常量(即说明枚举常量)有以下几点好处: (1) 使程序更容易维护和直观。例如,下面定义的枚举是描述UART支持的传输bit位数,从枚举类型的定义就可以知道UART模块提供的传输bit的几种模式。 ...
Robot键盘常量java.awt.event.KeyEvent。KeyEvent全部键盘按键映射整理KeyEvent枚举类