今天在面向对象这里学到了几种赋值方法,由此得到不同的属性赋值方法所执行的顺序也是不同的,所以想要记录一下。
/**
* @ClassName UserTest
* @Description
* 总结属性赋值的先后顺序:
* 1、默认初始化
* 2、显式初始化
* 3、构造器中初始化
* 4、通过"对象.方法"或"对象.属性"赋值
*
* 以上操作的先后顺序:1、2、3、4
* @Author zzwwss
* @Date 2023/9/26 20:18
* @Version 1.0
*/
public class UserTest {
public static void main(String[] args) {
User test = new User();
User test1 = new User(2);
test1.setAge(3);//加入这条语句以后,可以发现答案是3 3 1,从而得出对象.方法或者对象.属性的先后顺序在最后
System.out.println(test1.getAge());
System.out.println(test1.age);//2(注:没有加入"对象.方法"或"对象.属性"时)
// 可以得出age是由1被覆盖得到的2,所以构造器初始化先后顺序在显式初始化后边
System.out.println(test.age);//1 从显示得到的1,所以可以得出显示初始化在隐式初始化的后边
}
}
class User{
//默认初始化
String name;
//显式初始化
int age=1;
//构造器初始化
public User(int a){
age = a;
}
//默认构造器
public User(){
}
//方法
public void setAge(int a){
age = a;
}
public int getAge(){
return age;
}
}
解析:创建一个UserTest主类和User类,第一次运行前,先把test1.setAge(3) 和 System.out.println(test1.getAge())注释掉不运行,因为我们需要先判断出前三种赋值方法的先后顺序
test1.age的值为2,可以得出age是由1被覆盖得到的2,所以构造器初始化先后顺序在显式初始化后边,test.age的值为1,因为是从默认初始化的0被显示初始化覆盖得到的1,所以可以得出显示初始化在默认初始化的后边
第二次运行
可以发现test1.getAge和test1.age是3 3 ,可以看出对象.方法得到的值3覆盖掉了前边的所有值,所以可以得出对象.方法或者对象.属性的先后顺序在最后
重要的是看覆盖的规律从而得到先后顺序
对构造器的特点记录一下:
说明: * 1、如果没有显式的定义类的构造器的话,则系统默认提供一个空参的构造器 * 2、定义构造器的格式:权限修饰符 类名(形参列表){} * 3、一个类中定义的多个构造器,彼此构成重载 * 4、一旦我们显示的定义了类的构造器,那么系统将不再提供一个默认的空参构造器。注:即使我们将显示的定义语句注释掉,也将无济于事 * 5、一个类中至少会有一个构造器,可能是默认的,也可能是你自己创造的