Java 最终数据成员给出不同的值(非静态数据成员)
最后一个概念说,如果它没有首先被赋值,那么它给出了调用它的函数中的错误,最后一个数据成员也可以从构造函数中被赋值,这就是所谓的空白最终概念 但是,一旦分配了最终数据成员,就不能在此处进行更改Java 最终数据成员给出不同的值(非静态数据成员),java,final,Java,Final,最后一个概念说,如果它没有首先被赋值,那么它给出了调用它的函数中的错误,最后一个数据成员也可以从构造函数中被赋值,这就是所谓的空白最终概念 但是,一旦分配了最终数据成员,就不能在此处进行更改 public class Demo { final int w; public Demo() { fun(); w=10; } public void fun() { System.out.println(w);
public class Demo
{
final int w;
public Demo()
{
fun();
w=10;
}
public void fun()
{
System.out.println(w);
}
public static void main(String ... args)
{
Demo d=new Demo();
System.out.println(d.w);
}
}
这里,在fun()中,w的值是0。,然后我将w赋值为10,这样在主println中,它现在是10
所以我的问题是在fun()中,w的值显示为0意味着它在堆中有一个空间作为对象,它的值为0,我已经用final关键字锁定了它,所以它不应该进一步更改,那么为什么在构造函数中w=10,如果w的值已经与fun()中可以看到的值一致,那么就不会给出任何错误呢…如果w的值在构造函数中可以变化,那么为什么在构造函数中w=10之后,当我假设w=20时会显示错误
如果最终变量可以有默认值,那么为什么需要明确地分配它们呢
final int w;
你还没有初始化它
如果你有
final int w=5;
然后它将显示此编译错误
The final field Demo.w cannot be assigned
一旦定义了最终值,就不能再次分配该值
你还没有初始化它
如果你有
final int w=5;
然后它将显示此编译错误
The final field Demo.w cannot be assigned
一旦定义了最终值,就不能再次分配该值
w
设置为0
。这就是为什么System.out.println()
打印0
w
设置为0
。这就是为什么System.out.println()
打印0
我们只能猜测这种限制背后的动机,但我认为这是为了让程序更容易理解。如果要将变量设置为0,则显式设置更为清晰。“最后一个非静态变量在堆中只能获得一次赋值,如果值在堆中默认为零,则不应在下一行中再次赋值。
w
在初始化过程中默认初始化为0。无论您想对字段执行什么操作,字段都会发生这种情况。您只为w
赋值一次,因此没有错误。是,但如果w是最终值,则w不会被初始化为0。您必须解释必须将其赋值为是,但程序没有给出任何错误,因此,为什么它在运行时w的值为0,如果w是最终值,则w的值为10。如果在然后不应在下一行中再次分配堆。w
作为初始化过程的一部分,默认情况下初始化为0。无论您想对字段执行什么操作,字段都会发生这种情况。您只为w
赋值一次,因此没有错误。是,但如果w是最终值,则w不会初始化为0。您必须解释必须将其赋值为是,但程序没有给出任何错误,因此,如果w是最终值,为什么它同时以w值0和10运行。。?