java - 为什么java程序中的输出打印值300

标签 java

我有以下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
    }
}

但我不明白为什么 main 方法 'a1.printA(); ' as 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;

这是第一个执行的。所以,这就是一切的开始。

然后,初始化类,因此将执行初始化 block ,其中包含:

a=300;

这将覆盖以前的值。

您还向构造函数传递了一个参数,但您没有使用它。所以这不会改变 a 的值。

关于java - 为什么java程序中的输出打印值300,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60563113/

相关文章:

java - Datastax solr : Cassandra will now flush up to the two largest memtables to free up memory

java - 如何执行 DeepEmailminer 应用程序

java - junit5 中的 TestWatcher

java - 如何配置 jackson objectmapper 以正确反序列化为 pojo?

java - 使用Java Regex解析xml文件

java - 如何从 org.springframework.test.web.servlet.ResultActions 中提取显式内容

java - Singleton Spring bean 被创建多次

c# - 桌面共享和聊天开源

java - 是什么触发 Socket 的 InputStream 关​​闭(或到达流的末尾)并简单地产生 null?

java - 如何运行多个 ExecutorServices 来发出请求并通过单个接口(interface)汇集响应?