截止目前,我们讲了很多位置都可以对类的属性进行赋值。现在总结几个可以用来进行赋值的操作,并且找到先后顺序。
属性赋值方式有:
- 默认初始化
- 显式初始化
- 构造器中赋值
- 通过“对象.方法” 或者 “对象.属性”的方式赋值
判断属性赋值顺序:
首先默认初始化肯定是先执行的,因为一声明该属性,系统就会给属性上默认初始化值。
//1. 默认初始化
public class Test {
public static void main(String[] args) {
User u1 = new User();
//默认初始化值
System.out.println(u1.age); //输出默认值 0
}
}
class User{
//未赋值
String name;
int age;
}
接下来我们先看显式赋值和构造器赋值:
//2. 我们先让显式赋值输出
public class Test {
public static void main(String[] args) {
//未进行构造器赋值
User u1 = new User();
//输出显式赋值
System.out.println(u1.age); // 1
}
}
class User{
String name;
//先进行显式赋值
int age = 1;
//定义好的构造器
public User() {}
public User(int age) {
this.age = age;
}
}
//3. 构造器赋值,覆盖了我们的显式赋值
public class Test {
public static void main(String[] args) {
//进行构造器赋值
User u1 = new User(2);
//输出结果 为2
System.out.println(u1.age);
}
}
class User{
String name;
//先进行显式赋值
int age = 1;
//再使用定义好的构造器
public User() {}
public User(int age) {
this.age = age;
}
}
最后看通过“对象.属性” 或者 “对象.方法” 的方式调用赋值:
public class Test {
public static void main(String[] args) {
//进行构造器赋值
User u1 = new User(2);
//输出结果 为2
System.out.println(u1.age);
System.out.println("--前后分割线--");
//最后使用对象.属性赋值
u1.age = 3;
//输出结果 为3
System.out.println(u1.age);
}
}
class User{
String name;
//先进行显式赋值
int age = 1;
//再使用定义好的构造器
public User() {}
public User(int age) {
this.age = age;
}
}
总结:
我们可以从上述的操作中发现,属性赋值的先后顺序是(默认初始化 --> 显式初始化 --> 构造器中赋值 --> 通过“对象.方法”或者“对象.属性”的方式,赋值)