`
fantaxy025025
  • 浏览: 1311492 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

java初始化顺序和原理简记

阅读更多

参加过大大小小的笔试,总觉得公司对笔试这个东西也许很无奈。如果不笔试,怕面试失误导致选拔的人技术很一般;如果笔试,选拔到背题的人几率也不小。

 

Java初始化顺序,这个题目估计是个笔试就都会考到。以至于倒背如流者数不胜数。

从始化顺序的原理,来解释,来理解,或许更好~

 

http://java-admin.iteye.com/blog/167684 博文对初始化顺序实践的很不错:

JAVA 类首次装入时,会对静态成员变量或方法进行一次初始化,但方法不被调用是不会执行的,静态成员变量和静态初始化块级别相同,非静态成员变量和非静态初始化块级别相同。
先初始化父类的静态代码--->初始化子类的静态代码-->
(创建实例时,如果不创建实例,则后面的不执行)初始化父类的非静态代码--->初始化父类构造函数--->初始化子类非静态代码--->初始化子类构造函数
2 、类只有在使用New调用创建的时候才会被JAVA 类装载器装入
3、创建类实例时,首先按照父子继承关系进行初始化
4、类实例创建时候,首先初始化块部分先执行,然后是构造方法;然后从本类继承的子类的初始化块执行,最后是子类的构造方法
5、类消除时候,首先消除子类部分,再消除父类部分


顺序简记:
1.  父类静态成员和静态初始化块 ,按在代码中出现的顺序依次执行
2.  子类静态成员和静态初始化块 ,按在代码中出现的顺序依次执行
3.  父类实例成员和实例初始化块 ,按在代码中出现的顺序依次执行
4.  父类构造方法
5.  子类实例成员和实例初始化块 ,按在代码中出现的顺序依次执行
6.  子类构造方法

 

试着从原理上来分析:

1. 类的成员有method、field、innerClass等,分别又有静态和非静态两种

2. 静态成员是给类用的,非静态成员是给对象用的(对象如果使用静态成员编译会提示)

3. 类只要被用到,就会加载;必须先加载后使用

4. 使用类有两种,一种是只使用类的静态成员而不构造对象,这样的话就不需要初始化非静态的成员了;第二种是构造对象,构造对象必须先加载类,此时非静态成员在加载时也就初始化了,之后初始化非静态成员

5. 为什么先初始化静态成员,后初始化非静态成员

    静态成员是一次性加载的,而且只加载一次;非静态成员可以使用静态成员,这样必须保证在非静态成员可能用到静态成员之前初始化完毕

6. 为什么先初始化父类,后初始化子类

    子类可能用到父类的方法,必须保证子类使用之前是得父类可能用到的成员初始化完毕。

    (1)使用子类静态成员时,不能使用子类自己的非静态成员,不能使用父类的非静态成员,只可能使用到父类的静态成员;这也解释了为什么加载子类(第一次使用子类)时,父类的非静态成员没有初始化

    (2)使用子类的非静态成员时,可能用到子类自己的静态成员、父类的静态成员、父类的非静态成员

7. 为什么先初始化成员,后初始化构造函数

    在构造函数中,可以对成员进行赋值,也可以不进行操作,但是可以使用非静态成员。因此必须保证构造函数可能用到的成员先初始化,否则就会报错。

8. 为什么父类构造方法执行要在子类非静态成员之前

    子类非静态成员可能用到父类的非静态成员,而父类的非静态成员有可能是要在构造函数中才能正确初始化的,默认的初始化值可能不是理想的。构造函数的目的更多的是为了根据实际需求重新初始化成想要的值以待用。

 

初始化是个比较复杂的工程,必须保证正确执行,否则就会发生混乱。初始化最基本的目的是:保证所需要的,可能用到的东西先初始化完毕待用。初始化额外追求:lazy-init效果,不需要的暂不初始化。

 

 

 

分享到:
评论

相关推荐

    Java字符集编码简记

    本文将围绕“Java字符集编码简记”这一主题,深入探讨相关知识点,并结合标签“源码”和“工具”,探讨在实际开发中如何运用和处理字符编码问题。 首先,我们需要理解字符集的概念。字符集是一系列符号的集合,例如...

    java Pattern Matcher的理解简记

    Java中的Pattern和Matcher是正则表达式的核心工具类,它们在处理字符串匹配和模式查找时起着关键作用。本文将深入解析这两个类的功能、用法以及相关知识点。 首先,Pattern类是Java.util.regex包下的一个类,它代表...

    英语音标简记法-英语学习

    英语音标简记法是学习英语发音的重要工具,它帮助我们准确地读出单词,提升听力和口语能力。本文将详细介绍几种常见的英语音标简记方法,并通过举例帮助理解。 首先,我们来看“去尾法”。这种方法适用于那些以元音...

    练习简记第一期

    - **可串行化(Serializable)**:最高的隔离级别,禁止脏读、不可重复读和幻读,但可能导致更多的锁等待时间。 通过调整隔离级别,可以在事务的效率和数据的一致性之间找到合适的平衡点。 #### 总结 通过这两个...

    简记个人博客源码免费分享

    简记个人博客网站源码为博主现有博客网站,前端采用LayUI框架,此分享版本为asp + access。所有功能齐全,欢迎使用。 使用方法:上传至空间或服务器,通过IIS发布网站即可。 演示地址:...

    usaco课文学习简记1

    这篇学习简记主要涵盖了四个章节,分别是Ad Hoc Problems(杂题)、Complete Search(完全搜索)、Greedy Algorithm(贪心算法)和More Search Techniques(更多搜索技术)。每个章节都讲解了相应的算法思想及其应用...

    497476974884240简记.apk

    497476974884240简记.apk

    crc16校验java实现

    从数据头到校验码前的CRC16-CCITT的校验值,遵循大端排序方式的规定。CRC16-CCITT码生成多项式为x16+x12+x5+1,简记式1021。

    Java课程实验代码库-内含源码和说明书(可自己修改).zip

    Java课程实验代码库是一个专为学习者和开发者提供的资源集合,包含了多...它提供了一个实践和探索Java编程的平台,通过实际操作,学习者可以更好地掌握编程思维,提高问题解决能力,并逐步成长为一名熟练的Java程序员。

    原理图的绘制简记-原理图设计经验

    原理图设计经验分享 以下是对原理图设计经验的详细总结: 一、MCU的选型 在设计原理图时,首先需要选择合适的MCU。选择MCU需要考虑产品需求,...原理图设计需要考虑许多因素,需要设计师具备深入的电路知识和经验。

    简记个人博客网站源码 v2.10.01.rar

    【简记个人博客网站源码 v2.10.01.rar】是一个包含个人博客网站完整源码的压缩包,版本号为v2.10.01,它主要用于搭建和自定义个人博客平台。这个源码可能由前端界面、后端服务器逻辑以及数据库结构组成,适用于那些...

    CoreJava Interview Question.pdf

    总结以上核心概念,掌握Java中的OOP原理能够帮助开发者写出更高效、可维护和可扩展的代码。在面试过程中,理解并能够清晰地解释这些概念对于求职者来说至关重要。它们是Java编程和面向对象设计的基础,也是理解Java...

    简记平衡点问题的实现及改进

    在IT行业中,平衡点问题是一个常见的数据结构与...平衡点问题的实现和改进是一个典型的动态调整和优化过程,需要根据实际场景灵活应对。通过持续学习和实践,我们可以更好地理解和解决这类问题,提升自己的编程技能。

    17年软院计组试卷简记1

    这篇简记涵盖了计算机组成原理中的多个重要知识点,主要包括程序控制I/O...以上就是2017年软院计组试卷简记中涉及的主要知识点,涵盖了计算机系统的基础架构和工作原理。深入理解这些概念对于学习计算机科学至关重要。

    CRC16原理及算法附带两种程序

    1. **初始化**: 预置一个16位的寄存器为 `FFFF`(即所有位都为1),称为CRC寄存器。 2. **异或操作**: 把第一个8位二进制数据(即通讯信息帧的第一个字节)与16位CRC寄存器的低8位进行异或操作,结果放回CRC寄存器,...

    高中化学各简记规律.docx

    【知识点详解】 1. 盐类的溶解性规律: ...这些简记规律和知识点是高中化学学习的基础,对于理解和解决化学问题至关重要。理解并熟练掌握这些规则有助于提升解题能力,并为大学化学学习打下坚实基础。

    [简单]log4jdbc-log4j2配置简记

    标题中的“log4jdbc-log4j2配置简记”指的是在Java开发中使用log4jdbc-log4j2库来监控和记录SQL查询的过程。log4jdbc是一个开源项目,它允许开发者通过日志系统来追踪数据库操作,而log4j2是log4j的升级版,提供了更...

    2013-6-3珠海移动暑假实习面试简记

    这篇博客文章标题为“2013-6-3珠海移动暑假实习面试简记”,从标题我们可以推测,本文作者分享了自己在2013年6月3日参加珠海移动公司暑假实习面试的经历和感悟。这是一篇关于求职经验、面试技巧以及可能遇到的问题的...

Global site tag (gtag.js) - Google Analytics