Java中创建一个对象,要经历哪些过程?
以子类,父类为例,当创建子类对象时,将会发生什么?
public class Parent { Parent() { //子类构造函数调用父类构造函数,导致父类构造函数中的this指向子类对象 this.show(); System.out.println("Parent\t"+this); } void show() { System.out.println("Parent.show()"); } }
public class Child extends Parent { int num = 100; Child() { //此时num=0 //super(); //调用完父类的构造函数之后,子类才开始显示初始化,此时num才等于100 System.out.println("Child\t"+this); //return; } void show() { System.out.println("Child.show()\t"+num); } }
public class Test { public static void main(String[] args) { Child zi = new Child(); zi.show(); } }
程序运行结果及说明:
Child.show() 0
Parent Child@6bcf8de2
Child Child@6bcf8de2
Child.show() 100
程序执行过程
1.new 将在堆内存开辟空间,并把Child的成员变量num放到堆内存中,此时num=0
2.调用Parent类的子类构造函数
3.由于子类构造函数中默认存在一个super(),将调用父类Parent的构造函数
4.父类构造函数持有的this,指向的子类对象,调用子类对象的show(),由于此时子类对象的成员变量num尚未初始化(子类构造函数还未执行到对变量进行赋值操作),所以num的值是默认初始值0
5.父类构造函数执行完成后,子类开始继续执行构造函数,对堆内存中的变量进行显示初始化
6.最后,num=100
一个更经典的例子
public class Parent { public Parent() { System.out.println("Parent constructor run"); //将调用子类复写的method() this.method(); } void method() { System.out.println("Parent.method()"); } }
public class Child extends Parent{ String name; int age = 10;//显示初始化 { //先super(),再显示初始化,再调用构造代码块 System.out.println("构造代码块, name="+name+",age="+age); age = 20; } public Child(String name) { //name=null,age=0 super(); //--->进行显示初始化,name=null,age=10 //--->执行构造代码块,name=null,age=20 this.name = name;//最后进行构造函数入参对成员变量进行初始化,name="",age=20 System.out.println("Child constructor over, name="+name+",age="+age); } public void method() { System.out.println("Child.method(), name="+name+",age="+age); } }
public class Test { public static void main(String[] args) { new Child("莉莉"); } }
运行结果:
Parent constructor run
Child.method(), name=null,age=0
构造代码块, name=null,age=10
Child constructor over, name=莉莉,age=20
相关推荐
### Java对象创建过程详解 在Java编程语言中,对象是程序的基本单元,一切皆对象这一概念使得Java在面向对象编程领域具有重要的地位。本文将详细阐述Java对象的创建过程,帮助读者深入理解Java基础。 #### 一、类...
在对象创建的过程中,JVM是如何决定为对象分配多少内存的呢?这个问题涉及到JVM的具体实现以及对象本身的结构。一般而言,对象在内存中的布局可以分为三个部分: 1. **对象头(Object Header)**:存储对象自身的运行...
整个Java对象创建过程涉及到内存的动态分配、类的加载、字段的初始化、构造函数的调用等多个步骤,这些都是Java运行时系统的核心部分。了解这些机制对于编写高效且稳定的Java应用程序至关重要。通过本文,读者可以更...
* 执行启动类的main函数 -> 创建对象的继承树从高到底的类层次中的静态块(如果已经被执行过,则不会重复执行) -> * 继承树中的从最高层开始的实例语句块{}、然后对应的构造函数、以及构造函数中调用的方法 * ...
#### 二、对象与引用的创建过程 考虑下面的示例代码: ```java class Student { String name; int age; } // 创建对象 Student stu = new Student(); ``` 这段代码实际上执行了四个步骤: 1. **创建对象**: `...
此外,对于性能敏感的应用,了解对象创建过程有助于优化内存使用和减少垃圾回收的压力。例如,通过避免不必要的对象创建,或者使用池化技术来重用对象,可以提高程序的效率。 总的来说,Java中对象的创建是程序运行...
本文将详细探讨Java对象在JVM中的创建过程以及其内存布局,帮助读者更深入地理解Java对象是如何在内存中产生的。 #### 二、对象的创建 Java对象是由类实例化的结果,当我们使用`new`关键字创建一个对象时,实际上...
在开发过程中,我们会用到Java的开发工具,如JDK(Java Development Kit),它包含了编译器javac、解释器java以及各种开发工具。 在实际开发中,我们还需要了解MVC(Model-View-Controller)设计模式,它常用于构建...
在"Java面向对象基础源代码教程"中,我们将深入探讨这一主题。 首先,我们需要理解面向对象的三个主要原则:封装、继承和多态。封装是将数据和操作这些数据的方法捆绑在一起,形成一个独立的对象。这样做可以隐藏...
面向对象编程(OOP)是Java语言的重要特点,它从现实世界中客观存在的事物出发来构造软件系统,并尽可能运用人类的自然思维方式。面向对象编程的思想强调直接以问题域中的事物为中心来思考问题,认识问题,并根据...
对象的创建过程 创建一个对象包括三个主要步骤:对象的说明、对象的实例化和对象的初始化。 - **对象的说明**:声明对象,即告诉编译器我们想要创建的对象是什么类型。 - **对象的实例化**:使用`new`关键字为...
2. 构造器:构造器用于初始化新创建的对象,Java中的构造器与类同名且无返回值。 3. 访问控制修饰符:private、default(包访问)、protected和public,分别限制了类成员的访问范围。 4. 方法重载与覆盖:重载在同一...
异常处理是Java中处理程序执行过程中出现的错误的一种机制。异常是指在程序执行过程中发生的一些不寻常的事件,这可能会中断程序的正常流程。Java提供了一套完整的异常处理机制,包括异常类、异常捕获(try-catch)...
Java面向对象程序设计是计算机科学中的一个重要领域,尤其在软件开发中占据核心地位。第二版的《Java面向对象程序设计》课件旨在深入浅出地介绍这一关键概念,帮助学习者掌握Java语言的基础以及面向对象编程的核心...
在面向对象编程的学习过程中,理解类与对象的关系至关重要。类是抽象的模板,定义了属性和方法,而对象是根据这些模板创建的具体实例。通过面向对象编程,开发者可以将现实世界的实体和概念转化为程序代码中的类和...
Java面向对象练习题是Java编程语言中非常重要的一部分,这些练习题涵盖了Java语言的基础知识,包括Java基本数据类型、运算符、控制结构、方法、类和对象、继承、多态、抽象类和接口等方面。通过这些练习题,可以对...
以上就是Java面向对象编程的主要知识点,对于初学者来说,理解并熟练运用这些概念是掌握Java编程的基础。对于有经验的Java工程师,深入研究这些知识点可以进一步提高代码质量和设计能力。在"Java面向对象精髓编程"的...
《Java面向对象程序设计(第3版)》是人民邮电出版社出版的一部经典教材,由杨晓燕和李选平两位专家共同编著。...在学习过程中,配合书籍和实践,能够更好地理解和掌握Java面向对象编程的设计思想和技巧。
浅谈Java内存区域与对象创建过程 Java内存区域是Java虚拟机在执行Java程序的过程中所管理的内存,它被划分为若干个不同的数据区域,每个区域都有其自己的用途和创建和销毁的时间。根据《Java虚拟机规范(JavaSE7版...
Java面向对象程序设计是编程领域中的核心概念,它基于面向对象的编程思想,将现实世界中的实体抽象为类,通过类来创建对象,实现代码的复用和模块化。在这个期末考试试题中,我们看到了一系列关于Java编程的问题,...