`
schy_hqh
  • 浏览: 552507 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

(基础)java中对象的创建过程

 
阅读更多

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对象的创建过程,帮助读者深入理解Java基础。 #### 一、类...

    java内存对象分配过程研究

    在对象创建的过程中,JVM是如何决定为对象分配多少内存的呢?这个问题涉及到JVM的具体实现以及对象本身的结构。一般而言,对象在内存中的布局可以分为三个部分: 1. **对象头(Object Header)**:存储对象自身的运行...

    浅析Java语言中对象的创建过程.pdf

    整个Java对象创建过程涉及到内存的动态分配、类的加载、字段的初始化、构造函数的调用等多个步骤,这些都是Java运行时系统的核心部分。了解这些机制对于编写高效且稳定的Java应用程序至关重要。通过本文,读者可以更...

    java 基础 类对象创建实例化过程 实例解析

    * 执行启动类的main函数 -> 创建对象的继承树从高到底的类层次中的静态块(如果已经被执行过,则不会重复执行) -> * 继承树中的从最高层开始的实例语句块{}、然后对应的构造函数、以及构造函数中调用的方法 * ...

    Java中对象与引用

    #### 二、对象与引用的创建过程 考虑下面的示例代码: ```java class Student { String name; int age; } // 创建对象 Student stu = new Student(); ``` 这段代码实际上执行了四个步骤: 1. **创建对象**: `...

    浅析Java语言中对象的创建过程.zip

    此外,对于性能敏感的应用,了解对象创建过程有助于优化内存使用和减少垃圾回收的压力。例如,通过避免不必要的对象创建,或者使用池化技术来重用对象,可以提高程序的效率。 总的来说,Java中对象的创建是程序运行...

    探讨Java的对象是怎么在内存中产生的?

    本文将详细探讨Java对象在JVM中的创建过程以及其内存布局,帮助读者更深入地理解Java对象是如何在内存中产生的。 #### 二、对象的创建 Java对象是由类实例化的结果,当我们使用`new`关键字创建一个对象时,实际上...

    Java面向对象应用程序开发

    在开发过程中,我们会用到Java的开发工具,如JDK(Java Development Kit),它包含了编译器javac、解释器java以及各种开发工具。 在实际开发中,我们还需要了解MVC(Model-View-Controller)设计模式,它常用于构建...

    Java面向对象基础源代码教程

    在"Java面向对象基础源代码教程"中,我们将深入探讨这一主题。 首先,我们需要理解面向对象的三个主要原则:封装、继承和多态。封装是将数据和操作这些数据的方法捆绑在一起,形成一个独立的对象。这样做可以隐藏...

    JAVA编程基础-05面向对象基础.pdf

    面向对象编程(OOP)是Java语言的重要特点,它从现实世界中客观存在的事物出发来构造软件系统,并尽可能运用人类的自然思维方式。面向对象编程的思想强调直接以问题域中的事物为中心来思考问题,认识问题,并根据...

    Java编程中对象的创建与使用以及方法的重构与重载的区别说明

    对象的创建过程 创建一个对象包括三个主要步骤:对象的说明、对象的实例化和对象的初始化。 - **对象的说明**:声明对象,即告诉编译器我们想要创建的对象是什么类型。 - **对象的实例化**:使用`new`关键字为...

    Java面向对象程序设计(第二版)

    异常处理是Java中处理程序执行过程中出现的错误的一种机制。异常是指在程序执行过程中发生的一些不寻常的事件,这可能会中断程序的正常流程。Java提供了一套完整的异常处理机制,包括异常类、异常捕获(try-catch)...

    《Java面向对象程序设计(第2版)》课件

    Java面向对象程序设计是计算机科学中的一个重要领域,尤其在软件开发中占据核心地位。第二版的《Java面向对象程序设计》课件旨在深入浅出地介绍这一关键概念,帮助学习者掌握Java语言的基础以及面向对象编程的核心...

    Java面向对象程序设计耿祥义版课件

    2. 构造器:构造器用于初始化新创建的对象,Java中的构造器与类同名且无返回值。 3. 访问控制修饰符:private、default(包访问)、protected和public,分别限制了类成员的访问范围。 4. 方法重载与覆盖:重载在同一...

    java面向对象练习题-经典

    Java面向对象练习题是Java编程语言中非常重要的一部分,这些练习题涵盖了Java语言的基础知识,包括Java基本数据类型、运算符、控制结构、方法、类和对象、继承、多态、抽象类和接口等方面。通过这些练习题,可以对...

    Java面向对象精髓编程

    以上就是Java面向对象编程的主要知识点,对于初学者来说,理解并熟练运用这些概念是掌握Java编程的基础。对于有经验的Java工程师,深入研究这些知识点可以进一步提高代码质量和设计能力。在"Java面向对象精髓编程"的...

    Java面向对象程序设计(第3版)-PPT课件

    《Java面向对象程序设计(第3版)》是人民邮电出版社出版的一部经典教材,由杨晓燕和李选平两位专家共同编著。...在学习过程中,配合书籍和实践,能够更好地理解和掌握Java面向对象编程的设计思想和技巧。

    浅谈Java内存区域与对象创建过程

    浅谈Java内存区域与对象创建过程 Java内存区域是Java虚拟机在执行Java程序的过程中所管理的内存,它被划分为若干个不同的数据区域,每个区域都有其自己的用途和创建和销毁的时间。根据《Java虚拟机规范(JavaSE7版...

    JAVA面向对象程序设计(期末考试试题及答案).pdf

    Java面向对象程序设计是编程领域中的核心概念,它基于面向对象的编程思想,将现实世界中的实体抽象为类,通过类来创建对象,实现代码的复用和模块化。在这个期末考试试题中,我们看到了一系列关于Java编程的问题,...

Global site tag (gtag.js) - Google Analytics