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 ...
随机推荐
- ubuntu18.04使用kubeadm部署k8s单节点
实验目的: 体验kubeadm部署k8s服务,全流程体验! 实验环境: ubuntu18.04 联网在线部署 kubeadm 01.系统检查 节点主机名唯一,建议写入/etc/hosts 禁止swap ...
- ad批量上传
import pandas as pd import requests import arrow from collections import deque import json campaign_ ...
- 【Mysql异常】[HY000][1030] Got error 28 from storage engine
原因: 应该是磁盘空间不足导致 可通过 df -h 查看部署mysql的服务磁盘空间使用情况
- 详解CentOS6.7部署Tomcat及主配置文件
Java程序实现部署及应用 POSIX :可移植操作系统,编程操作系统接口规范,实现跨平台编译运行. API:应用程序编程接口 ABI:应用程序二进制接口 描述了应用程序和操作系统之间,一个应用和它的 ...
- SAMBA 服务配置
Samba文件共享服务 Linux系统中一种文件共享程序 在Windows网络环境中,主机之间进行文件和打印机共享是通过微软公司自己的SMB/CIFS网络协议实现的.SMB(Server Messag ...
- linux下activemq安装与配置activemq-5.15.2
linux下activemq安装与配置 前提 配置好jdk环境 一.下载:apache-activemq-5.15.2-bin.tar.gz https://archive.apache.org/ ...
- 逆向破解之160个CrackMe —— 020
CrackMe —— 020 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...
- JQuery学习笔记之选择器
JQuery与DOM对象 <div id="test1" class="test2"></div> DOM对象获取方式: var dom ...
- php长连接和短连接区别
短连接 连接->传输数据->关闭连接(推荐学习:PHP编程从入门到精通) 比如HTTP是无状态的的短链接,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接. 具体 ...
- cmds系统归并缓慢的处理过程 2017-2-16
检查反应较慢的时间段,数据库整体运行情况,从awr报告总看看是否有异常 以上是两个节点的等待事件排行,其中发现cursor: pin S wait on X等待事件类型是并行,切较高,开始分析 ...