HellodWorld程序段解读

疑问一:main函数只包含一个System.out.println(),为何上面三个也能显示
疑问二:我在电脑上只显示三个,不知为什么
public class Hello {
String s = "Hello";

public Hello(String s) {
   System.out.println("s = " + s);
   System.out.println("1 -> this.s = " + this.s);
   this.s = s;//把参数值赋给成员变量,成员变量的值改变
   System.out.println("2 -> this.s = " + this.s);
}

public static void main(String[] args) {
   Hello x = new Hello("HelloWorld!");
   System.out.println("s=" + x.s);//验证成员变量值的改变
}

}

Hello x = new Hello("HelloWorld!");
这个对象声明的时候调用了构造函数,也就是
public Hello(String s) {
System.out.println("s = " + s);
System.out.println("1 -> this.s = " + this.s);
this.s = s;//把参数值赋给成员变量,成员变量的值改变
System.out.println("2 -> this.s = " + this.s);
}
所以会有四个println

第一个问题很好解释,就是因为你实例化的时候自动调用了构造方法。
第二个问题你可以尝试多加几个输出语句,是不是都只是显示三个,然后或许你就可以发现问题所在了。