草庐IT

常量池

全部标签

Java枚举,如何以及何时为每个常量分配内存

我有如下所示的简单枚举类。我想知道内存是如何分配给每个常量的(是否为每个常量创建了成员类对象)以及它的范围是什么。publicenumMember{HAPPY("HAPPY"),RAhul("RAhul"),ANSAL("ANSAL");privateStringargument;Member(Stringarguments){System.out.println("EnumConstructorwork");this.argument=arguments;}publicStringgetValue(){returnargument;}} 最佳答案

java - 当我选择带有 AS 关键字的常量时,PostgreSQL 返回 java.sql.Types.OTHER

当通过java在Postgres上运行选择时SELECT''ASCOL1,0ASCOL2FROMMYTABLE1=2;COL1和COL2的列类型都是Types.OTHER。很明显结果集没有任何行。但是如果我使用下面的查询在结果集中有行:SELECT''ASCOL1,0ASCOL2FROMMYTABLE;COL1的类型仍然是Types.OTHER,但COL2的类型是Types.INTEGER。在我的例子中,我需要Types.VARCHAR和Types.INTEGER甚至结果是否为空。在db层或jdbcurl上是否有任何配置来获取Types.VARCHAR和Types.INTEGER两个查

java - 数值提升是否适用于 Java 中的常量?

这个问题在这里已经有了答案:WhycannotIaddtwobytesandgetanintandIcanaddtwofinalbytesgetabyte?(3个答案)WhydoesJavarequireanexplicitcastonafinalvariableifitwascopiedfromanarray?(4个答案)Primitivetype'short'-castinginJava(11个答案)Javachartobytecasting(3个答案)关闭4年前。§5.1.2和§5.6.2不要提及常量的数字提升和扩大是如何工作的。以下给出了预期的错误:shorta=2;short

Java代码编译成常量池中的MethodHandle

我正在尝试使用Java8Nashorn具有完整的源代码(未检测)。如您所知,它使用Nasgen修改.classes,输出在JRE/lib/ext/nashorn.jar中。在反汇编输出时,使用javap:0:aload_01:ldc#24//StringFunction3:ldc#31//MethodHandleinvokestaticjdk/nashorn/internal/objects/NativeFunction.function:(ZLjava/lang/Object;[Ljava/lang/Object;)Ljdk/nashorn/internal/runtime/Scri

java - 如何在java中动态检索常量?

我有几个接口(interface)都具有相同的常量-ID和ROOT。我还有一个方法,我向其中传递一个对象,该对象将是这些接口(interface)之一的实现。我如何根据传入的类动态检索常量的值-即我想执行如下操作:publicvoidindexRootNode(Nodenode,ClassrootNodeClass){indexService.index(node,rootNodeClass.getConstant('ID'),rootNodeClass.getConstant('ROOT'));}在PHP中这很容易,但在Java中这可能吗?我已经看到使用常量访问器解决了这个问题,但我

java - 初始化大量常量时如何规避 Java 中静态初始化器的大小限制

我有一个包含大量生成常量的类:publicclassConstantsextendsSomeBaseClass{//init()isdefinedinsomebaseclass...publicstaticfinalXXXKEY1=init(...);publicstaticfinalXXXKEY2=init(...);publicstaticfinalXXXKEY3=init(...);//...publicstaticfinalXXXKEY2000=init(...);}当生成的常量数量非常多时,这会导致静态初始化程序大于Java方法大小的上限(即>64kb),从而导致编译器错误。

java - 从属性文件键生成字符串常量

我正在使用.properties文件进行消息国际化。例如:HELLO_WORLD=HelloWorldHELLO_UNIVERSE=HelloUniverse然后在Java代码中:Stringfoo=resourceBundle.getString("HELLO_WORLD");像"HELLO_WORLD"这样的字符串文字是有问题的,因为它们容易出错并且不能自动完成。我想从属性文件中的键生成代码,如下所示:publicinterfaceMessages{//OrabstractclasswithprivateconstructorpublicstaticfinalStringHELLO

java - 在某些特定情况下更喜欢编译时常量而不是枚举

我正在阅读J.Bloch的EffectiveJava并提出以下内容(关于枚举的Setcion):Farfewerenumsbenefitfromassociatingmultiplebehaviorswithasinglemethod.Inthisrelativelyrarecase,preferconstant-specificmethodstoenumsthatswitchontheirownvalues对我来说,这种使用编译时常量的情况并不清楚。您不能提供一个反射(reflect)这一点的简单示例吗? 最佳答案 我认为该段落中

java - 枚举中的常量表达式

有什么方法可以将枚举转换为常量表达式吗?我希望我的switch运算符在枚举的值中进行选择,但是我得到一个编译错误“case表达式必须是常量表达式”,所以我尝试在变量中声明它:finalintREG=MyEnum.REG.getIndex().intValue();switch(service.getIndex()){caseREG:但我仍然得到同样的错误。根据Oracle的文档http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.28Acompile-timeconstantexpressionisane

java - 如何使用 ASM 控制常量池条目的顺序?

我正在实现一个转换,从.class文件中删除未使用的元素以减小它们的大小。因为一些常量池条目将变得未使用,所以我让ASM重新计算常量池,而不是从输入中复制它。但是,转换后的.class文件有时比原始文件大,因为ASM的常量池排序需要使用ldc_w指令(具有2字节索引),其中输入.class文件使用ldc(带有1字节索引)。我想手动对常量池进行排序,使ldc引用的常量排在第一位。人们可能还出于其他原因想要对常量池进行排序:例如,通过将常量池按规范顺序放置来使一组.class文件更可压缩,测试使用.class文件的工具,使用顺序作为软件水印,或混淆实现不当的反编译器/反混淆器。我grep了