首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

常量接口 vs 常量 vs 枚举区别

常量定义在接口里与里都能通过编译,那2者到底有什么区别呢? 那个更合理?...开发人员在没有参考资料时, 不可能知道某个 int 型的参数到底应该赋什么内容 编译时, 是直接把常量的值编译到的二进制代码里, 常量的值在升级中变化后, 需要重新编译所有引用常量, 因为里面存的是旧值...String CONST_C = "cc"; private ConstClassA() { } } 常量可以设置构造函数为 private 从而限制继承, 也就没有继续添加常量的问题了...编译时, 没有把常量值编译到代码里, 即使常量的值发生变化也不会影响引用常量 enum 类型 public static enum Grade { A(4), B(3),...查看 enum 反编译后的代码与枚举常量的结构非常相似 这可能是因为 java 的设计者一开始觉得 enum 与 OO 思想不符 所以没有提供支持, 但是随着常量接口的滥用和枚举常量方案的出现 才在

14730
您找到你想要的搜索结果了吗?
是的
没有找到

String 常量

String-Pool-Java String 类型的常量池比较特殊,它的主要使用方法有两种: 直接使用双引号声明出来的 String 对象,会直接存储在常量池中 如果不是用双引号声明的 String...String.intern() 是一个 Native 方法,它的作用是:如果运行常量池中已经包含一个等于此 String 对象内容的字符串,则返回常量池中该字符串的引用;如果没有,则在常量池中创建与此...String 内容相同的字符串,并返回常量池中创建的字符串的引用。...System.out.println(s1.equals(s2)); // 输出 true 8 种基本类型的包装常量池 Java 基本类型的包装的大部分都实现了常量池技术,即 Byte,Short...,Integer,Long,Character,Boolean;这 5 种包装默认创建了数值[-128,127] 的相应类型的缓存数据,而超出此范围的仍然会去创建新的对象 两种浮点数类型的包装 Float

51620

EasyC++62,常量枚举

这是EasyC++系列的第62篇,常量枚举。 常量 有的时候, 我们希望能给当中定义一些常量,可以给所有的对象使用。...比如说我们在当中定义一个数组,希望可以定义一个常量,用来初始化数组的长度。既然是用来初始化数组长度的,那么这个值自然也不会改变,我们定义成const是否可行呢?...这个常量会和其他静态变量存储在一起,而不是存储在对象里,这样的话也就被所有对象共享了。 对于像是Java、Python等其他语言来说,中的静态变量是可以通过名直接访问的,而C++中不行。...通过这种方式声明并不会创建数据成员,对于的对象来说,并不包含枚举,这里的N只是一个符号名称。在当中遇到它的时候,编译器会用15来代替。...也正是因为我们只是为了创建符号常量,而不是创建枚举类型的变量,所以不需要提供枚举名。有一些C++的库当中也用到了这种方法,比如ios_base::fixed等。

27630

构造Python中的常量

构建常量 Python中不存在像const那样的常量关键字,只是在内建空间中提供了一小部分常量,比如True、False、None等。那么在Python中如何使用常量呢?...一般来说有如下两种方法: 通过命名风格来提示使用者该变量代表的意义为常量,比如MAX_NUMBER、TOTAL。...然而这种方式并没有真正实现常量,其对应的值仍然可以被改变,这只是一种约定俗成的风格。 通过自定义实现常量功能。这要求符合“命名全部为大写”和“值一旦被绑定便不可再修改”这两个条件。...= value import sys sys.modules[__name__] = _const() 如果上面的代码对应的模块名为const,使用的时候只要import const,便可以直接定义常量了...---- 将常量集中到一个文件 无论采用那种方式实现常量,都建议将常量集中到一个文件中,因为这样有利于维护,一旦修改常量的值,可以集中统一进行而不是逐个进行检查。

3.2K20

Python 定义自己的常量

因此我们只能通过自己定义的方法来定义一个符合常量规则的,使得该类定义的成员属性满足常量的属性。...由于常量的值一旦绑定则不可再修改,所以也就是说对常量二次赋值时需要抛出异常。因此我们显然需要改写自定义的常量的赋值方法。...在 Python 中,当我们对的属性进行赋值时,会自动调用 object 的 __setattr__() 函数,该函数的定义如下: object....因此我们可以通过定义一个常量 constant (默认继承自object),并对 object.__setattr__() 方法进行重写。...异常处理的定义方式请参看:Python 错误和异常 定义常量: constant.py import sys class _const: # 自定义异常处理 class ConstError

3.6K50

PHP面向对象-常量

在 PHP 中,常量是指在定义中定义的固定值,一旦定义就不可改变。常量可以被的任何方法调用,也可以通过名直接访问。...与普通变量不同,常量在定义时必须被赋值,并且不能被重新赋值或取消定义。常量是通过 const 关键字定义的。...常量的访问方式有两种:通过名直接访问和通过对象访问。...通过名直接访问常量的语法格式如下:ClassName::CONSTANT_NAME通过对象访问常量的语法格式如下:$objectName::CONSTANT_NAME下面是一个使用常量的示例:class...我们还通过 Math::PI 直接访问 Math 常量 PI。常量也可以用于定义全局常量,这样可以确保这些常量在应用程序的所有部分中都是一致的。

83130

【说站】java常量是什么

java常量是什么 1、在Java中,经常希望某个常量可以在一个的多个方法中使用,通常将这些常量称为常量。 可以使用关键字 static final 设置一个常量。...2、常量的定义位于main方法的外部,因此,在同一个的其他方法中也可以使用这个常量。 而且,一个常量被声明为public,那么其他的方法也可以使用这个常量。... *********************************/ /**  * Common常量列表(存放公共的常量)  ***/ public static final class Common...*********************************/ /**  * User 存放和User相关的常量  ***/ public static final class User {  ...return USER_IN_SESSION; }   // public static String USER_NAME() { return USER_NAME; } }   } 以上就是java常量的介绍

25220

Java八种包装常量

Java常量池是Java内存管理中的一个重要概念,主要用于存储字符串常量、基本类型包装常量和方法的全限定名等。...在Java中,当创建一个字符串、基本类型包装引用时,JVM会首先检查常量池中是否已存在该对象。如果存在,则直接返回对该对象的引用;如果不存在,则在常量池中创建一个新的对象并返回引用。...这意味着在Java程序中,两个相等的字符串常量或基本类型包装常量实际上是指向常量池中同一个对象的引用。Java常量池主要包括以下几个部分:字符串常量池:用于存储字符串字面量。...元数据常量池:用于存储的元数据信息,如名、方法名、字段名等。这些信息在加载过程中被解析并存储在常量池中,供后续使用。运行时常量池:是方法区的一部分。...JVM为每个已加载的类型(或接口)维护一个运行时常量池。运行时常量池包含多种常量,包括编译期产生的各种字面量和符号引用,这部分内容将在加载后存放到方法区的运行时常量池中。

7910

【小家java】java中维护常量使用常量?接口?还是枚举呢?

因为我在阅读《Effective Java》这本书中提到过: 如果某个实现了常量接口的被修改不再需要常量了,也会因为序列化兼容原因不得不保持该实现,而且非final实现常量接口会导致所有子类被污染...而应当用在与之相关的中。这样能保持很好的层级关系和隔离性,方便分包和扩展,具体请参考spring中对常量维护的原则。...当然,刚才说了不建议把一般的常量放在接口里,所以我们可以放在常量了,但建议常量是final的。 什么时候使用枚举呢?其实建议使用枚举。...此处个人不建议什么都使用枚举来代替常量。比如毫无规则归类可言的一些常量:如SUCCUSS字符串、密钥串、路径等等这些,可以放在一个常量里面糅在一起。...而常量可以收集管理一些比较杂的一些常量。而接口的中的常量,在遵循开闭原则的基础上,向上抽象管理自己的内聚的常量 4、最后 写代码也是一种艺术,结构层次好的代码可以少出bug,提高效率。

3.4K21

C++:09---静态成员、常量成员

但是建议在内定义、外初始化 可以直接通过名直接访问 class Cperson { private: static int age; static int getAge();...静态函数 因为静态函数不属于某一对象,所以函数内不存在this指针 静态成员函数不能被声明为const类型(“静态成员函数是属于的,而不是某个具体对象,在没有具体对象的时候静态成员就已经存在,静态成员函数不会访问到非静态成员...::age=18; void Cperson::setPerson() { age=20;//正确,可调用静态成员 height=178;//错误,不可调用普通成员 } 二、常量成员...const数据成员只能在构造函数的初始化列表进行初始化 const数据成员在初始化之后,不允许再次修改值 class Cperson { private: const int age;//常量数据成员...当对象为常量对象时,只允许访问常量函数成员 class Cperson { private: const int age;//常量数据成员 float height; public

1.5K40

java枚举类型enum用法(java定义枚举常量)

文章目录 枚举的使用 如何定义枚举 方式一:jdk5.0之前,自定义枚举 方式二:jdk5.0,可以使用enum关键字定义枚举 Enum的主要方法 toString() values() valueOf...(String objName) 使用enum关键字定义的枚举实现接口的 情况一:实现接口,在enum中实现抽象方法 情况二:让枚举的对象分别实现接口中的抽象方法 枚举的使用 枚举的理解:的对象只有有限个...我们称此类为枚举 当需要定义一组常量时,强烈建议使用枚举 如果枚举中只有一个对象,则可以作为单例模式的实现方式。...如何定义枚举 方式一:jdk5.0之前,自定义枚举 //自定义枚举 class Season{ //1.声明Season对象的属性:private final修饰 private final...使用 enum 定义的枚举默认继承了 java.lang.Enum,因此不能再继承其他 枚举的构造器只能使用 private 权限修饰符 枚举的所有实例必须在枚举中显式列出(, 用于分隔 ;

3.6K20

对基本类型包装常量池的补充

在前文JAVA-常量常量池中,对java中的各种常量池进行分析。在具体的细节中,并不完善。现在对数据类型包装常量池进行相应的补充。有很多细节也是面试中容易遗漏的地方。...JLS7 5.1.7) assert IntegerCache.high >= 127; } private IntegerCache() {} } 作为Integer的内部类...那么在Boolean内部 : public static final Boolean TRUE = new Boolean(true); public static final Boolean FALSE...这样在比较的过程中,所有的Boolean实际上所有boxed的对象最终都只有这两个。...需要注意的是: GC对常量池cache缓存没有任何影响。除非类从jvm卸载。 -XX:AutoBoxCacheMax= 参数设置对JVM client模式无效,只对sever模式有效。

47310

Java的常量接口思考,项目中的常量是放在接口里还是放在里呢?

但是,是只能单继承的,接口是允许多实现的。 要是实现的多个接口出现重名的常量,会报错,必须要在实现明确常量用的是哪个接口的。...第二 如果某个实现了常量接口的被修改不再需要常量了,也会因为序列化兼容原因不得不保持该实现,而且非final实现常量接口会导致所有子类被污染。...第三 基于数据只暴露给相应的的原则,一个实现一个常量接口,可能只需要其中几个常量,而得到了更多无用的常量, 所以,使用常量接口的时候都是 import static const.valueAAA...那此时和常量有区别吗?...总结 接口是定义类型的,而不应该用于导出常量常量接口不建议使用,应使用常量

2K11
领券