Java中创建对象时内存中的情况

2023-11-17

public class Phone {
    public String brand;
    public double price;
    public String color; 
    
    public void call(String name) {
        System.out.println("给" + name + "打电话");
        }

    public void send() {
        System.out.println("我只是单纯的发信息而已");
    }

    //作用:调用该方法可以以字符串的形式打印出对象中对应的内容
    @Override
    public String toString() {
        return "Phone{" +
                "brand='" + brand + '\'' +
                ", price=" + price +
                ", color='" + color + '\'' +
                '}';
    }
}


public class Iphone {
    public static void main(String[] args) {
        Phone p = new Phone();
        System.out.println(p);
//       结果: Phone{brand='null', price=0.0, color='null'}
        p.brand="华为";
        p.price=4399.0;
        p.color="red";
        System.out.println(p);
//       结果: Phone{brand='华为', price=4399.0, color='red'}
        p.call("任正非");
        p.send();

    }
}


1.Java内存中分为5个区域,这里主要讲述:栈,堆,方法区;
2.三大区域的主要作用:

1.栈中主要存放局部变量,执行方法的地方
2.堆中主要存放new出来的对象;
3.方法区中存放的是类的信息

3.程序的入口是主方法;

4.当执行主方法时,主方法入栈,开始执行主方法;

5.对象修改成员属性时

执行Phone p = new Phone()时;局部变量p存入栈当中,变量p中存放的堆中Phone类的对象的地址(0x333),new Phone()是在堆中创建一个Phone类的对象(设:地址为0x333);堆中对象存放的是方法区中类的属性和方法的地址;
当执行p.brand="华为"时;先通过变量p中存放的对象地址在堆中找到对象。然后对对象中的属性值进行改变;

6.对象调用方法时

当在堆中创建方法区中类对应的对象时,该对象中存放的是类的属性和方法的地址,成员方法不会随着属性一起复制到对象中,只是将成员方法的地址复制到对象当中;
当执行p.call(String name)方法时,先通过变量p的地址找到对应的对象,在对象中存储了方法区中成员方法的地址,通过地址找到方法区中的成员方法。然后压栈,使成员方法进入栈中执行,执行完毕后弹栈;

在这里插入图片描述7. 注意事项:

1. 类中的成员方法时存储在方法区当中的;堆中只是成员方法的地址
2. 当多个变量指向同一个对象时,如person p1 = p;将p变量中的内存赋值给p1,
  此时p1具备p中已经设置好的属性值;(p1.brand="华为"而不是null);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java中创建对象时内存中的情况 的相关文章

  • Android在排序列表时忽略大小写

    我有一个名为路径的列表 我目前正在使用以下代码对字符串进行排序 java util Collections sort path 这工作正常 它对我的 列表进行排序 但是它以不同的方式处理第一个字母的情况 即它用大写字母对列表进行排序 然后用
  • 按第一列排序二维数组,然后按第二列排序

    int arrs 1 100 11 22 1 11 2 12 Arrays sort arrs a b gt a 0 b 0 上面的数组已排序为 1 100 1 11 2 12 11 22 我希望它们按以下方式排序a 0 b 0 首先 如果
  • 当从服务类中调用时,Spring @Transactional 不适用于带注释的方法

    在下面的代码中 当方法内部 是从内部调用的方法外部 应该在交易范围内 但事实并非如此 但当方法内部 直接从调用我的控制器class 它受到事务的约束 有什么解释吗 这是控制器类 Controller public class MyContr
  • 我需要什么库才能在 Java 中访问这个 com.sun.image.codec.jpeg?

    我正在用java创建一个图像水印程序 并导入了以下内容 import com sun image codec jpeg JPEGCodec import com sun image codec jpeg JPEGEncodeParam im
  • 在 S3 中迭代对象时出现“ConnectionPoolTimeoutException”

    我已经使用 aws java API 一段时间了 没有遇到太多问题 目前我使用的是库 1 5 2 版本 当我使用以下代码迭代文件夹内的对象时 AmazonS3 s3 new AmazonS3Client new PropertiesCred
  • Hazelcast 分布式锁与 iMap

    我们目前使用 Hazelcast 3 1 5 我有一个简单的分布式锁定机制 应该可以跨多个 JVM 节点提供线程安全性 代码非常简单 private static HazelcastInstance hInst getHazelcastIn
  • 匿名类上的 NotSerializedException

    我有一个用于过滤项目的界面 public interface KeyValFilter extends Serializable public static final long serialVersionUID 7069537470113
  • 具有 java XSLT 扩展的数组

    我正在尝试使用 java 在 XSLT 扩展中使用数组 我收到以下错误 Caused by java lang ClassCastException org apache xpath objects XObject cannot be ca
  • 将 SignedHash 插入 PDF 中以进行外部签名过程 -workingSample

    遵循电子书第 4 3 3 节 PDF 文档的数字签名 https jira nuxeo com secure attachment 49931 digitalsignatures20130304 pdf 我正在尝试创建一个工作示例 其中 客
  • 很好地处理数据库约束错误

    再一次 它应该很简单 我的任务是在我们的应用程序的域对象中放置一个具有唯一约束的特定字段 这本身并不是一个很大的挑战 我刚刚做了以下事情 public class Location more fields Column unique tru
  • 编辑文件名在 JComboBox 中的显示方式,同时保持对文件的访问

    我对 Java 很陌生 对堆栈溢出也很陌生 我正在尝试利用 JMF API 创建一个用 Java 编码的简单媒体播放器 到目前为止 我已经能够设置一个简单的队列 播放列表来使用JComboBox called playListHolder
  • 如何在selenium服务器上提供自定义功能?

    我知道可以通过某种方法获得一些硒功能 其中之一如下 driver getCapabilities getBrowserName 它返回浏览器名称的值 但如果它指的是一个可用的方法 如果我没有误解的话 这似乎与自定义功能有关 就像我的意思是
  • Java整数双除法混淆[重复]

    这个问题在这里已经有答案了 方案1 int sum 30 double avg sum 4 result is 7 0 not 7 5 VS 方案2 int sum 30 double avg sum 4 0 Prints lns 7 5
  • 测试弱引用

    在 Java 中测试弱引用的正确方法是什么 我最初的想法是执行以下操作 public class WeakReferenceTest public class Target private String value public Targe
  • 我可以创建自定义 java.* 包吗?

    我可以创建一个与预定义包同名的自己的包吗在Java中 比如java lang 如果是这样 结果会怎样 这难道不能让我访问该包的受保护的成员 如果不是 是什么阻止我这样做 No java lang被禁止 安全管理器不允许 自定义 类java
  • HQL Hibernate 内连接

    我怎样才能在 Hibernate 中编写这个 SQL 查询 我想使用 Hibernate 来创建查询 而不是创建数据库 SELECT FROM Employee e INNER JOIN Team t ON e Id team t Id t
  • Java中的Object类是什么?

    什么是或什么类型private Object obj Object http download oracle com javase 6 docs api java lang Object html是Java继承层次结构中每个类的最终祖先 从
  • hashcode 的默认实现为以相同方式构造的对象返回不同的值

    我在这里编写一个示例代码 public class Test private int i private int j public Test TODO Auto generated constructor stub public Test
  • 调整添加的绘制组件的大小和奇怪的摆动行为

    这个问题困扰了我好几天 我正在制作一个特殊的绘画程序 我制作了一个 JPanel 并添加了使用 Paint 方法绘制的自定义 jComponent 问题是 每当我调整窗口大小时 所有添加的组件都会 消失 或者只是不绘制 因此我最终会得到一个
  • 在 RESTful Web 服务中实现注销

    我正在开发一个需要注销服务的移动应用程序 登录服务是通过数据库验证来完成的 现在我陷入了注销状态 退一步 您没有提供有关如何在应用程序中执行身份验证的详细信息 并且很难猜测您在做什么 但是 需要注意的是 在 REST 应用程序中 不能有会话

随机推荐

  • 国内外遥感卫星及遥感传感器

    文章基本信息概要 作者 doll CJ 文章编号 001 C C为综合基础文章 S为分级细化文章 P为应用实践文章 E为补充性文章 内容整理周期 2023年4月24日 2023年5月2日 文章提交日期 2023年5月2日 摘要 Abstra
  • 查看并修改Oracle用户的密码(适用于11g)

    如果你的 数据库版本低于 11g请参考 http www 51testing com index php uid 364865 action viewspace itemid 222982 有时候我们可能不知道一个用户的 密码 但是又需要以
  • 【微调视觉-语言模型】Learning to Prompt for Vision-Language Models

    微调视觉 语言模型 Learning to Prompt for Vision Language Models 代码地址 论文简介 动机和思路 具体实现 Vision Language Pre training Context Optimi
  • vue 分页器组件+css动画效果

    全网都找了一遍没有找到符合UI需求的分页动画 于是就主动上手了 需求 1 分页最多显示9页 总页数最多显示无上限 2 点击下一页的时候需要有动画效果过度 如果当前页数是当前显示最后的一页 则停了当前显示最后的位置 但是点击下一页的时候需要用
  • C++ 和 Qt 6 跨平台开发

    特点 使用 Qt 6 和现代 C 进行跨平台开发 涵盖使用标准 C 17 和 Qt 6 功能跨多个平台编写 GUI 应用程序的基本要素 从 Qt 框架的基础开始 包括 Qt Creator 提供的功能 展示如何使用 Qt Widgets 创
  • C++ 类详解(Plus)

    过程性编程和面向对象编程的区别 之前在那篇博客上看到这个比喻 觉得特别恰当 挺容易让人理解的 现在分享一下 用面向过程的方法写出来的程序是一份蛋炒饭 而用面向对象写出来的程序是一份盖浇饭 所谓盖浇饭 北京叫盖饭 东北叫烩饭 广东叫碟头饭 就
  • opencv 中Mat的一些操作

    https my oschina net drjones blog 312876 http blog sina com cn s blog 66e177dd0102w9dv html 1 创建矩阵 OpenCV Java中矩阵就是一个类 M
  • sql server 分组,取每组的前几行数据

    sql中group by后 获取每组中的前N行数据 目前我知道的有2种方法 比如有个成绩表 里面有字段学生ID 科目 成绩 我现在想取每个科目的头三名 1 子查询 select from score s where StudentName
  • 深入理解设计原则之组件构建原则【软件架构设计】

    系列文章目录 C 高性能优化编程系列 深入理解软件架构设计系列 深入理解设计模式系列 高级C 并发线程编程 困难只能吓倒懦夫懒汉 而胜利永远属于攀登高峰的人 Difficulties can only be intimidated by a
  • java内存分页工具类

    hutool 依赖
  • Android 首次开机进入 Launcher3 前黑屏几秒的情况问题的总结

    Android 首次开机进入 Launcher3 前黑屏几秒的情况问题的总结 首先 让我们来探讨一下 Android 系统在首次开机时为何会出现黑屏几秒的情况 在 Android 系统启动过程中 首先会加载 Linux 内核 然后启动 An
  • 关于生成图片

    数组生成图片 image Image fromarray np uint8 arr arr的shape必须是3在后面 比如 375 500 3 tensor生成图片 trans transforms ToPILImage image tra
  • 华为OD机试 - 代表团坐车(Java)

    题目描述 某组织举行会议 来了多个代表团同时到达 接待处只有一辆汽车 可以同时接待多个代表团 为了提高车辆利用率 请帮接待员计算可以坐满车的接待方案 输出方案数量 约束 一个团只能上一辆车 并且代表团人数 代表团数量小于30 每个代表团人数
  • c++栈的练习题

    1 Problem Detail 入门 火车编组 追梦算法网 栈的练习题 include
  • System.UnauthorizedAccessException: Access to the path is denied

    这个异常一般是操作文件读写时发生 一般有以下四个原因 调用方没有所需的权限 该文件是一个正在使用的可执行文件 路径是一个目录 该文件只读
  • javascript中的数字校验

    javascript限制输入的只能是数字 判断event keyCode的值 并将它限定只能为数字 如果不是数字 则返回错误 如果是数字 则继续 我先介绍验证javascript是否是数字另一种方式 通过下面的函数来实现 function
  • Unity3D之MonoBehaviour

    Unity3D中的MonoBehaviour是一种基于组件的编程架构 用于开发游戏和应用程序 它是Unity引擎中用于创建行为的基类之一 并且可以让你通过重写其方法来定义对象在游戏运行时的行为 首先 在Unity中创建一个游戏对象并向其添加
  • 使用vue+echarts世界地图航线路线

    这是一个vue结合echarts做的船舶轨迹运行线路图 一 安装echarts npm install echarts 二 全局引入 在全局引入 需要在main js文件中 引入echarts import echarts from ech
  • Unity3D模型

    SolidWorks建模导入Unity 前言 使用的版本 SolidWorks导入3DMax 3DMax导入Unity 结尾 前言 本篇主要作为个人经验记录 因项目需要将SW的模型导入Unity中使用 但SW中建模为实体而Unity多为面
  • Java中创建对象时内存中的情况

    public class Phone public String brand public double price public String color public void call String name System out p