浅谈Java之属性赋值的先后顺序

浅谈Java之属性赋值的先后顺序

首先,什么是属性? 属性也叫作成员变量,是类的组成部分之一。 我们都知道Java一个类可以包含有:

属性,或者成员变量 构造器 方法,或者叫函数 代码块,或者叫程序段 内部类

那么结合这些,我们就有了对属性可赋值的位置:

1):默认初始化 2):显示初始化 3):构造器中赋值 4):代码块中赋值 5):有了对象之后,通过“对象.属性“或者“对象.方法”赋值

那么这几种方法的先后顺序如何呢,下面用代码演示: 首先对比默认初始化

package day_12_02;

/**

* @author soberw

*/

public class Student {

//默认初始化

int id;

//显示初始化

int age = 18;

String name = "张三";

//构造器重新赋值

public Student() {

name = "李四";

}

//代码块中赋值

{

name = "王五";

}

//提供set方法

public void setAge(int age) {

this.age = age;

}

}

class StudentTest {

public static void main(String[] args) {

Student student = new Student();

System.out.println("id:" + student.id);

System.out.println("age:" + student.age);

System.out.println("name:" + student.name);

//通过set方法对age属性重新赋值

student.setAge(20);

System.out.println("age:" + student.age);

//通过对象.属法对name属性重新赋值

student.name = "马六";

System.out.println("name:" + student.name);

}

}

运行结果:

不难发现,在显式的赋值后,其默认值就不再显示了,所以① < ② 然后,我们发现获取name属性后,显示的是“李四”,而“李四”是我们在构造器中显示的,“张三”和“王五”都没显示,说明① < ② < ③ 但是当我们通过通过“对象.属性“或者“对象.方法”赋值后,原来的值都发生了变化,因此我们得到① < ② < ③ < ⑤

那么还有一个问题就是,代码块中赋值和显式初始化哪个先执行呢? 下面我们进一步测试:

package day_12_02;

/**

* @author soberw

*/

public class Person {

//声明一个属性

int id = 0;

//代码块中赋值

{

id = 1;

}

}

class PersonTest{

public static void main(String[] args) {

Person p = new Person();

System.out.println(p.id);

}

}

运行结果: 发现是“1”,也就是代码块先执行,可是真的是这样吗? 再看,我把声明属性放在下面:

package day_12_02;

/**

* @author soberw

*/

public class Person {

//代码块中赋值

{

id = 1;

}

//声明一个属性

int id = 0;

}

class PersonTest{

public static void main(String[] args) {

Person p = new Person();

System.out.println(p.id);

}

}

运行结果: 发现又变成“0”了,这是怎么回事呢,其实不难发现,他们的执行顺序是和他们的先后顺序有关的,即谁在前就先执行谁。因此我们最终得出结论:

① < ② / ④ < ③ < ⑤

相关数据

QQ好友如何分类
365bet在线娱

QQ好友如何分类

⌛ 07-01 👁️‍🗨️ 4391
oppor9m二手价格在多少
365bet官方开户

oppor9m二手价格在多少

⌛ 07-10 👁️‍🗨️ 4081
2022世界杯预选赛:巴西队再创辉煌,西班牙历史战绩回顾
365bet官方开户

2022世界杯预选赛:巴西队再创辉煌,西班牙历史战绩回顾

⌛ 07-08 👁️‍🗨️ 7140
乐府杂曲。鼓吹铙歌。苞枿
365bet稳定备用网站

乐府杂曲。鼓吹铙歌。苞枿

⌛ 07-05 👁️‍🗨️ 7038
主队让一球负1:0结果算赢吗?揭秘足球让球规则
365bet稳定备用网站

主队让一球负1:0结果算赢吗?揭秘足球让球规则

⌛ 08-04 👁️‍🗨️ 6808
一图读懂|比赛有“平局”……乒乓球世界杯新赛制
365bet在线娱

一图读懂|比赛有“平局”……乒乓球世界杯新赛制

⌛ 07-05 👁️‍🗨️ 7903