Tag: 常量

在Java中初始化最终变量的问题

我一直在努力解决Java中的一个问题并开始找到我,我无法想到一个合适的方法来解决它。 我有一个最终的对象属性,但是动态。 也就是说,我希望值在指定后保持不变,但每个运行时的值可以不同。 所以我在课程开头声明了类级别变量 – 比如private final FILE_NAME; 。 然后,在构造函数中,我为它赋值 – 比如说FILE_NAME = buildFileName(); 当我在buildFileName()方法中抛出exception的代码时,问题就开始了。 所以我在构造函数中尝试这样的东西: try{ FILE_NAME = buildFileName(); } catch(Exception e){ … System.exit(1); } 现在我有一个错误 – “空白的最终字段FILE_NAME可能尚未初始化。” 这是我开始对Java严格的编译器感到有些恼火的地方。 我知道这不会是一个问题,因为如果它到达catch,程序将退出…但编译器不知道,因此不允许此代码。 如果我尝试在catch中添加一个虚拟赋值,我会得到 – “可能已经分配了最终字段FILE_NAME。” 我显然不能在try-catch之前分配一个默认值,因为我只能分配一次。 有任何想法吗…?

Java构建时间常量配置

我有一个项目,我想使用多种配置构建。 我有一个常量,需要在构建之间有所不同,但我不知道如何根据我的配置更改它。 例如,我希望能够基于配置文件中的值来执行以下操作。 @WebService(targetNamespace = “http://example.com/”) public class CustomerWebService { 和 @WebService(targetNamespace = “http://demo.example.com/”) public class CustomerWebService { 我们用ant来建造。

Java中的符号引用

在这些日子里,我一直在玩Javareflection和.class格式。 我正在学习ldc教学。 在JVM规范中,我发现术语我不明白: 符号引用 ,我有以下问题。 这是什么意思? 在哪里使用? ldc指令在哪些情况下加载符号引用? Java中是否有与该操作对应的代码?

无法在内部类中声明Public static final String s = new String(“123”)

我试图声明一个类,如下所示 class Outer{ private final class Inner{ public static final String s1 = new String(“123”); public static final byte[] bytes = new byte[]{0x00, 0x01}; public static final String s2 = “123”; public static final byte byte1 = 0x02; } } 在上面的代码中,s1和bytes不会编译,但是s2和byte1编译。 如果我将整个常量声明放在外部类中它可以正常工作。 我错过了什么 有帮助吗?

什么是java编译器中的常量折叠?

可能重复: 在java中有任何称为“常量折叠”的概念吗? 嗨,我遇到过Java编译器使用称为Constant Folding的东西。这是什么? 它是如何影响的?

Java中的字母常量?

我有一种情况需要在字母表中找到一个字母的索引。 在Python中,我可以使用string.ascii_lowercase或string.ascii_uppercase 。 Java中有类似的东西吗? 显然我能做到: private static char[] alphabet = “abcdefghijklmnopqrstuvwxyz”.toCharArray(); 但经过这么多Python之后,它让我想知道这是不是建在某个地方。

由于属性必须是常量表达式错误,Java代码将无法编译

我无法弄清楚为什么以下不会编译。 IDE给我的错误是“注释属性RequestParam.defaultValue的值必须是常量表达式”。 我的项目涉及Spring和Maven,它包括以下内容: private static final String MAX_LONG_AS_STRING = Long.toString(Long.MAX_VALUE); @RequestMapping(method=RequestMethod.GET) public List spittles( @RequestParam(value=”max”, defaultValue=MAX_LONG_AS_STRING) long max, @RequestParam(value=”count”, defaultValue=”20″) int count) { return spittleRepository.findSpittles(max, count); } 我认为错误来自Long转换为String,但我不知道如何解决它。 我会感谢任何帮助,我是注释和Spring的新手。

关于Java字符串常量池

这是关于Java字符串常量池。 在我的一个程序中,我正在解密数据库的密码并将其存储在字符串中。 我听说Java Strings将存储在一个常量池中,它们不会被VM重新启动或加载String Quits的ClassLoader破坏。 如果是这种情况,我的密码将存储在字符串池中。 我非常关心这个问题。 有没有其他方法来摧毁这些文字或我能做的任何其他事情。 请在此建议, 此致,Sunny。

Java:访问枚举中的常量(枚举)

阅读SCJP书,我在第1章“自测”中发现了类似的内容: enum Animals { DOG(“woof”), CAT(“meow”), FISH(“burble”); String sound; Animals(String s) { sound = s; } } class TestEnum { static Animals a; public static void main(String[] args) { System.out.println(a.DOG.sound + ” ” + a.FISH.sound); // the following line is from me System.out.println(Animals.DOG.sound + ” ” + Animals.FISH.sound); } } 注意:代码编译正常。 我不明白为什么我们可以从变量a访问DOG,CAT或FISH常量。 我认为(并且也在书中写道)DOG,FISH,CAT作为常数以类似于public static final […]

为什么Java常量除以零会产生编译时错误?

可能重复: 1/0是合法的Java表达式吗? 为什么这段代码会编译? class Compiles { public final static int A = 7/0; public final static int B = 10*3; public static void main(String[] args) {} } 如果我查看已编译的类文件,我可以看到B已经被评估为30,而A仍然是7/0。 据我所知,JSL是一个除以零的表达式,不是常数。 参考: JLS 15.28 我的上述陈述是由于这一行: 编译时常量表达式是表示基本类型值的表达式 因此,除以零不会被评估为原始值。 我真的不明白为什么编译器允许这个呢? 为了清楚起见,上面的代码使用“java.lang.ExceptionInInitializerError”崩溃了运行时 在我看来,编译器威胁任何最终的静态变量作为常量并评估它的编译时间。 这意味着编译器已经尝试评估A,但由于它是零除以它只是让它通过。 没有编译时错误。 但这看起来非常奇怪…编译器知道它是一个除以零并且它会崩溃运行时但是它不会标记编译错误! 任何人都可以向我解释原因吗?