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 的最终成员变量必须以下列方式之一初始化:
申报时:
public class Foo{
private final int size = 10;
}
在那个 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
通过该构造函数初始化并且永远不会更改。
这个解释比较形象,不够准确,希望对理清概念有所帮助。
祝你好运。
我们知道一个数组对象(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 的最终成员变量必须以下列方式之一初始化:
申报时:
public class Foo{ private final int size = 10; }
在那个 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
通过该构造函数初始化并且永远不会更改。
这个解释比较形象,不够准确,希望对理清概念有所帮助。
祝你好运。