前言

在听课时遇到的一个复杂的类初始化实例问题,在这里进行总结和反思,也是为了更好的可以回看

问题-1

小试牛刀O(∩_∩)O

  • 主方法实例化Hongtao类

答案为:
getPhone
初始化块
构造函数

小结: 静态>类加载>类构建;所以静态方法加载完后,从上到下执行代码。调用getPhone() 先输出getPhone,初始化块属于类加载过程,所以先于构造函数执行。

问题-2

进阶版

答案:
getPhone
静态代码块
getPhone
初始化块
构造函数

小结 :在此问题中多出来静态变量和静态初始化块的部分,需要注意的是,静态的方法也是调用时才会使用,所有静态的变量和初始化块也要按照从上到下的执行顺序。

问题-3

终极版

public class InitalDemo {private static int k = 1;private static InitalDemo t1 = new InitalDemo("t1");private static InitalDemo t2 = new InitalDemo("t2");private static int i=print("i");private static int n = 99;{print("初始化块");j=100;}public InitalDemo(String str){System.out.println((k++)+":" + str + "   i="+i+ "   n=" + n);++i;++n;}static {print("静态块");n=100;}private int j = print("j");public static int print(String str){System.out.println((k++)+":" + str + "   i="+i+ "   n=" + n);++n;return ++i;}public static void main(String[] args) {InitalDemo test = new InitalDemo("test");}
}

答案:
1:初始化块 i=0 n=0
2:j i= 1 n =1
3:t1 i=2 n=2
4:初始化块 i=3 n=3
5:j i=4 n=4
6:t2 i=5 n=5
7:i i=6 n=6
8:静态块 i=7 n=99
9:初始化块 i=8 n=100
10:j i=9 n=101
11:test i=10 n=102

小结

  • 此问题相对于上面一个,增加了类内调用构造函数,需要记住此时,每遇到一个调用构造函数则执行一遍类内非静态的语句,比如此问题中的初始化块>赋值>构造函数。
  • 静态变量属于所有类,所有类中的静态变量都指向同一个地址

总结:

首先static修饰的成员变量和方法是从属于类的, 而普通变量和方法是从属于对象的,在调用某个类的构造方法之前,应该先加载类信息,包括初始化块!之后才能创建对象!

static 优先,但遇到new 则从上到下执行一次非静态初始化语句和初始化块和相应的构造函数

  • 当进一步涉及到继承关系时

静态优先,构造随后, 先父再子

父类静态代码块 ->子类静态代码块 ->父类非静态代码块 -> 父类构造函数 -> 子类非静态代码块 -> 子类构造函数

Java -基础知识之类的初始化顺序相关推荐

  1. java基础之——类的初始化顺序(转载)

    原文地址:http://www.cnblogs.com/chrischennx/p/3612295.html 由浅入深,首先,我们来看一下,一个类初始化有关的都有些啥米: 静态成员变量.静态代码块.普 ...

  2. 《Java基础知识》Java变量的声明、初始化和作用域

    <Java基础知识>Java变量的声明.初始化和作用域 一.Java变量的声明 在 Java 程序设计中,每个声明的变量都必须分配一个类型.声明一个变量时,应该先声明变量的类型,随后再声明 ...

  3. 【转】Java基础知识整理

    本博文内容参考相关博客以及<Java编程思想>整理而成,如有侵权,请联系博主. 转载请注明出处:http://www.cnblogs.com/BYRans/ PDF版下载链接:<Ja ...

  4. java 基础知识总结

    Java基础知识总结 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java语言代码把思 ...

  5. 【转】java基础知识总结

    Java基础知识总结 本博文内容参考相关博客以及<Java编程思想>整理而成,如有侵权,请联系博主. 转载请注明出处:http://www.cnblogs.com/BYRans/ PDF版 ...

  6. java(5)---Java基础知识大全

    Java基础知识大全 一.基础知识:  1.JVM.JRE和JDK的区别:  JVM(Java Virtual Machine):java虚拟机,用于保证java的跨平台的特性.  java语言是跨平 ...

  7. 黑马程序员--java基础知识注意点收录

    java基础知识注意点收录 1.使用path设置路径时,为避免由于虚拟机存放位置的不同而改变设置路径时造成意外的其他错误,使用变量 JAVA_HOME记住虚拟机的位置,然后在path中通过%JAVA_ ...

  8. Java基础知识(九) 容器

    Java基础知识 1. Java Collections 框架是什么 2. 什么是迭代器 3. ArrayList.Vector 和 LinkedList 有什么区别 4. HashMap.Hasht ...

  9. Java基础知识(一) 基本概念

    Java基础知识 基本概念 1. Java语言的优点 2. Java与c/c++有什么异同 3. 为什么需要public static void main(String[] args)这个方法 4. ...

最新文章

  1. 走向管理:建立工作汇报机制
  2. DOM基础操作(二)
  3. 树莓派远程监控的实现
  4. 哲学家就餐问题(如何避免死锁)(多线程版)
  5. 高德sdk_联手HERE,高德进军地图海外市场 | CES 2020
  6. unity 使用mysql实现登录注册_用mysql实现登录注册功能
  7. c语言中0级和1级是什么意思啊,C语言处理指针问题中,二级指针与一级指针的区别是什么?...
  8. python获取命令行参数_Python获取命令行参数的正确方法,案例详解
  9. UFLDL 教程学习笔记(二)反向传导算法
  10. Windows 7的上帝模式
  11. linux系统下编译cpp文件,使其成为可执行文件
  12. U盘做启动盘后无法格式化使用
  13. win10修改用户名_大神帮您win10系统用户文件夹改名的修复方法
  14. Ros学习笔记(一)Ros中HelloWorld实现(C++/Python)
  15. 修改MP4文件二进制内容,实现安卓Camera2旋转录制视频画面功能
  16. 计算机硬件评分,用于电脑硬件性能参考的Win8.1系统体验评分找回方法
  17. 安装VC,NTVDM CPU 遇到无效指令 --绝对能用的解决方法
  18. Datawhale组队学习周报(第028周)
  19. Reac生命周期钩子之getSnapshotBeforeUpdate
  20. MATLAB导入Excel时间格式

热门文章

  1. 分治法与蛮力法求最近点对问题(分治法时间复杂度O(nlogn))
  2. 张钹院士:视觉智能距离人类的视觉感知还差得很远
  3. LANDR:在线母带处理
  4. 忘不了手机随身私密管家发布,再也不用费心记密码
  5. 国家测绘地理信息局黑龙江基础地理信息中心----网站访问情况
  6. 嘉立创PCB工艺参数
  7. Android平台上实现银行卡识别(通过阿里云Api-印刷文字识别_银行卡识别)
  8. Volley简介(一)
  9. python 评论分析_如何利用python实现用户评论挖掘并分析
  10. 桂林电子科技大学的计算机专业排名全,2018桂林电子科技大学专业排名及分数线 王牌专业有哪些...