有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

oop为什么要在java中使用此输出

我有以下java代码段

class A{
    int a=100;
    A(){
        //Compiler inserts "a=100;"
        System.out.println("A() : "+a);
    }
    A(int i){
        //Compiler inserts "a=100;"
        System.out.println("A(int) : "+a);
        a=i;
    }
}
class Demo{
    public static void main(String args[]){
        A a1=new A();
        System.out.println("a1.a : "+a1.a);  //100

        A a2=new A(200);
        System.out.println("a2.a : "+a2.a);  //200
    }
}

我有以下输出与此代码

A<> :100
a1.a :100
A<> :100 //why this print after a1.a :100
a1.a :200

我有以下问题。为什么这是a1.a :100之前的A<> :100打印


共 (1) 个答案

  1. # 1 楼答案

    假设你的例子和你的帖子一样,输出是

    A() : 100
    a1.a : 100
    A(int) : 100
    a2.a : 200
    

    这是因为A中的构造函数首先打印出A,然后将A的值更改为i:

    class A {
    int a = 100;
    
    A() {
        // a is containing it's initial value (100)
        System.out.println("A() : " + a);
    
    }
    
    A(int i) {
        // a is containing its initial value (100)
        System.out.println("A(int) : " + a);
        a = i;
        //a is containing now its new value (i or in your example 200)
    }
    

    如果你想有这样的输出

    A() : 100
    a1.a : 100
    A(int) : 200
    a2.a : 200
    

    您必须将代码更改为:

    A(int i) {
        // a is containing its initial value (100)
        a = i;
        //a is containing now its new value (i or in your example 200)
        System.out.println("A(int) : " + a);
    }
    

    这是因为Java首先根据其定义构造对象变量,然后运行构造函数的代码