assigning final keyword using a methofd
我只是在玩final关键字,观察下面的行为,这里我使用一个方法分配一个最终变量,方法在构造函数之前被调用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| public class Test {
final int i =init (1);
Test (){
System. out. println("Inside Constructor");
}
public int init (int i ){
System. out. println("Inside Method");
return i ;
}
public static void main (String [] args ){
Test i =new Test ();
System. out. println(i. i);
} |
以下代码的输出如下
我知道最后一个变量需要在构造函数完成之前分配,这就是这里发生的事情
我找不到的是,如何在构造函数之前调用一个方法,我真的很感谢对此的任何解释
- 我可以调用Java中的构造函数中的方法吗?在构造过程中初始化实例成员时。对构造函数的调用只是构造的一部分。
它与final关键字无关。尝试以下(刚刚删除final输出将相同。基本上,先初始化实例变量,然后调用构造函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| public class Test {
int i = init (1);
Test () {
System. out. println("Inside Constructor");
}
public int init (int i ) {
System. out. println("Inside Method");
return i ;
}
public static void main (String[] args ) {
System. out. println("start");
Test i = new Test ();
System. out. println(i. i);
}
} |
现在,为什么以及如何在构造函数之前初始化实例变量,看看为什么在调用构造函数之前初始化实例变量?
- 是的,我知道这不会有最终结果,我的错误在于我提出了这个问题,并且从给定的链接我得到编译器将每个初始化移动到每个构造函数,但是这里,因为它是一个方法,这意味着方法在构造结束之前被调用,到目前为止,我所知道的是,一个对象必须用于使用一个方法。
- 是的,可以在构造结束之前调用方法。是的,如果你不小心的话,这会导致扭曲的行为。
- 我发现只有在对超级构造函数的调用完成后,才能从构造函数调用实例方法。
如果将构造函数更改为
1 2 3 4
| Test (){
super();
System. out. println("Inside Constructor");
} |
并将调试点设置为super();,您将看到构造函数在init(1);之前被调用。它只是在你的System.out.println("Inside Constructor");之前被调用。
你也可以写:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| public class Test {
final int i ;
Test (){
super();
i = init (1);
System. out. println("Inside Constructor");
}
public int init (int i ){
System. out. println("Inside Method");
return i ;
}
public static void main (String [] args ){
Test i =new Test ();
System. out. println(i. i);
}
} |
代码中的这种行为是正确的,与您对最终关键字的分析无关…
init(1);是一种方法,只要类正在构造一个实例…
因此,方法中的所有内容都将在构造函数之前执行…
- 一旦类被加载,但当对象被创建时,将不会调用init(1)