为什么此输出在Java程序中打印值300

问题描述 投票:0回答:2

我有以下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可以解释一些事情吗?

java
2个回答
4
投票
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的值。


3
投票

它不会打印200值(正如您期望的那样,因为您从未在构造函数中分配a的值。

如果您将构造函数更改为:

A (int i) {
    this.a = i;
}

然后输出为200

您在那里写的内容:

{
    a = 300;
}

只是一个执行块,在加载类时会执行。

© www.soinside.com 2019 - 2024. All rights reserved.