java如何为最终属性赋值

时间:2015-06-18 17:35:21

标签: java arrays implementation

我们知道Array对象(数组)具有length属性,并在Java中声明为:

public final int length;

它被声明为final,因此不需要访问器,除非创建新数组,否则我们无法更改length的值。

我的问题是:我很好奇Java是如何实现数组类的,以便当它被声明为length时能够为final赋值首先是什么?

实施情况如何?

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

3 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:0)

像Jigar Joshi所说的那样。声明为final的属性可以在构造函数中指定。

我将在这里为未来感兴趣的用户写一个简单的例子。尽管如此,我仍然会接受他的回答。

class Test
{
    public final int val;

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

答案 2 :(得分:0)

答案是一个简单的规则:

必须使用以下方式之一初始化类的最终成员变量:

  1. 在声明时:

    myWindow.orderOut(self);
  2. 在该类的每个构造函数的末尾:

    public class Foo{
        private final int size = 10;
    }
    
  3. 这意味着如果您有5个不同的构造函数,那么您必须保证在执行每个构造函数结束时初始化最终变量。

    数组类的实现类似于上面的内容。使用public class Bar{ private final int size; public Bar(int n){ this.size = n; } public Bar(int n, String name){ this.size = n; } ... } 运算符后,底层机制会调用该类的构造函数,最终变量[]将通过该构造函数初始化,并且永远不会更改。

    这种解释相对具象而且不准确,但我希望这有助于澄清这一概念。

    祝你好运。