Java面向对象,对象是怎么创建出来的?在内存中又是怎么个布局呢?
一个对象的创建过程:
public class Person { //成员变量---在堆内存分配空间,构造函数被调用的时候,对其进行初始化 private int age; //默认构造函数,如果没有重载其它构造函数,Jave编译器会自动加入一个无参的构造函数,因为要确保至少有一个构造函数存在,如果没有,怎么创建对象呢! public Person() { //super(); //默认调用父类的无参构造函数,所以创建子类对象会先调用父类构造函数,而调用父类构造函数,就导致父类被加载 //return; } //带参数的构造函数,此时如果不显示写无参构造函数,Java编译器不加,因为至少已经有一个构造函数存在了 public Person(int age) { //super(); //默认调用父类的无参构造函数,所以创建子类对象会先调用父类构造函数,而调用父类构造函数,就导致父类被加载 this.age = age; //return; } public static void main(String[] args) { //new 在堆内存开辟空间 //Person() 表示调用Person类的无参构造函数 //结合起来 new Person()---> 在堆内存开辟空间,并调用Person构造函数对该内存中的变量age进行初始化,age=0 Person p1 = new Person(); //new 在堆内存开辟空间 //Person(20) 表示调用Person类的参数为int类型的构造函数 //结合起来 new Person(20)---> 在堆内存开辟空间,并调用Person构造函数对该内存中的变量age进行初始化,age=20 Person p2 = new Person(20); } }
另一个例子
public class Person { /** * 对象的成员属性 */ private String name; /** * 对象的成员属性 */ private int age; /** * 构造方法:在对象创建时调用,用来对成员属性进行初始化 * 如果没有指定构造函数,则调用默认构造函数,此时对象中的数据都为对应类型的初始值 */ public Person(String name, int age) { this.name = name; this.age = age; } /** * 对象的一般方法,可以被调用多次,只能在对象创建完成后才能通过对象来调用 */ public void say() { System.out.println(this.name+","+this.age); } /** * 获取成员变量的值 */ public String getName() { return name; } /** * 对象创建时,可以通过构造函数对成员属性进行初始化 * 对象创建后,提供一般方法对成员变量进行修改 */ public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } //================================================== public static void main(String[] args) { //堆内存中开辟内存空间分配给当前创建的对象,name=null,age=0 //程序自动调用显示定义的构造函数,在构造函数中完成对当前对象的name和age初始化 //然后,将当前对象的地址赋值给栈内存中的person变量 Person person = new Person("zhangsan",20); //对象调用一般方法 person.say(); //栈内存中的person变量根据前面赋值的地址,从堆内存中取出对应的name和age System.out.println(person.getName()+","+person.getAge()); } }
相关推荐
### 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`关键字为...
异常处理是Java中处理程序执行过程中出现的错误的一种机制。异常是指在程序执行过程中发生的一些不寻常的事件,这可能会中断程序的正常流程。Java提供了一套完整的异常处理机制,包括异常类、异常捕获(try-catch)...
Java面向对象程序设计是计算机科学中的一个重要领域,尤其在软件开发中占据核心地位。第二版的《Java面向对象程序设计》课件旨在深入浅出地介绍这一关键概念,帮助学习者掌握Java语言的基础以及面向对象编程的核心...
2. 构造器:构造器用于初始化新创建的对象,Java中的构造器与类同名且无返回值。 3. 访问控制修饰符:private、default(包访问)、protected和public,分别限制了类成员的访问范围。 4. 方法重载与覆盖:重载在同一...
Java面向对象练习题是Java编程语言中非常重要的一部分,这些练习题涵盖了Java语言的基础知识,包括Java基本数据类型、运算符、控制结构、方法、类和对象、继承、多态、抽象类和接口等方面。通过这些练习题,可以对...
以上就是Java面向对象编程的主要知识点,对于初学者来说,理解并熟练运用这些概念是掌握Java编程的基础。对于有经验的Java工程师,深入研究这些知识点可以进一步提高代码质量和设计能力。在"Java面向对象精髓编程"的...
《Java面向对象程序设计(第3版)》是人民邮电出版社出版的一部经典教材,由杨晓燕和李选平两位专家共同编著。...在学习过程中,配合书籍和实践,能够更好地理解和掌握Java面向对象编程的设计思想和技巧。
浅谈Java内存区域与对象创建过程 Java内存区域是Java虚拟机在执行Java程序的过程中所管理的内存,它被划分为若干个不同的数据区域,每个区域都有其自己的用途和创建和销毁的时间。根据《Java虚拟机规范(JavaSE7版...
Java面向对象程序设计是编程领域中的核心概念,它基于面向对象的编程思想,将现实世界中的实体抽象为类,通过类来创建对象,实现代码的复用和模块化。在这个期末考试试题中,我们看到了一系列关于Java编程的问题,...