- 浏览: 190771 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (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 880引用In linux system. only root us ... -
Format XML in JAVA
2016-01-11 12:23 630public static String format ... -
HttpURLConnection下载文件
2015-08-07 11:25 834public class HttpDownloadUtilit ... -
Ehcache RMI Replicated Cluster(RMI集群)
2013-04-25 23:39 1099引用本文是ehcache RMI集群的例子,导入附件中的jav ... -
Integrete unitils for database(dao) testing
2013-02-01 18:39 1724引用Database testing Unit tests f ... -
JAXB入门
2012-10-16 11:59 821引用jaxb是一个读写xml的工具,还可以提供验证,不需要额外 ... -
Freemarker使用入门
2012-10-16 11:54 1056引用freemarker是一种模板标记工具,可以做页面静态化, ... -
perforce java api使用
2012-10-16 11:43 1289引用perforce是种版本管理软件,提供啦完整的java a ... -
XPath 入门
2012-10-16 11:29 913引用xpath可以快速定位获取XML文件中指定属性和值,jdk ... -
Java File Diff-diffutils
2012-09-27 17:35 75461. Maven Dependency <depende ... -
XSD 入门使用
2012-09-18 23:20 815<?xml version="1.0" ... -
nexus-2.1.1安装及使用入门
2012-08-13 22:52 14911. 安装 地址http://www.sonatype.org ... -
File Demo
2012-06-25 22:55 1356package org.springside.examples ... -
Java 访问sharepoint webservice(NTLM & SSL)
2012-06-12 09:47 3807引用遇到需要使用java访问微软的sharepoint的web ... -
Selenium Web Driver入门
2012-05-27 23:17 58881 What is Selenium? 引用Selenium ... -
HttpClient4.1.2 & HtmlUnit2.9 处理文件下载
2012-01-09 18:18 1066TestCode import java.io.Fi ... -
HttpClient4.1.2 & HtmlUnit2.9 NTLM 验证 和 Httpclient4.1.2 https/SSL
2012-01-09 18:13 16411. HttpClient4.1.2 & HtmlUn ... -
HttpClient4登陆ITeye
2012-01-08 23:33 1929import java.io.IOException; im ... -
Spring2集成测试
2011-08-25 22:21 798Spring2测试类继承层次 集成测试例子 public ... -
Learning EasyMock3.0 By Official Example
2011-08-24 16:48 1417Maven Installation+ add followi ...
相关推荐
- **枚举的遍历**:无法直接遍历枚举类的所有常量,需要手动列出或使用反射类获取。 ### 5. PHP 8.1及以后的枚举支持 自PHP 8.1开始,PHP原生支持了枚举类型,提供了更好的类型安全和语言集成。例如: ```php ...
这个方法返回一个包含所有枚举常量的数组。 ```java Color[] colors = colorClass.getEnumConstants(); for (Color color : colors) { System.out.println(color); } ``` 3. **获取枚举实例名**:每个枚举实例都...
在易语言中,有时我们需要与使用其他编程语言(如C)编写的代码进行交互,这就涉及到不同语言间的数据类型转换,特别是枚举常量的转换。 枚举(Enumeration)是C语言中的一种复合数据类型,它允许我们定义一组具有...
本文将深入探讨其中的四个关键特性:常量、枚举、for each循环(也称为增强型for循环)以及反射。 首先,让我们来看看“常量”。在JDK 5.0之前,我们通常使用final关键字来创建不可变的变量,但这样的变量并非真正...
在这个主题中,我们将关注的是C语言中的枚举和如何将C语言中的枚举常量转换为易语言(Easy Language)的源码。 C语言中的枚举常量: 在C语言中,枚举常量是通过`enum`关键字定义的。例如: ```c enum Color { RED,...
包含了关于枚举类的应用,以及枚举类和接口的组合应用,扩展映射关系。很有用的工具类。
Java1.5提供了关键字enum,能够通过该关键字方便得定义自己须要的枚举类型,比方 enum Season { SPRING, SUMMER, AUTUMN, WINTER } 定义了一个季节枚举类型。 在本例中,对于Season.SPRING这个...
枚举常量列表对应着不同的数值,这些数值在程序中用于执行特定操作或表示特定状态。以下是一些Excel VBA中的常用枚举常量及其对应的数字: 1. **日期和时间相关的枚举**: - `xl24HourClock`:值为33,表示24小时...
通常,这样的枚举类可能会包含每个民族的枚举常量,可能还会包括一些方法来获取每个民族的英文名称或其他属性。例如: ```java public enum Nationality { HAN("汉族", "Han"), MAN("满族", "Manchu"), ZHANG(...
使用枚举可以提高代码的可读性,例如在交通灯的控制中,`TrafficLight`类的`change()`方法通过`switch`语句根据当前颜色改变信号。 3. 向枚举中添加方法: 枚举类型允许添加自定义方法。在上述例子中,`Color`枚举...
在易语言中,枚举常量(Enum Constants)是一种非常实用的编程工具,它允许程序员为整数值赋予有意义的名称,提高代码可读性和可维护性。枚举常量本质上是整数,但它们提供了更直观的标识,使得在编写程序时能够更...
本资源“C枚举常量转换.rar”可能包含了一个易语言(EasyLanguage)的源码示例,用于展示如何在C中进行枚举常量的转换。 在C语言中,枚举的定义如下: ```c enum Color { Red, Green, Blue }; ``` 在这个例子中,`...
在策略模式中,每种枚举常量代表一种策略,遍历这些枚举可以让我们动态地选择和切换策略。 总的来说,理解和熟练掌握枚举接口的遍历对于编写高质量的Java代码至关重要。通过枚举接口,我们可以实现更安全、可维护的...
6. **枚举常量遍历** 可以通过`values()`方法获取枚举类型的全部实例,并进行遍历: ```java for (Color color : Color.values()) { System.out.println(color); } ``` 7. **枚举常量比较** 枚举实例之间...
枚举类的定义通常以关键字`enum`开头,后跟枚举名,然后是大括号`{}`内的一系列枚举常量。例如,我们可以定义一个表示一周七天的枚举: ```java public enum WeekDay { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, ...
虽然枚举不能作为其他类的父类,但它们默认继承了 `java.lang.Enum` 类,这意味着枚举实例可以使用 `Comparable` 和 `Serializable` 接口的方法。 此外,枚举可以实现接口,这使得它们可以具有自定义的行为。例如:...
在这个例子中,`ShapeEnum`实现了`Shape`接口,每个枚举常量都提供了`draw()`方法的实现。这样,我们就可以根据枚举值来调用不同的`draw()`方法。 注解(Annotation)是Java中的另一个重要特性,它允许我们在代码中...
Java手动方式创建枚举类是一种常见的编程方法,在Java中可以使用枚举类型来定义一组具有相同特征的常量。通过手动方式创建枚举类,可以更好地控制枚举类型的行为和特性。在本文中,我们将通过一个实例来介绍Java手动...
### SCJP 310-055 题库2:类、接口以及枚举 #### 题目解析与知识点总结 **题目1:接口中的成员变量** - **描述:** 给定一个接口 `Status`,其中包含一个成员变量 `MY_VALUE`,要求在第12行插入合适的修饰符。 ...
2. 枚举是一种特殊的类,因为被修饰为 final,所以不能继承其他类。 3. 枚举值本质上是静态常量,定义的枚举值会被默认修饰为 public static final。 4. 枚举提供了一些基本方法,如 values()、name()、ordinal()、...