我们知道Array对象(数组)具有length
属性,并在Java中声明为:
public final int length;
它被声明为final,因此不需要访问器,除非创建新数组,否则我们无法更改length的值。
我的问题是:我很好奇Java是如何实现数组类的,以便当它被声明为length
时能够为final
赋值首先是什么?
实施情况如何?
注意:我不是在问如何更改数组的长度。我问它是如何实现的,以便可以更新最终属性的值。
答案 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)
答案是一个简单的规则:
必须使用以下方式之一初始化类的最终成员变量:
在声明时:
myWindow.orderOut(self);
在该类的每个构造函数的末尾:
public class Foo{
private final int size = 10;
}
这意味着如果您有5个不同的构造函数,那么您必须保证在执行每个构造函数结束时初始化最终变量。
数组类的实现类似于上面的内容。使用public class Bar{
private final int size;
public Bar(int n){
this.size = n;
}
public Bar(int n, String name){
this.size = n;
}
...
}
运算符后,底层机制会调用该类的构造函数,最终变量[]
将通过该构造函数初始化,并且永远不会更改。
这种解释相对具象而且不准确,但我希望这有助于澄清这一概念。
祝你好运。