我只是在使用final关键字并观察到下面的行为,这里我使用一个方法分配一个最终变量,该方法在构造函数之前被调用。
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);
}以下代码的输出如下
Inside Method
Inside Constructor
1我知道在构造函数完成之前需要分配最终变量,这就是这里发生的情况。
我无法找到的是如何在构造函数之前调用一个方法,我真的很感激对此的任何解释。
发布于 2016-09-11 08:46:00
它与final关键字无关。尝试下面(刚刚删除的final )输出将是相同的。基本上,首先初始化实例变量,然后调用构造函数。
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);
}
}现在为什么和如何在构造函数之前初始化实例变量(参见Why instance variables get initialized before constructor called? )
发布于 2016-09-11 08:45:54
如果将构造函数更改为
Test(){
super();
System.out.println("Inside Constructor");
}并将调试点设置为super();,您将看到构造函数在init(1);之前被调用。它只是在您的System.out.println("Inside Constructor");之前被调用。
你也可以写:
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);
}
}发布于 2016-09-11 08:39:08
代码中的这种行为是正确的,与您对最后一个关键字的分析无关.
init(1);是一种在类构造实例时被调用的方法.
因此,在构造函数之前,方法内部的所有内容都将被执行.
https://stackoverflow.com/questions/39434254
复制相似问题