当前位置: 首页 > 面试题库 >

在Java中初始化最终变量时遇到问题

鲍驰
2023-03-14
问题内容

我不断遇到Java问题的细微变化,并且这个问题开始浮现,我真的想不出解决该问题的合适方法。

我有一个最终的但动态的对象属性。也就是说,我希望该值一旦分配便是恒定的,但该值在每个运行时可以不同。因此,我在课程开始时声明了课程级别变量-say
private final FILE_NAME;。然后,在构造函数中,给它分配一个值-说FILE_NAME = buildFileName();

当我的buildFileName()方法中有引发异常的代码时,问题就开始了。所以我在构造函数中尝试这样的事情:

try{
   FILE_NAME = buildFileName();
}
catch(Exception e){
   ...
   System.exit(1);
}

现在我有一个错误-“空白的最后一个字段FILE_NAME可能尚未初始化。”
这就是我开始对Java的严格编译器感到恼火的地方。我知道这不会有问题,因为如果遇到问题,程序将退出…但是编译器不知道这一点,因此不允许该代码。如果我尝试向捕获中添加虚拟分配,则会得到-“最后一个字段FILE_NAME可能已经分配了。”
我显然不能在try-catch之前分配默认值,因为我只能为其分配一次。

有任何想法吗…?


问题答案:

再三考虑,我想我只是想出了一个解决方案!-使用中间变量。

String fileName = null;
try{
   fileName = buildFileName();
}
catch(Exception e){
   ...
   System.exit(1);
}
FILE_NAME = fileName;

不知道为什么我花了这么长时间才想到这个…



 类似资料:
  • 我想了解各种情况下类实例的初始化 在JLS-7第12.5节中,没有提到如何以及何时初始化最终实例变量?如果实例变量被声明为final,是否有人能给我一点参考来理解其行为? 给出的输出如下 在哪里作为 是否将输出作为

  • 问题内容: 有没有在Java构造函数中使用最终变量的解决方案?问题是,如果我初始化一个最终字段,例如: 那么我就不能在构造函数中使用它。Java首先运行构造函数,然后运行字段。有没有一种解决方案可以让我访问构造函数中的final字段? 问题答案: 我不太明白你的问题。那 执行如下:

  • 下面的示例类无法编译: 此代码的编译错误消息是: 但是,对于包含以下方法的类,Java不会生成任何错误消息: 关于初始化及其要求,为什么Java对最终实例变量和最终局部变量的处理不同?谢谢

  • 本文向大家介绍用Java创建对象时可以初始化最终变量吗?,包括了用Java创建对象时可以初始化最终变量吗?的使用技巧和注意事项,需要的朋友参考一下 声明变量final后,在对其进行初始化之后,将无法进一步修改其值。此外,像实例变量一样,最终变量将不会使用默认值初始化。 因此,在声明最终变量后必须初始化它们。如果不是,则会生成编译时错误。 示例 编译时错误 初始化最终变量 您可以通过4种方式初始化最

  • 问题内容: 我们如何在对象创建时初始化类的最终变量? 任何人都可以解释它怎么可能?… 问题答案: 您必须一次且仅一次初始化最终变量。有三种方法可以对实例变量执行此操作: 在构造函数中 在实例初始化块中。 当你声明它 这是这三个示例: 在每种情况下,代码在您调用时都运行一次,并且无法再次调用其中的任何一个,这满足了初始化要求每个实例仅执行一次的要求。

  • 我试图初始化一个静态最终变量。然而,这个变量是在一个可以抛出异常的方法中初始化的,因此,我需要在一个try-catch块中。 即使我知道变量将在try或catch块上初始化,java编译器也会产生错误 最后一个字段a可能已经被赋值 这是我的代码: 我尝试了另一种方法,直接将其声明为null,但它显示了类似的错误(在这种情况下,这对我来说似乎完全是合乎逻辑的) 不能分配最终字段TestClass.a