“一次初始化”变量,未在施工时间初始化

时间:2013-05-06 00:22:52

标签: java final

在Java中是否有任何方法可以创建像构造函数中未初始化的final这样的变量,但是一旦初始化它们就永远不能再次更改?我的问题是我在不同的时间点获得变量值,并且我想在收到第一个值之前或之后立即创建该类。

我已经考虑过为每个变量保留一个标志的明显解决方案,但我想知道是否还有更高效的方法。

2 个答案:

答案 0 :(得分:0)

我可能会按照最后一句话here做一些事情。始终使用setter设置字段,如果该字段不是默认值(即null),则不允许设置它。

答案 1 :(得分:0)

初始化此最终变量时,请确保仅在以下某个构造中初始化,否则编译器会抛出错误。

  1. 初始化表达式

    public class FinalVariable {     //在实例初始化表达式中,或在声明本身时     // final =;     final int finalInstanceField = 5;

    }

  2. 实例初始化程序块

    public class FinalVariable {     final int finalInstanceField;

    {
        // Initialization in instance initializer block
        finalInstanceField = 5;
    }
    
  3. 构造函数块 公共类FinalVariable {

    final int finalInstanceField ;
    
    public FinalVariable() {
        // constructor
        finalInstanceField = 7;
    }
    

    }

  4. 静态最终变量可以通过两种方式初始化。 1.Initializer表达式

    public class FinalVariable {
        // in the instance initializer expression, or while declaration itself
        // final <type> <variable_name> = <initializer expression>;
        static final int finalStaticField = 25;
    
    }
    
    1. 静态初始化程序块

      公共类FinalVariable {

      static final int finalStaticField;
      
      static {
          finalStaticField = 7;
      }
      

      }