Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 最终引用变量必须在构造函数完成之前初始化?为什么?_Java - Fatal编程技术网

Java 最终引用变量必须在构造函数完成之前初始化?为什么?

Java 最终引用变量必须在构造函数完成之前初始化?为什么?,java,Java,在构造函数完成之前,必须初始化最终引用变量 这意味着同样的事情也可以在 以及实例变量声明 final Foo foo = new Foo() 在初始值设定项块中 { foo = new Foo(); } 在构造函数中 public Example() { foo = new Foo(); } 如果我错了,请纠正我?原因是什么?对于原始最终变量(如int或float)的规则是否相同?否,不能从静态块访问实例变量。您所谓的静态块实际上是实例初始值设定项块 此规则的原因是,

在构造函数完成之前,必须初始化最终引用变量

这意味着同样的事情也可以在

  • 以及实例变量声明

    final Foo foo = new Foo()
    
  • 在初始值设定项块中

    {
        foo = new Foo();
    }
    
  • 在构造函数中

    public Example()
    {
        foo = new Foo();
    }
    

  • 如果我错了,请纠正我?原因是什么?对于原始最终变量(如
    int
    float
    )的规则是否相同?

    否,不能从静态块访问实例变量。您所谓的静态块实际上是实例初始值设定项块

    此规则的原因是,最终字段的定义是只能分配一次的字段。如果有可能在方法中的构造函数之后对其进行初始化,编译器将无法知道此方法只调用一次,并且另一个方法在初始化前不会尝试读取字段的值,这使得
    final
    的整个概念毫无用处

    在创建构造函数之前,必须初始化最终引用变量 完成

    是的。。。应该是。但请记住

    static final ClassAbc myObj = new ClassAbc(); // This should be initialize while declaring
    // because it is static and visible for every time (donot need object to call it)
    
    要点/原因是,最终变量应该在初始化之前初始化 甚至是可访问的(意思是“可以使用”)

    对于像“int”或“final”这样的原始最终变量,规则是否相同 “浮动”


    是的,基本类型和非基本类型的规则是相同的。

    基本最终变量如“int”或“float”的规则是否完全相同?是的,我认为没有任何特殊性。