java 如何为最终属性赋值

How java assign value to final attribute

我们知道一个数组对象(array)有一个length属性,它在Java中被声明为:

public final int length;

它被声明为最终的,因此不需要访问器,我们不能更改长度的值,除非创建一个新数组。

我的问题是: 我很好奇 Java 是如何实现数组 class 以便他们能够为 length 最初声明为 final 时?

实施情况如何?


注意:我不是在问如何更改数组的长度。我在问它是如何实现的,以便可以更新最终属性的值。

它不会改变它的值,它分配一次并且永远不会改变。每个实例的数组都是固定长度的,数组在其构造函数中为 final 字段分配一个值(只要它只有一次)。

就像用户 Jigar Joshi 所说的那样。可以在构造函数中分配声明为 final 的属性。

我会在这里写一个简单的例子供以后感兴趣的用户使用。尽管如此,我还是会接受他的回答。

class Test
{
    public final int val;

    public Test(){
        val = 5;  //This is allowed in Java
    }       
}

答案很简单:

class 的最终成员变量必须以下列方式之一初始化:

  1. 申报时:

    public class Foo{
        private final int size = 10;
    }
    
  2. 在那个 class 的每个构造函数的末尾:

    public class Bar{  
        private final int size;
    
        public Bar(int n){
            this.size = n;
        }
    
        public Bar(int n, String name){             
            this.size = n;
        }
    
        ...
    }
    

这意味着如果你有 5 个不同的构造函数,那么你必须保证最终变量在执行每个构造函数结束时都被初始化。

数组classes的实现和上面类似。使用 [] 运算符后,底层机制将调用该 classes 的构造函数,最终变量 size 通过该构造函数初始化并且永远不会更改。

这个解释比较形象,不够准确,希望对理清概念有所帮助。

祝你好运。