Java学习15-- 面向对象学习3. 对象的创建分析【★】

(本章看不懂多读几遍,弄懂后再往下章看)

面向对象学习3. 对象的创建分析

Java Memory Structure:

在这里插入图片描述

如上图所示:

主要分为Stack和Heap Memory

其中Stack主要放method包括main
程序从main开始所以main最先进入Stack,等所有其他需要调用的程序和variable全部调用结束,main作为收尾最后从stack出来。

而Heap memory又分为Heap Area和Method Area
建立object需要按照模板class的样子来,class模板的结构在Method area里面

实际建立的object放在Heap area,
object实际定义用到的自定义String内容放在Method Area里面的String Pool

参考资料
https://www.guru99.com/java-stack-heap.html
https://www.baeldung.com/java-stack-heap
https://www.geeksforgeeks.org/java-memory-management/?ref=lbp
https://www.javatpoint.com/memory-management-in-java

创建对象object时候内存分析

Application的main()在栈最底下,随着程序执行,一层一层往上跑,之后执行结束Application就到了栈最上面,执行结束。

每次new一个对象object,就套用Heap memory里面的method area方法区class模板,按照class的样子在heap area里面新建一个object(比如新建一个doggy1,新建一个doggy2)。

举例

public class Dog{
		String name;
		int age;
		
		public void run(){
			System.out.println("running");
		}
}

编写测试代码

public class Test{

  public static void main(String[] args){
    Dog doggy1 = new Dog();
    doggy1.name = "Ahuang";
    doggy1.age = 1;
    doggy1.run;

    Dog doggy2 = new Dog();
    doggy2.name = "AHui";
    doggy2.age = 5;
    doggy2.run;}
	
	public static int add(int a, int b)
	{return a+b;}
	
}

在这里插入图片描述

栈stack:主要用于存储main(),引用自定义的变量名等

堆heap area:存储实际新建的object对象,执行每个object里面的run步骤时候会去调用method area里面的具体run结构

方法区method area:存储class类定义结构的细节信息

静态方法区static area,和class类一起加载,可以被object对象直接使用


举例: new object时候JVM具体分析

- 程序在stack跑,这里也是main的地盘 发现需要new一个object 类型为Dog具体object名叫做doggy1,它会在stack新建一层,准备存放地址(引用变量ref#地址是从下一步送过来的#比如地址为0x0001)
- 需要new一个新的Dog时候,先去class里面找到Dog class的结构,在heap area具体生成一个按照这个class结构构造的Dog,并给出该Dog object的具体地址链接去stack(比如地址为0x0001)
- 或许在heap area内运行自建的object时发现它需要运行一些具体的method,比如run(),而如何run()是包含在Dog class中的,这时候就需要链接method area,因为Dog class的原始具体定义在那存放着,其中当然也包括如何run()。
- 或许在heap area内运行自建的object时发现它需要运行一些具体的名称,比如doggy1的名字叫做Ahuang,而“Ahuang”这个String是存放在String Pool(可以在Method area找到它)
- 特殊的static area静态方法区:比如主程序里的一个method:public static int add()因为加了static,这种是在method area区的static area和其他class结构一起加载的,之后能够被heap area里面的object快速的直接调用。

思考:
什么是Heap space and Permgen (or called Permanent Generation)?

总结

  1. class类与object对象
  • class类是一个模板:比较抽象
  • object对象是一个按照class模样,依葫芦画瓢的自建实例
  1. 方法method
  • method定义:一个仅在被召唤时候才动弹的代码块。可以给它喂data或parameters。有专职功能的method,叫做functions。
  • 调用:method在程序中被创建,调用分为static和non-static
    3 ref引用链接
    引用类型:基本类型(8种)
    object通过stack存储地址,地址指向heap area 新建的new object
    对象是通过引用来操作的:栈stack—>堆heap area
  1. 属性:class里面的字段Field 成员变量(提示:class里面定义的变量,及其初始数值比如Null)
    默认的初始化值(用户写系统会默认给的值)
    数字:0 0.0
    char:u0000
    boolean: false
    引用的自定义字符串等:null
    赋值的结构:修饰符 属性类型 属性名=属性值(比如int a = 3;)
  2. object对象的创建和使用
  • 必须使用new关键字创造对象 和 constrcutor构造器(如果用户没写constructor,系统会偷偷帮你创建一个,在反编译的.class文件中可以清楚地看到) Person x = new Person();
  • object对象的field属性写法 x.name
  • object对象的method写法 x.run()
  1. 类class里面只会有下面两个部分
  • 静态的属性static field 属性
  • 动态的行为non-static method 方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/378731.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯第八届省赛题笔记------基于单片机的电子钟程序设计与调试

题目要求: 一、基本要求 1.1 使用 CT107D 单片机竞赛板,完成“电子钟”功能的程序设计与调试; 1.2 设计与调试过程中,可参考组委会提供的“资源数据包”; 1.3 Keil 工程文件以准考证号命名,保存在…

C语言系列-文件操作

🌈个人主页: 会编程的果子君 ​💫个人格言:“成为自己未来的主人~” 为什么使用文件 如果没有文件,我们写的程序的数据是存储在电脑的内存上,如果程序退出,内存回收,数据就会丢失了,等再次运行…

MySQL 日志管理

4.6)日志管理 MySQL 支持丰富的日志类型,如下: 事务日志:transaction log 事务日志的写入类型为 "追加",因此其操作为 "顺序IO"; 通常也被称为:预写式日志 write ahead…

[职场] 服务行业个人简历 #笔记#笔记

服务行业个人简历 服务员个人简历范文1 姓名: XXX国籍:中国 目前所在地:天河区民族:汉族 户口所在地:阳江身材: 160cm43kg 婚姻状况:未婚年龄: 21岁 培训认证:诚信徽章: 求职意向及工作经历 人才类型:普通求职 应聘职位: 工作年限:职称:初级 求职类型:全职可到职日期:随时 月薪…

住宅供暖设备行业调研:市场环境将稳定发展阶段中

为使人们生活或进行生产的空间保持在适宜的热状态而设置的供热设施。 向一定的空间加热量的办法,可以直接把产生热量的火炉装在其中;也可以抽出其中的空气,加热后再送回;也可以在其中装置保持在较高温度的物体,向所在空间放热。这种温度较高的…

极值图论基础

目录 一,普通子图禁图 二,Turan问题 三,Turan定理、Turan图 1,Turan定理 2,Turan图 四,以完全二部图为禁图的Turan问题 1,最大边数的上界 2,最大边数的下界 五,…

机器人学、机器视觉与控制 上机笔记(第一版译文版 2.1章节)

机器人学、机器视觉与控制 上机笔记(第一版译文版 2.1章节) 1、前言2、本篇内容3、代码记录3.1、新建se23.2、生成坐标系3.3、将T1表示的变换绘制3.4、完整绘制代码3.5、获取点*在坐标系1下的表示3.6、相对坐标获取完整代码 4、结语 1、前言 工作需要&a…

【前端web入门第四天】03 显示模式+综合案例热词与banner效果

文章目录: 1. 显示模式 1.1 块级元素,行内元素,行内块元素 1.2 转换显示模式 综合案例 综合案例一 热词综合案例二 banner效果 1. 显示模式 什么是显示模式 标签(元素)的显示方式 标签的作用是什么? 布局网页的时候,根据标签的显示模式选择合适的标签摆放内容。…

编码安全风险是什么,如何进行有效的防护

2011年6月28日晚20时左右,新浪微博突然爆发XSS,大批用户中招,被XSS攻击的用户点击恶意链接后并自动关注一位名为HELLOSAMY的用户,之后开始自动转发微博和私信好友来继续传播恶意地址。不少认证用户中招,也导致该XSS被更…

21、数据结构/单向循环链表练习20240203

一、请编程实现单向循环链表的头插,头删、尾插、尾删。 二、请编程实现单向循环链表约瑟夫环 约瑟夫环:用循环链表编程实现约瑟夫问题 n个人围成一圈,从某人开始报数1, 2, …, m,数到m的人出圈,然后从出圈的下一个人…

pytorch入门第一天

今天作为入门pytorch的第一天。打算记录每天学习pytorch的一些理解和笔记,以用来后面回顾。当然如果能帮到和我一样的初学者,那也是不胜荣幸。作为一名初学者,难免有些地方会现错误,欢迎各位大佬指出 预备知识 这里主要介绍pyto…

gtkmm4 应用程序使用 CSS 样式

文章目录 前言css选择器css文件示例源代码效果 前言 程序样式和代码逻辑分离开 使代码逻辑更可观 css选择器 Cambalache提供了两种css-classes 相当于css里的类名:class“类名”css-name 相当于css里的标签名:spin div p 啥的 如上我设置了这个按钮控件的类名为testButton 标…

基于Chrome插件的Chatgpt对话无损导出markdown格式(Typora完美显示)

刚刚提交插件到Chrome插件商店正在审核,想尝试的可以先使用: https://github.com/thisisbaiy/ChatGPT-To-Markdown-google-plugin/tree/main 我将源代码上传至了GitHub,欢迎star, IssueGoogle插件名称为:ChatGPT to MarkDown plus…

元宇宙虚拟数字人实训室:推动高校培养创新技术人才

随着元宇宙时代的到来,虚拟数字人技术逐渐成为当下火热的产业赛道之一。虚拟数字人涉及了计算机、数字媒体、市场营销等学科技术领域,高校可以通过搭建元宇宙虚拟数字人实训室,有效培养对元宇宙行业的专业化理解和研究能力的专业型创新人才。…

Python中的数据类型

如果说python中的数据类型,那我们要从标准数据类型说起,在python中标准数据类型如下: 数字类型: 数字数据类型用于存储数值。 他们是不可改变的数据类型,这意味着改变数字数据类型会分配一个新的对象。 在python2.X中数据类型分的比较多,有int(有符号整型),long(…

原生JS使用PrintJs进行表格打印 -- 遇到的问题总结

需求1:表格自动分页之后,表头在每一页都需要显示 html中表头增加 thead 标签 css样式新增: thead {display: table-header-group; /* 这个属性使thead总是在新的page-break之后重新开始 */ }需求2:表格自动分页之后,…

MySQL优化器

优化器 MySQL存储引擎中存在了一个可插拔的优化器OPTIMIZER_TRACE,可以看到内部查询计划的TRACE信息,从而可以知道MySQL内部执行过程 查询优化器状态 show variables like optimizer_trace;Variable_name Valueoptimizer_trace enabledoff,one_lineoff…

【数据结构】二叉树的顺序结构及链式结构

目录 1.树的概念及结构 1.1树的概念 1.2树的相关概念 ​编辑 1.3树的表示 1.4树在实际中的运用(表示文件系统的目录树结构) 2.二叉树概念及结构 2.1二叉树的概念 2.2现实中的二叉树 ​编辑 2.3特殊的二叉树 2.4二叉树的性质 2.5二叉树的存储结…

2023爱分析·通用大模型市场厂商评估报告:出门问问

01 研究范围定义 研究范围: 大模型是指通过在海量数据上依托强大算力资源进行训练后能完成大量不同下游任务的模型。2023年以来,ChatGPT引爆全球大模型市场。国内众多大模型先后公测,众多互联网领军者投身大模型事业,使得大模型…

微信小程序(三十八)滚动容器

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.滚动触底事件 2.下拉刷新事件 源码&#xff1a; index.wxml <view class"Area"> <!-- scroll-y 垂直滚动refresher-enabled 允许刷新bindrefresherrefresh 绑定刷新作用函数bindscrollto…
最新文章