Java对象初始化代码详解:实例变量和类变量的初始化过程
181 浏览量
更新于2024-09-02
收藏 79KB PDF 举报
Java 对象初始化代码详解
Java 对象初始化是 Java 编程语言中一个重要的概念,它涉及到实例变量的初始化、类变量的初始化、final 关键字对初始化的影响等方面。在本文中,我们将详细介绍 Java 对象初始化的过程,包括实例变量的初始化、类变量的初始化、final 关键字对初始化的影响等。
一、实例变量的初始化
实例变量的初始化是 Java 对象初始化的重要一步。在实例变量的初始化过程中,Java 解释器首先会找到相应的类文件(如 Dog.class),然后执行所有的静态初始化模块。静态初始化仅发生一次,即在 Class 对象首次载入的时候。
创建一个新的对象时,Java 解释器会在内存堆(Heap)中分配足够多的存储空间,并将所有基本类型(Primitive)设为默认值(如数字为 0,boolean 和 char 为等价设置)。然后,所有成员字段定义时发生的初始化都会执行,最后执行构造函数。
实例变量的初始化有三种方式:
1. 定义实例变量时指定初始值
2. 非静态初始化块中对实例变量进行初始化
3. 构造器中对实例变量进行初始化
在 new 对象初始化时,①②要先于③执行,而①②的顺序则按照它们在源代码中定义的顺序来执行。
二、类变量的初始化
类变量的初始化是 Java 对象初始化的另一个重要方面。在类变量的初始化过程中,Java 解释器会执行所有的静态初始化模块,这些模块仅发生一次,即在 Class 对象首次载入的时候。
三、final 关键字对初始化的影响
final 关键字对初始化的影响是 Java 对象初始化的重要一点。当实例变量使用了 final 关键字修饰时,如果是在定义该 final 实例变量时直接指定初始值进行的初始化(第①种方式),那么该变量的初始值在编译时就被确定下来,那么该 final 变量就类似于“宏变量”,相当于 JAVA 中的直接常量。
例如,以下代码中,str1 和 str2 的初始值在编译时就被确定下来:
public class Test {
public static void main(String[] args) {
final String str1 = "HelloWorld";
final String str2 = "Hello" + "World";
System.out.println(str1 == str2); // true
final String str3 = "Hello" + String.valueOf("World");
System.out.println(str3 == str1); // false
}
}
在上面的代码中,str1 和 str2 的初始值在编译时就被确定下来,因此它们可以被认为是“宏变量”,相当于 JAVA 中的直接常量。然而,str3 的初始值是在运行时确定的,因此它不能被认为是“宏变量”。
Java 对象初始化是一个复杂的过程,涉及到实例变量的初始化、类变量的初始化、final 关键字对初始化的影响等方面。了解 Java 对象初始化的过程有助于我们更好地理解 Java 编程语言,并编写更加高效、可靠的程序。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2020-08-31 上传
2020-08-30 上传
2020-08-30 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
weixin_38565818
- 粉丝: 3
- 资源: 956
最新资源
- SVR:简单向量回归-Udemy
- AquariumHoodLEDController
- Code,java论坛源码,java消息队列订单
- TRIDIEGS:求对称三对角矩阵的特征向量的特征值。-matlab开发
- get_html_source_gui:获取网页源代码GUI代码与重组程序
- json-builder:json-parser的序列化副本
- 参考资料-附件1-9-补充协议-新增.zip
- 共享计时器:一种Web应用程序,您可以在其中创建并与其他人共享计时器。 建立在React Hooks和Firebase之上
- spotify_battle
- maistra-test-tool:在OpenShift上运行maistra任务的测试工具
- mobi_silicon
- CrawlArticle:基于文字密度的新闻正文提取模块,兼容python2和python3,替换新闻网址或网页开源即可返回标题,发布时间和正文内容
- uu,java源码学习,springboot的源码是java
- regexp_parser:Ruby的正则表达式解析器库
- Get15
- Mary Poppins Search-crx插件