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

news2024/9/24 23:24:57

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

面向对象学习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.coloradmin.cn/o/1439219.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

e5 服务器具备哪些性能特点?

随着云计算和大数据技术的不断发展,服务器作为数据中心的核心设备,其性能特点也日益受到关注。其中,E5服务器作为当前主流的服务器类型之一,具备许多优秀的性能特点。本文将详细介绍E5服务器的性能特点,帮助读者更好地…

深度学习的新进展:解析技术演进与应用前景

深度学习的新进展:解析技术演进与应用前景 深度学习,作为人工智能领域的一颗璀璨明珠,一直以来都在不断刷新我们对技术和未来的认知。随着时间的推移,深度学习不断迎来新的进展,这不仅推动了技术的演进,也…

Vagrant 虚拟机工具基本操作指南

Vagrant 虚拟机工具基本操作指南 ​#虚拟机 #​ ​#vargant#​ ​#ubuntu#​ ‍ 虚拟机virtualbox ,VMWare及WSL等大家都很了解了,那Vagrant是什么东西? 它是一组命令行工具,可以象Docker管理容器一样管理虚拟机,这样快速创…

Flink Format系列(2)-CSV

Flink的csv格式支持读和写csv格式的数据,只需要指定 format csv,下面以kafka为例。 CREATE TABLE user_behavior (user_id BIGINT,item_id BIGINT,category_id BIGINT,behavior STRING,ts TIMESTAMP(3) ) WITH (connector kafka,topic user_behavior…

NLP_“预训练+微调大模型”模式和Prompt/Instruct模式的异同

文章目录 “预训练微调大模型”的模式以提示/指令模式直接使用大模型“预训练微调大模型”模式和Prompt/Instruct模式的异同小结 “预训练微调大模型”的模式 经过预训练的大模型所习得的语义信息和所蕴含的语言知识,很容易向下游任务迁移。NLP应用人员可以根据自己…

阅读《极客时间 | Kafka核心技术与实战》(一)【Kafka入门】

阅读《极客时间 | Kafka核心技术与实战》 为什么要学习Kafka消息引擎系统ABC一篇文章带你快速搞定Kafka术语我应该选择哪种Kafka?聊聊Kafka的版本号 为什么要学习Kafka 如果你是一名软件开发工程师的话,掌握 Kafka 的第一步就是要根据你掌握的编程语言去…

c++阶梯之类与对象(中)< 续集 >

前文: c阶梯之类与对象(上)-CSDN博客 c阶梯之类与对象(中)-CSDN博客 前言: 在上文中,我们学习了类的六个默认成员函数之构造,析构与拷贝构造函数,接下来我们来看看剩下…

探讨CSDN等级制度:博客等级、原力等级、创作者等级

个人名片: 🦁作者简介:学生 🐯个人主页:妄北y 🐧个人QQ:2061314755 🐻个人邮箱:2061314755qq.com 🦉个人WeChat:Vir2021GKBS 🐼本文由…

HarmonyOS 鸿蒙应用开发(九、还是蓝海,如何贡献第三方库)

快来共享第三方库吧,不但可以通过分享自己的成果,可以获得来自全球开发者的技术反馈和建议,提升自身技术能力,还有助于提高个人或团队在开源社区中的知名度和影响力。在流量时代和粉丝经济时代,获得曝光度和流量密码。…

Java学习16-- 面向对象学习45. 面向对象三大特征抽象类和接口

面向对象学习4. 面向对象三大特征 1封装:高内聚(内部细节自己用,外部不能介入),低耦合(保留很少接口给外部使用),信息隐藏(禁止外界直接访问内部数据(private),如需要,可通过get/set接口访问&a…

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

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

自然语言处理(NLP)——使用Rasa创建聊天机器人

1 基本概念 1.1 自然语言处理的分类 IR-BOT&#xff1a;检索型问答系统 Task-bot&#xff1a;任务型对话系统 Chitchat-bot:闲聊系统 1.2 任务型对话Task-Bot:task-oriented bot 这张图展示了一个语音对话系统&#xff08;或聊天机器人&#xff09;的基本组成部分和它们之间的…

各款Excel、word在线预览工具对比分析以及onlyoffice预览Excel加载时间长的解决方案

对于onlyoffice插件预览慢的问题分析&#xff1a; 研究了一下onlyoffice&#xff0c;得出以下结论&#xff01; 对于预览慢的问题&#xff0c;原因出在文件类型上&#xff0c;文件类型为低版本xls而非新版xlsx文件&#xff0c;onlyoffice服务器会自动将该文件转换为xlsx文件再…

【大厂AI课学习笔记】1.5 AI技术领域(6)目标检测

目标检测是CV中的重要场景。 在图像中定位感兴趣的目标&#xff0c;准确判断每个目标的类别&#xff0c;并给出每个目标的边界框。 上图是目标检测的典型应用案例。 目标检测的难点是小目标的高精度检测。 目前主要的应用领域是机器人导航、自动驾驶、智能视频监督、工业检测…

Java 排序

Java 排序 1 Collection 排序 Collections类中的: sort方法可以对List对象进行排序,该方法使用自然排序&#xff0c;即根据元素的自然顺序进行排序。如果需要对自定义对象进行排序&#xff0c;需要实现Comparable接口并重写compareTo方法。Collections类还提供了一些静态方法…

提速MySQL:数据库性能加速策略全解析

提速MySQL&#xff1a;数据库性能加速策略全解析 引言理解MySQL性能指标监控和评估性能指标索引优化技巧索引优化实战案例 查询优化实战查询优化案例分析 存储引擎优化InnoDB vs MyISAM选择和优化存储引擎存储引擎优化实例 配置调整与系统优化配置调整系统优化优化实例 实战案例…

NAT——网络地址转换、NAPT

网络地址转换 NAT (Network Address Translation) 1994 年提出。 需要在专用网连接到互联网的路由器上安装 NAT 软件。 装有 NAT 软件的路由器叫做 NAT路由器&#xff0c;它至少有一个有效的外部全球 IP 地址。 所有使用本地地址的主机在和外界通信时&#xff0c;都要在 NA…

【python绘图】爱心、樱花树、饼图、折线图、雷达图

一、爱心 import turtledef curvemove():for i in range(200):turtle.speed(0)turtle.right(1) # 光标向右偏1度turtle.forward(1)# 前进1pxturtle.penup() turtle.goto(0, -70) turtle.pendown()turtle.color(red) turtle.begin_fill() turtle.left(140) turtle.forward(111…

计算机网络-无线通信技术与原理

一般我们网络工程师接触比较多的是交换机、路由器&#xff0c;很少涉及到WiFi和无线设置&#xff0c;但是呢在实际工作中一般企业也是有这些需求的&#xff0c;这就需要我们对于无线的一些基本配置也要有独立部署能力&#xff0c;今天来简单了解一下。 一、无线网络基础 1.1 无…

[设计模式Java实现附plantuml源码~行为型]请求的链式处理——职责链模式

前言&#xff1a; 为什么之前写过Golang 版的设计模式&#xff0c;还在重新写Java 版&#xff1f; 答&#xff1a;因为对于我而言&#xff0c;当然也希望对正在学习的大伙有帮助。Java作为一门纯面向对象的语言&#xff0c;更适合用于学习设计模式。 为什么类图要附上uml 因为很…