我有以下Java程序,
class A{
int a=100;
A(int i){
}
{
a=300;
}
void printA(){
System.out.println("a : "+a);
}
}
class Demo{
public static void main(String args[]){
A a1=new A(200);
a1.printA(); //300
}
}
但是我不明白为什么主方法'a1.printA(); '300可以解释一些事情吗?
class A{
A(int i){
}
int a=100;
{
a=300;
}
void printA(){
System.out.println("a : "+a);
}
}
class Demo{
public static void main(String args[]){
A a1=new A(200);
a1.printA(); //300
}
}
[确定,您两次为该实例变量设置了值:
int a = 100;
这是第一个执行的命令。因此,这就是它的开始。
然后,您初始化您的类,因此将执行您的initialize块,其中包含:
a=300;
这将覆盖以前的值。
您还将参数传递给构造函数,但是您不使用它。因此,这不会更改a的值。
它不会打印200
值(正如您期望的那样,因为您从未在构造函数中分配a
的值。
如果您将构造函数更改为:
A (int i) {
this.a = i;
}
然后输出为200
。
您在那里写的内容:
{
a = 300;
}
只是一个执行块,在加载类时会执行。