首先,什么是属性?
属性也叫作成员变量,是类的组成部分之一。
我们都知道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”了,这是怎么回事呢,其实不难发现,他们的执行顺序是和他们的先后顺序有关的,即谁在前就先执行谁。因此我们最终得出结论:

① < ② / ④ < ③ < ⑤

浅谈Java之属性赋值的先后顺序的更多相关文章

  1. 浅谈Java类中的变量初始化顺序

    一.变量与构造器的初始化顺序 我们知道一个类中具有类变量.类方法和构造器(方法中的局部变量不讨论,他们是在方法调用时才被初始化),当我们初始化创建一个类对象时,其初始化的顺序为:先初始化类变量,再执行 ...

  2. 浅谈java类集框架和数据结构(2)

    继续上一篇浅谈java类集框架和数据结构(1)的内容 上一篇博文简介了java类集框架几大常见集合框架,这一篇博文主要分析一些接口特性以及性能优化. 一:List接口 List是最常见的数据结构了,主 ...

  3. 浅谈Java中的final关键字

    浅谈Java中的final关键字 谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字.另外,Java中的String类就是一个final类,那么今天我们就来 ...

  4. 龙生九子-浅谈Java的继承

    龙生九子-浅谈Java的继承 书接上回,我们之前谈过了类和对象的概念,今天我来讲一讲面向对象程序设计的另外一个基本概念-继承 目录 为什么需要继承 自动转型与强制转型 继承能干啥 复写和隐藏 supe ...

  5. 浅谈Java中的对象和引用

    浅谈Java中的对象和对象引用 在Java中,有一组名词经常一起出现,它们就是“对象和对象引用”,很多朋友在初学Java的时候可能经常会混淆这2个概念,觉得它们是一回事,事实上则不然.今天我们就来一起 ...

  6. 浅谈JAVA集合框架

    浅谈JAVA集合框架 Java提供了数种持有对象的方式,包括语言内置的Array,还有就是utilities中提供的容器类(container classes),又称群集类(collection cl ...

  7. 浅谈Java中的深拷贝和浅拷贝(转载)

    浅谈Java中的深拷贝和浅拷贝(转载) 原文链接: http://blog.csdn.net/tounaobun/article/details/8491392 假如说你想复制一个简单变量.很简单: ...

  8. !! 浅谈Java学习方法和后期面试技巧

    浅谈Java学习方法和后期面试技巧 昨天查看3303回复33 部落用户大酋长 下面简单列举一下大家学习java的一个系统知识点的一些介绍 一.java基础部分:java基础的时候,有些知识点是非常重要 ...

  9. 浅谈Java中的深拷贝和浅拷贝

    转载: 浅谈Java中的深拷贝和浅拷贝 假如说你想复制一个简单变量.很简单: int apples = 5; int pears = apples; 不仅仅是int类型,其它七种原始数据类型(bool ...

随机推荐

  1. MATLAB 错误之生成step图表出错

    m文件: step(Gi_close) hold on 错误示例: 使用step函数生成图表后,报错如下: Plots must be of the same type and size to be ...

  2. centos7.5上安装go1.13.4

    一.安装 1.下载go1.13.4.linux-amd64.tar.gz 先进入官网https://golang.google.cn/ 再 https://golang.google.cn/doc/i ...

  3. [转]axios请求超时,设置重新请求的完美解决方法

    自从使用Vue2之后,就使用官方推荐的axios的插件来调用API,在使用过程中,如果服务器或者网络不稳定掉包了, 你们该如何处理呢? 下面我给你们分享一下我的经历. 具体原因 最近公司在做一个项目, ...

  4. css编写规则BEM

    简单来说,格式如下: .block { /* styles */ } .block__element { /* styles */ } .block--modifier { /* styles */ ...

  5. 关于APP设计规范和一些图层命名

    首先,本人大学计算机专业出身,学过编程,工作的时候做过 产品经理,设计师,前端工程师,对工作的流程都有一些见解. 现在主攻前端工程师,做Web APP.今天收到设计师的设计稿,一看图层分类,这让我感觉 ...

  6. 07.python函数作用域global、nonlocal、LEGB

    函数作用域 作用域 一个标识符的课件范围,这就是标识符的作用域,一般常说的是变量的作用域 def foo():    x = 100 print(x) # 可以访问到吗 上例中x不可以访问到,会抛出异 ...

  7. 【从小白到专家】Istio技术实践专题(四):应用接入Istio的正确姿势

    上一篇文章中,我们介绍了Istio针对单集群的三种主流部署安装方式:使用Istioctl安装.使用Helm自定义安装.独立Operator安装.本文将向大家介绍kubernetes中的应用接入Isti ...

  8. 【Java】Super

    Super super用于调用父类的属性.方法.构造器,与this相同. super的使用 属性与方法 在子类的方法或构造器中.通过使用"super.属性"或"super ...

  9. C++ 基本类型的大小

    C++的基本类型: char bool (unsigned) short (int) (unsigned) int (unsigned) long (int) (unsigned) long long ...

  10. 集合框架-ArrayList集合存储自定义对象

    1 package cn.itcast.p3.arraylist.test; 2 3 import java.util.ArrayList; 4 import java.util.Iterator; ...