面向对象【类的实例化与对象内存解析】

news/2024/11/13 3:58:39/

类的实例化与对象内存解析

文章目录

  • 类的概念
  • 对象的概念
  • 面向对象的三步骤
  • 对象的内存解析
    • JVM 内存结构划分
    • 对象内存分析

类的概念

具有相同特征的事物的抽象描述,是抽象的、概念上的定义。

对象的概念

实际存在的该类事物的每个个体,是具体的,因而也称为实例。

面向对象的三步骤

1、类的定义


public class Person{ int age ;//声明属性 agepublic void eat() {System.out.println("吃饭"); }
}

2、对象的创建

class PersonTest{public static void main(String[] args){//创建 Person 类的对象 Person p1 = new Person();}}

3、对象调用属性或方法

Phone.java

public class Phone {//属性int price;String color;String name;//方法public void call(String who) {System.out.println("给" + who + "打电话");}public void sendMessage(String text) {System.out.println("群发短信" + text);}public void playGame() {System.out.println("玩游戏");}public void showColor() {System.out.println("手机颜色为" + color);}
}

PhoneTest.java

public class PhoneTest {public static void main(String[] args) {Phone p1 = new Phone();p1.call("张三");p1.color = "红色" ;p1.showColor();p1.sendMessage("今天天气不错");}
}

在这里插入图片描述

对象的内存解析

JVM 内存结构划分

HotSpot Java 虚拟机的架构图如下。其中我们主要关心的是运行时数据区部分 (Runtime Data Area)。

在这里插入图片描述

堆(Heap):此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例 都在这里分配内存。这一点在 Java 虚拟机规范中的描述是:所有的对象实例以 及数组都要在堆上分配。

栈(Stack):是指虚拟机栈。虚拟机栈用于存储局部变量等。局部变量表存放 了编译期可知长度的各种基本数据类型(boolean、byte、char、short、int、 float、long、double)、对象引用(reference 类型,它不等同于对象本身,是 对象在堆内存的首地址)。 方法执行完,自动释放。

方法区(Method Area):用于存储已被虚拟机加载的类信息、常量、静态变 量、即时编译器编译后的代码等数据。

对象内存分析

内存解析图:

内存分析
:凡是 new 出来的结构(对象、数组)都放在堆空间中。 对象的属性存放在堆空间中。

创建一个类的多个对象(比如 p1、p2),则每个对象都拥有当前类的一套 “副本”(即属性)。当通过一个对象修改其属性时,不会影响其它对象此 属性的值。

当声明一个新的变量使用现有的对象进行赋值时(比如 p3 = p1),此时 并没有在堆空间中创建新的对象。而是两个变量共同指向了堆空间中同一 个对象。当通过一个对象修改属性时,会影响另外一个对象对此属性的调用(与JavaScript对象存储一致)。


http://www.ppmy.cn/news/66685.html

相关文章

顺序容器的使用方法

1)deque的使用 http://c.biancheng.net/cplus/ 学习网站 deque和vector都属于动态数组,不过deque比vector更加强大; #include #include #include using namespace std; int main() { deque a; a.push_back(3); a.push_front(4); a.push_back(3); a.push_front(4); a.insert(…

浅谈 Btrfs 文件系统的特点、优缺点以及使用场景

Btrfs(B-Tree File System)是一种先进的日志文件系统,最初由 Oracle 开发,现在已被广泛应用于 Linux 中。下面是 Btrfs 文件系统的特点、优缺点以及使用场景: 特点: Btrfs 文件系统支持快照、数据压缩、在…

14.构造器的排序分组.子查询

学习要点: 1.排序分组 2.子查询 本节课我们来开始学习数据库的构造器查询中的子查询、排序、分组等。 一.排序分组 1. 使用 whereColumn()方法实现两个字段相等的查询结果; //判断两个相等的字段,同样支持 orWhereColumn() //支持…

人人都可用的ChatGPT,Edge浏览器-免费ChatGPT保姆级教程!非常详细!

人工智能大浪潮已经来临,对于ChatGPT,我觉得任何一个玩互联网的人,都应该重视起来,用起来。但是国内使用需要解决科学上网、注册、收费等繁琐问题。 所以,今天这篇文章就来推荐一个插件,无需任何繁琐操作&…

收集的面试题链接

目录 一份非常值得一看的Java面试题Java面试笔试题大汇总一(最全详细答案)Java面试题大全(2020版)JAVA面试题集模板.doc 一份非常值得一看的Java面试题 https://www.cnblogs.com/bailing80/p/11443409.html Java面试笔试题大汇总一(最全详细答案) 汇总…

【OpenCV-Python】——哈里斯/Shi-Tomas角检测FAST/SIFT/ORB特征点检测暴力/FLANN匹配器对象查找

目录 前言: 1、角检测 1.1 哈里斯角检测 1.2 优化哈里斯角 1.3 Shi-Tomasi角检测 2、特征点检测 2.1 FAST特征点检测 2.2 SIFT特征检测 2.3 ORB特征检测 3、特征匹配 3.1 暴力匹配器 3.2 FLANN匹配器 4、对象查找 总结: 前言: 图…

软件测试测试文档的编写和阅读。

在软件测试中的流程中,测试文档也是一个重要的流程,所以测试人员也需要学习测试文档的编写和阅读。 一、定义: 测试文档(Testing Documentation)记录和描述了整个测试流程,它是整个测试活动中非常重要的文…

C++11大杂烩

C11大杂烩 文章目录 C11大杂烩介绍语法统一的列表初始化:{}初始化initializer_list简化声明的方式autotypeid().name():获取类型名decltype nullptr范围for循环stl库中的一些变化arrayforward_list final和override右值引用和移动语义左值引用和右值引用 移动构造和…