class Animal { String name; public Animal(int age){ this.age = age; } { age = 19; } int age = 20; }
这个成员变量age最后等于多少就看在创建Aniaml对象时调用Animal(int age)时传给形参的值,因为这里的代码块和后面的age = 20;初始化会分别放在构造代码块的最前面执行,在这种情况下,我们在反编译时可以看出,这个构造函数是这样的:
class Animal { String name; int age;//成员变量的声明在编译时会被放在最前面 public Animal(int age){ age = 19; //成员变量的初始化和构造代码块都会放在构造函数中来执行,不过究竟谁在前就看他们代码写的位置的先后 age = 20 this.age = age; } }