java中初始化与构造器
来源:互联网 发布:淘宝网二手app 编辑:程序博客网 时间:2024/06/02 04:19
当Java创建一个对象时,系统先为该对象的所有实例属性分配内存(前提是该类已经被加载过了),接着程序开始对这些实例属性执行初始化,其初始化顺序是:先执行初始化块或声明属性时制定的初始值,再执行构造器里制定的初始值。
从某种程度上来看,初始化是一段固定执行的代码,它不能接受任何参数。因此初始化块对同一个类所有对象所进行的初始化处理完全相同。基于这个原因,不难发现初始化块的基本用法,如果有一段初始化处理代码对所有对象完全相同,且无须接受任何参数,就可以把这段初始化处理代码提取到初始化块中。
与构造器类似的,创建一个Java对象时,不仅会执行该类的普通初始化块和构造器,系统会一直上溯到java.lang.object类,依次向下执行其父类的初始化块。
当JVM第一个主动使用某个类时,系统会再类准备阶段为该类的所有静态属性分配内存;在初始化阶段则负责初始化这些静态属性,初始化静态属性的就是执行类初始化代码或者声明类属性时指定的初始值,他们的执行顺序与源代码中的排列顺序相同。
示例代码如下:
class Root{ static { System.out.println("Root的静态初始化块"); } { System.out.println("Root的普通初始化块"); } public Root() { System.out.println("Root的无参数构造器"); }}class Mid extends Root{ static { System.out.println("Mid 的静态初始化块"); } { System.out.println("Mid 的普通初始化块"); } public Mid() { System.out.println("Mid 的无参数的构造器"); } public Mid(String msg) { //通过this调用同一类中重载的构造器 this(); System.out.println("Mid 的带参数的构造器,其参数值:"+msg); }}class Leaf extends Mid{ static { System.out.println("Leaf 的静态初始化块"); } { System.out.println("Leaf 的普通初始化块"); } public Leaf() { //通过super调用父类中有一个字符串参数的构造器 super("权威指南"); System.out.println("执行Leaf的构造器"); }}public class Test{ public static void main(String[] args) { new Leaf(); new Leaf(); }}
0 0
- java中初始化与构造器
- java中成员初始化与构造器初始化的顺序
- java中对象的初始化与构造器
- 再次认识Java中构造器的初始化与继承
- Java的初始化与构造器
- java--构造器与static,初始化顺序
- java中初始化,实例化,构造器
- Java中构造器的初始化
- 初始化与构造器
- Java- 对象构造与初始化
- Java中 构造函数与初始化块的执行顺序
- Java 构造器初始化
- java学习笔记<七>初始化块与构造器
- 构造器与初始化块
- java初始化构造器中调用其它方法
- java中构造器执行前的初始化动作
- Java中有关构造器初始化调用的问题
- java中的构造器初始化
- Precision和Recall
- CodeForces-630 F. Selection of Personnel【排列组合】
- java笔记-6
- SQLite清空表并将自增列归零
- QT html解析
- java中初始化与构造器
- java笔记-7
- 实现用画笔画出一个带有渐变效果的线条
- bzoj3571: [Hnoi2014]画框
- MySQL安装版本
- Android之–Activity通过Intent传递Object
- java笔记-8
- Jira平台数据自动化获取(一)--Jira接口请求
- TCP协议中的SO_LINGER选项