版权声明:欢迎转载,期待指正 https://blog.csdn.net/fighting_sxw/article/details/89738133
public class Person {
private String name = "haha";
static int age = 0;
public Person(String n, int age) {
if (age < 0) {
System.out.println("初始化不合法");
return;
}
name = n;
age = ++age;
System.out.println(name + ":" + Person.age);
return;
}
}
class PersonTest {
public static void main(String[] args) {
Person p = new Person("小强", Person.age--);
}
}
输出:
小强:-1
分析:
- 构造器中的return语句的作用是离开当前构造器,不会编译报错
- Person的age是静态变量,不依赖于对象
- Person.age-- 先赋值再运算,所以执行Person构造器时,先将Person.age的值 ’0‘传递给构造器中的形参age,然后再做减一操作,Person.age的值变为-1
- Person构造器中的age(没有加this关键字)和静态变量age不是同一个变量,根据上面的分析,构造器中的age的值为0,所以跳过if中的内容
- 构造方法中没有name变量,所以name是Person对象的成员变量,被赋值为小强
- age = ++age; 操作的是构造器中的age变量
- System.out.println(name + “:” + Person.age); 这里打印的是name的值,和静态变量age,根据前面的分析,静态变量age的值为-1
所以最终输出:小强:-1
ps:从大佬的抖音直接搬运过来,抖音号:Todaystart,不妥之处,还望指正!