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 ...
随机推荐
- NGINX PHP 报错整理合集
NGINX PHP "No input file specified" 修改php.ini conf cgi.fix_pathinfo=1; 修改nginx.conf,中的fast ...
- Prometheus学习笔记(6)Alertmanager告警
目录 一.Alertmanager简介 二.Alertmanager部署 三.Alertmanager配置 四.自定义告警规则和发送 五.自定义告警模板 一.Alertmanager简介 Promet ...
- 【Spring Boot】Spring Boot之利用Logstash将日志转换成以JSON的格式存储和输出
一.Logstash的作用 Logstash是一个完全开源的工具,它可以对日志进行收集.过滤,能非常方便地将日志转换成以JSON的格式存储和输出,并将其存储供以后使用. 二.整合Logstash的步骤 ...
- Linux操作系统之用户权限,重定向,文件管理
文件的权限 ls -al ----->隐藏文件会以 .号开头 ls -ld :显示目录自身属性 ls -i 显示文件的索引号----每个文件都有一个对应的号码 ls -r 逆序显示 dr-xr ...
- 详解php概念以及主配置文件
浏览器仅能够解码HTML格式的文档,对于非HTML格式的文档,浏览器调用插件或者通过CGI接口调用其他程序来解码. 动态网站: 我们在服务器端或客户端执行了一段脚本或者一段程序,这段程序执行的结果根据 ...
- Android中使用ps命令查看进程PID
adb shell "ps | grep com.sina.weibo" 这个命令可以看到微博的应用线程信息. PID:进程号 PPID:父进程号 VSIZE:进程的虚拟内存大小 ...
- MyBatis-plus的入门学习
MyBatis优势: Sql简单语句可以自由控制,更灵活,性能更高.. sql与代码分离,易于阅读和维护 提供xml标签,支持编写动态sql语句. 劣势: 简单crud操作还是写SQL 语句 xml中 ...
- Intellij IDEA运行报Command line is too long解法
修改项目下 .idea\workspace.xml,找到标签 <component name="PropertiesComponent"> , 在标签里加一行 < ...
- jdk是什么
jdk是对java基础环境和相应开发平台标准和工具包的封装(zip) 开发平台 j2se j2ee j2me; 基础环境: 虚拟机.运行环境 JDK是整个JAVA的核心,包括了Java运行环境JRE( ...
- 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 ...