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 ...
随机推荐
- 【Git版本控制】Git初始化一个仓库
git init //初始化一个本地库 git add -A//将所有的文件添加到暂存区 git commit -m “首次提交” //将暂存区的文件提交到版本库 git remote add ori ...
- springboot 集成J2Cache
J2Cache 是 OSChina 目前正在使用的两级缓存框架.第一级缓存使用 Ehcache,第二级缓存使用 Redis .由于大量的缓存读取会导致 L2 的网络成为整个系统的瓶颈,因此 L1 的目 ...
- jwt揭秘(含源码示例)
JSON Web Tokens,是一种开发的行业标准 RFC 7519 ,用于安全的表示双方之间的声明.目前,jwt广泛应用在系统的用户认证方面,特别是现在前后端分离项目. 1. jwt认证流程 ...
- Kali 安装tightvncserver
一.软件说明 a) tightvncserver是一个轻量级,只能建立桌面,不能查看TTY7/TTY1正在显示的桌面,但x11 vnc可以,相比x11vnc 安全传输差一些.反之,x11 vnc:安全 ...
- ELK快速入门(五)配置nginx代理kibana
ELK快速入门五-配置nginx代理kibana 由于kibana界面默认没有安全认证界面,为了保证安全,通过nginx进行代理并设置访问认证. 配置kibana [root@linux-elk1 ~ ...
- 我的GitHub:https://github.com/javaFesh?tab=repositories
https://github.com/javaFesh?tab=repositories
- seaborn---调色板
一.样式控制 1.set([context,style,palette,font,...]) 一步设定美学参数. 2.axes_style([style,rc]) 返回参数字典,用于绘图的美学风格. ...
- PHP中的匿名类
许久不练,要写起来. <?php //匿名类, 同样可以使用继承,接口,特性 //内部匿名类使用外部类的方法和属性,通过继承或构造方法传参 $object = new class { publi ...
- Educational Codeforces Round 65 (Rated for Div. 2)题解
Educational Codeforces Round 65 (Rated for Div. 2)题解 题目链接 A. Telephone Number 水题,代码如下: Code #include ...
- 【大数据】HBase环境
参考资料:https://www.cnblogs.com/frankdeng/p/9310191.html 主节点挂了 HBase服务访问:http://192.168.1.180:16010/mas ...