Java类成员初始化顺序
类中包含7中成员:
1、静态变量 static
2、final静态常量 final static
3、静态代码块 static{} //多个代码块顺序执行
4、普通变量
5、普通代码块 {} //多个代码块顺序执行
6、构造方法
7、普通方法
类中成员初始化方式(排出7):
非继承类中:
首先执行1/2/3,执行顺序为顺序执行(谁在前先执行谁)。
之后执行4/5,执行顺序为顺序执行(谁在前先执行谁)。
然后执行6(默认执行无参构造方法)。
继承类中:
首先执行父类1/2/3,执行顺序为顺序执行(谁在前先执行谁),
随即执行子类1/2/3,执行顺序为顺序执行(谁在前先执行谁)。
之后执行父类4/5,执行顺序为顺序执行(谁在前先执行谁),
然后执行父类6(如果子类没有调用父类构造方法,则默认调用父类默认无参构造方法)。
随即执行子类4/5,执行顺序为顺序执行(谁在前先执行谁)。
然后执行子类6。
代码:
* 每个属性设置断点,启动后可以观察执行顺序。
父类:
package com.lookcoder.haircutmember.vo;
public class TRoleVoAFather {
private String nameFather = "12";
private Integer ageFather = 1;
private int ageiFather = 1;
{
System.out.println("father defualt method block2");
}
private String defualtInitFather = getDefaultInit();
{
System.out.println("father defualt method block1");
}
private String getDefaultInit() {
return "father default init";
}
// ----------------------------------------------------------------------------
private static String aFather = "2";
private final static String aaFather = getFinalStatic();
static {
System.out.println("father default static method2");
}
private static Integer bFather = 1;
static {
System.out.println("father default static method1");
}
private final static Integer bbFather = 2;
private static String getFinalStatic() {
return "father final static aa";
}
private final static Boolean bo = true;
// ----------------------------------------------------------------------------
TRoleVoAFather() {
System.out.println("father default construct");
}
TRoleVoAFather(String name, Integer age) {
this.nameFather = name;
this.ageFather = age;
}
// ----------------------------------------------------------------------------
public void abc() {
System.out.println("abc method!");
}
}
子类:
package com.lookcoder.haircutmember.vo;
public class TRoleVoA extends TRoleVoAFather{
private int agei = 1;
{
System.out.println("defualt method block2");
}
private Integer age = 1;
{
System.out.println("defualt method block1");
}
private String name = "12";
private String defualtInit = getDefaultInit();
private String getDefaultInit() {
return "default init";
}
// ----------------------------------------------------------------------------
private final static Integer bb = 2;
private final static String aa = getFinalStatic();
private static String getFinalStatic() {
return "final static aa";
}
private final static Boolean bo = true;
private static String a = "2";
private static Integer b = 1;
static {
System.out.println("default static method2");
}
static {
System.out.println("default static method1");
}
private static Integer b11= 1;
// ----------------------------------------------------------------------------
TRoleVoA() {
System.out.println("default construct");
}
TRoleVoA(String name, Integer age) {
super(name, age);
this.name = name;
this.age = age;
}
// ----------------------------------------------------------------------------
public void showDefault() {
System.out.println("show default method!");
}
}
启动类:
package com.lookcoder.haircutmember.vo;
public class TRoleVoARun {
public static void main(String[] args) {
TRoleVoA tRoleVo = new TRoleVoA("123", 123);
tRoleVo.showDefault();
}
}
Java类成员初始化顺序的更多相关文章
- 图示Java类的初始化顺序
Java类的初始化顺序 在开发中,知道Java类的初始化顺序才能让我们更加清楚地掌握程序的执行流程.先把结论贴出来,Java里,从图里的1~6,分别按顺序执行. 以下为代码验证阶段,一共三个类 ...
- java类的初始化顺序
在java中,当我们new一个对象时,对象中的成员,初始化块以及构造方法的加载是有一定的顺序的,看下面一副图: 一.单类(无基类)下的初始化顺序: public class Parent { stat ...
- java小心机(5)| 浅谈类成员初始化顺序
类成员什么时候会被初始化呢?一般来说:"类的代码在初次使用时才被加载",加载过程包括了初始化. 比如说new A()调用构造函数时,类中全部成员都会被初始化. 但对于static域 ...
- Java类的初始化顺序 (静态变量、静态初始化块、变量、初始...
很有意思的一篇文章 1.没有继承 静态变量->静态初始化块->变量->变量初始化块->构造方法 2.有继承的情况 父类静态变量->父类静态初始化块->子类静态变量- ...
- C#的类成员初始化顺序
C#的类成员的定义和声明如下 using UnityEngine; using System.Collections; public class TestController : ECControll ...
- C#类成员初始化顺序
这里直接给出C#类成员一般初始化顺序: 子类静态字段 子类静态构造 子类实例字段 父类静态字段 父类静态构造 父类实例字段 父类实例构造 子类实例构造 为什么说是"一般"初始化顺序 ...
- java 类的初始化顺序
有父类 1. 父类static成员变量 2. 父类static块 3. 父类非static成员 4. 父类非static块 5. 父类构造方法 子类,也按照1-5顺序执行 无父类 1. static成 ...
- C#类和类成员初始化顺序
1.不带静态成员的普通类,首先通过构造函数初始化. 2.带静态属性的类,无论是普通类还是静态类,都会先初始化静态字段,再执行构造函数. 3.类初始化时,不会执行类中方法,无论是否是静态.若想执行方法, ...
- Java 类成员的初始化顺序
Java 类成员的初始化顺序 前言:开发中碰到一个Java文件中有很多的成员变量,包括静态和非静态的,还有很多的初始化方法,很好奇这些成员的初始化顺序,在这里作个研究. 1 无继承情况下的Jav ...
随机推荐
- mysql 使用 MD5函数 校验账号密码
项目中账号密码需要加密操作,数据库用户表账号是明文,密码是密文,但是前端传递过来的都是密文,所以需要到数据库中加密账号和前端传递过来的密文做校验. 这时候就可以使用md5函数. 使用案例: SELEC ...
- tp5 模型中配置数据库连接信息
namespace app\api\model; use think\Model; class BaseModel extends Model { protected $connection = [ ...
- Unity 渲染教程余下
可能来源于(英文):https://catlikecoding.com/unity/tutorials/ Unity渲染教程(一):矩阵 http://gad.qq.com/pro ...
- 项目Beta冲刺(团队)--4/7
课程名称:软件工程1916|W(福州大学) 作业要求:项目Beta冲刺 团队名称:葫芦娃队 作业目标:进行新一轮的项目冲刺,尽力完成并完善项目 团队博客 队员学号 队员昵称 博客地址 04160242 ...
- React Virtual DOM Explained in Simple English
If you are using React or learning React, you must have heard of the term “Virtual DOM”. Now what is ...
- ABAP_DEMO篇33 SUM和COLLECT的用法
ABAP程序内表中的数量和金额字段 经常会需要合计, SUM和COLLECT 语法都能实现对数量和金额字段的合计. 1. SUM语法 ABAP中SUM语句比不上EXCEL里的强大:SUM只能在loo ...
- Json提取器(Json Extractor)
Variable names:保存的变量名,后面使用${Variable names}引用 JSON Path expressions:调试通过的json path表达式 Match Numbers ...
- OKR案例——不同类型的OKR实例
OKR是一种能将团队调动起来一起向着一个方向去努力的绝佳目标管理法,它让我们的团队去挑战自己的极限,去实现更大的价值,去将我们的战略最完美的转化为成果. 然而,想要让OKR在我们的团队中发挥作用,制定 ...
- 大数定律(Law of Large Numbers)
大数定律:每次从总体中随机抽取1个样本,这样抽取很多次后,样本的均值会趋近于总体的期望.也可以理解为:从总体中抽取容量为n的样本,样本容量n越大,样本的均值越趋近于总体的期望.当样本容量极大时,样本均 ...
- 中心极限定理(Central Limit Theorem)
中心极限定理:每次从总体中抽取容量为n的简单随机样本,这样抽取很多次后,如果样本容量很大,样本均值的抽样分布近似服从正态分布(期望为 ,标准差为 ). (注:总体数据需独立同分布) 那么样本容量n应 ...