了解Java中类各个成员的初始化顺序是非常重要的,这样你可以对类有全局的认识。不说太多,直接看下面的例子

class Father

{

static{

System. out.println("父类静态代码块初始化" );

}

{

System. out.println("父类代码块初始化" );

}

private static String s=print();

public static String print()

{

System. out.println("父类静态方法" );

return "父类静态成员变量的初始化" ;

}

public Father()

{

System. out.println("父类无参构造函数初始化完成" );

show();

}

public void show()

{

System. out.println("父类show()方法" );

}

}

class Son extends Father

{

static{

System. out.println("子类静态代码块初始化" );

}

{

System. out.println("子类代码块初始化" );

}

private static  int i=1;

private String s="子类私有成员变量" ;

public void show()

{

System. out.println("子类show()方法:i=" +i);

}

public Son()

{

System. out.println("子类构造函数初始化完成" );

show();

}

}

public class TestClassLoadSeq {

public static void main(String[] args)

{

new Son();

}

}

输出结果:

父类静态代码块初始化

父类静态方法

子类静态代码块初始化

父类代码块初始化

父类无参构造函数初始化完成

子类show()方法:i=1

子类代码块初始化

子类构造函数初始化完成

子类成员变量初始化完成:s=子类私有成员变量

子类show()方法:i=1

从结果可以看出类中各成员初始化的顺序是:

1.如果类中存在继承关系(像 Son 继承 Father)  则首先会初始化导出类(Son)的基类(Father),然后再是导出类

2.在基类首先会初始化静态 的东西  静态块>静态变量  而且只初始化一次 (因为静态的东西都是跟着类的加载而加载的)

3.随后就是初始化导出类的静态东西  跟基类的静态初始化一样(同上)

4.初始化基类无参构造器(调用有参就初始化有参构造器)

5.初始化导出类无参构造器(注意:导出类的成员变量和代码块都是是比构造函数的初始化要早。。看输出结果可知)

在上面输出结果大家可能会看到在基类中的构造器中调用了show() 方法,这样的输出可能不奇怪,我现在改一下。

class Father

{

private static String s= print();

static{

System. out.println("父类静态代码块初始化" );

}

{

System. out.println("父类代码块初始化" );

}

public static String print()

{

System. out.println("父类静态方法" );

return "父类静态成员变量的初始化" ;

}

public Father()

{

System. out.println("父类无参构造函数初始化完成" );

show();

}

public void show()

{

System. out.println("父类show()方法" );

}

}

class Son extends Father

{

static{

System. out.println("子类静态代码块初始化" );

}

{

System. out.println("子类代码块初始化" );

}

private int i =1;

private String s="子类私有成员变量" ;

public void show()

{

System. out.println("子类show()方法:i=" +i);

}

public Son()

{

System. out.println("子类构造函数初始化完成" );

System. out.println("子类成员变量初始化完成:s=" +s);

show();

}

}

public class TestClassLoadSeq {

public static void main(String[] args)

{

new Son();

}

}

输出结果:

子类静态代码块初始化

父类代码块初始化

父类无参构造函数初始化完成

子类show()方法:i=0

子类代码块初始化

子类构造函数初始化完成

子类成员变量初始化完成:s=子类私有成员变量

子类show()方法:i=1

可以看出跟上面的代码没有什么不同,唯一的不同就是我把导出类中的静态成员变量i 变成了成员变量i,可以看出结果是截然不同,现在的结果是:0

原因:因为上面的静态成员变量是跟着类的加载而初始化的  所以结果是1  而下面的是 成员变量又因为现在还在基类构造器中所以导出类中的成员变量还没有得到初始化  所以是0

所以上面的初始化顺序不够完整,现在补全下:

首先jvm加载类时 会对每个对象的默认初始化 为0  ,对通过组合方式的引用类型 默认初始化为 null

总结:

java中首先初始化基类在初始化导出类(有多少个基类初始化多少个)

如果那里有错误希望大家帮忙提出了大家一起学习(自己也在学习中。。。。)。

提示:  java中的各成员初始化的顺序是非常重要的,很好的掌握对以后的学习非常有帮助

php键顺序初始化,Java类中各成员初始化的顺序相关推荐

  1. java类中各成员初始化的顺序

    了解java中类各个成员的初始化顺序是非常重要的,这样你可以对类有全局的认识.不说太多,直接看下面的例子 class Father {static{System. out.println(" ...

  2. Java类中各成员的执行顺序

    属性.方法.构造方法和自由块都是类中的成员,在创建对象时,各成员的执行顺序如下: (1)父类静态成员和静态初始化块,按在代码中出现的顺序依次执行. (2)子类静态成员和静态初始化块,按在代码中出现的顺 ...

  3. Java 类中各成分加载顺序和内存中的存放位置

    一.什么时候会加载类? 使用到类中的内容时加载:有三种情况 1.创建对象:new StaticCode(); 2.使用类中的静态成员:StaticCode.num=9; StaticCode.show ...

  4. Java类的各种成员初始化顺序

    初始化规则 1.父类[静态成员]和[静态代码块],按在代码中出现的顺序依次执行. 2.子类[静态成员]和[静态代码块],按在代码中出现的顺序依次执行. 3.父类的[普通成员变量被普通成员方法赋值]和[ ...

  5. 【Java 虚拟机原理】Java 类中的类加载初始化细节 ( 只使用类中的常量时加载类不会执行到 ‘初始化‘ 阶段 )

    文章目录 一.类加载初始化时机 二.常量加载示例 三.数组加载示例 一.类加载初始化时机 类加载时机 : Java 程序执行时 , 并不是一开始将所有的字节码文件都加载到内存中 , 而是用到时才进行加 ...

  6. Java类中方法的加载顺序

    1 父类 public class Father {static {System.out.println("父类静态初始化块1");}public static int fsm = ...

  7. java类中,成员变量赋值第一个进行,其次是静态构造函数,再次是构造函数

    如题是结论,如果有人问你Java类的成员初始化顺序和初始化块知识就这样回答他.下面是代码: package com.test;public class TestClass{// 成员变量赋值第一个执行 ...

  8. java类中数据成员

    一.数据成员特点 --表示java类的状态 --声明数据成员必须指定变量名以及所属类型,同时还可以指定其他属性 --数据成员的类型可以是基本数据类型,byte,short,char,int,long, ...

  9. [转载] Java 语言中的实例初始化块 ( IIB) 详解

    参考链接: Java中的实例初始化块(IIB) 在 Java 语言中的类初始化块 文章中我们简单的介绍了下 Java 中的实例初始化块 ( IIB ).不过我觉得介绍的有点简单了,于是,再写一篇文章详 ...

最新文章

  1. 在C#里实现DATAGRID的打印预览和打印
  2. Android Studio创建项目
  3. 从安全视角对机器学习的部分思考
  4. vue切换路由时动画
  5. NLP:利用DictVectorizer对使用字典存储的数据进行特征抽取与向量化
  6. 通过PageSpeed优化网站性能
  7. 深度思考的能力,决定了你能走多远
  8. Qt工作笔记-QTabWidget插入widget(重要的是编程思想)
  9. format函数_畅游人工智能之海 | Keras教程之后端函数(一)
  10. java keytool详解
  11. php 删除判断是否存在,PHP – 判断utf-8编码是否存在BOM并自动删除
  12. 易接SDK流程记录以及AndroidManifest解析(无干货)
  13. 央视记者点赞京东物流 仓库分拣员变身时尚白领管理300个机器人
  14. CEPH OSD_SCRUB_ERRORS 错误处理
  15. JSHOP2学习4:浅谈与SHOP2的区别
  16. 音视频开发工程师学习之路
  17. 以阿里IoT开发物联网和应用平台
  18. 2345浏览器兼容性设置在哪里
  19. 一个完整的软件项目开发流程是怎样的呢
  20. 电脑上写一天工作汇报表时用哪个办公便签软件?

热门文章

  1. pandas以前笔记
  2. [转载]Tensorflow 的reduce_sum()函数的axis,keep_dim这些参数到底是什么意思?
  3. Android Animation (安卓动画)概念简介
  4. 如何将算子添加到Relay
  5. TensorFlow神经网络集成方案
  6. 数据结构算法 简单的面试思考题
  7. MySQL数据库+命令大全+常用操作
  8. python 读取excel 表格的数据
  9. 大话设计模式笔记(七)の原型模式
  10. 阿里云物联网 .NET Core 客户端 | CZGL.AliIoTClient:7. 服务调用