首先,什么是属性?
属性也叫作成员变量,是类的组成部分之一。
我们都知道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. Shelll1-基础入门之变量

    1.静态语言:编译型语言 强类型(变量) 事先转换成可执行格式 也就是先编译在执行 比如 C++.C. java C# 动态语言:解释性语言 弱类型 边解释边执行 比如PHP shell python ...

  2. mysql语句1-创建库和表

    一.DDL数据定义语言 就是对书库内部的对象进行创建.删除.修改等操作的语言. 关键字:create  drop  alter 1.连接数据库 mysql -u用户名 -p -h指定主机(不指定默认是 ...

  3. Linux_接收文件(rz)和发送文件(sz)

    我们连接linux通常是使用一些ssh工具进行远程访问连接的,在使用过程中,少不了将本地文件上传到linux或将linux上的文件下载到本地,每次使用ftp比较繁琐而且浪费时间.我们可以使用linux ...

  4. js 中&&的使用

    遇到下列代码goHome && (await router.replace(PageEnum.BASE_HOME)); &&这个逻辑与的作用是,当goHome为true ...

  5. 在安装pdfplumber时报错 Microsoft Visual C++ 14.0 is required.

    在安装pdfplumber时报下列错误: 解决方法:     更新pip ,因为pip 版本太旧 来自为知笔记(Wiz)

  6. django 项目中使用markdown编辑器

     第一步: 修改models.py文件下要显示字段的类型为TextField 第二步:运行命令: python manage.py makemigrations 和 python manage.py ...

  7. Django_模板中的URL参数化(四)

    去除模板中的硬编码 URL 在案例中的 test1/templates/booktest/index.html 文件里编写的链接都硬编码的链接,比如: <a href="/bookte ...

  8. 读取 properties 配置文件含有中文的value内容 导致中文乱码 的解决办法

    1.前言 因为装系统的时候把中文写在了系统路径,现在我想把这个路径写在properties里面来读取,可是 发现java 读取会导致中文乱码成 问号????的乱码  ,百度找了好多博客,基本都是一摸一 ...

  9. js中数字和字母互转的方法

    var letter = String.fromCharCode(66); // B var num = "B".charCodeAt(); // 66

  10. 【vps】教你写一个属于自己的随机图API

    [vps]教你写一个自己的随机图API 前言 刚刚开始使用halo博客的时候,我就发现halo博客系统是可以使用随机图当背景的,所以也是使用了网上一些比较火的随机图API. 在上次发现了各种图片API ...