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://xiahunao.cn/news/2775027.html

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

相关文章

【十二】【C++】vector用法的探究

vector类创建对象 /*vector类创建对象*/ #if 1 #define _CRT_SECURE_NO_WARNINGS#include <iostream> using namespace std; #include <vector> #include <algorithm> #include <crtdbg.h>class Date {public:Date(int year 1900, int month 1, int …

Web课程学习笔记--CSS选择器的分类

CSS 选择器的分类 基本规则 通过 CSS 可以向文档中的一组元素类型应用某些规则 利用 CSS&#xff0c;可以创建易于修改和编辑的规则&#xff0c;且能很容易地将其应用到定义的所有文本元素 规则结构 每个规则都有两个基本部分&#xff1a;选择器和声明块&#xff1b;声明块由一…

【C++】引用与内联

个人主页 &#xff1a; zxctsclrjjjcph 文章封面来自&#xff1a;艺术家–贤海林 如有转载请先通知 文章目录 1. 前言2. 引用2.1 引用概念2.2 引用使用场景2.3 引用特性2.4 引用和指针的区别2.5 传值、传引用效率比较2.5.1 值和引用的作为返回值类型的性能比较 3. 内联函数3.1 …

Guava RateLimiter单机实战指南

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 Guava RateLimiter单机实战指南 前言maven坐标引入业务实现重要参数和方法关于warmupPeriod实战 前言 想象一下你是一位大厨&#xff0c;正在烹饪美味佳肴。突然之间&#xff0c;前来就餐的人潮如潮水…

#Js篇:js里面递归的理解

定义&#xff1a; 递归是一种编程技术&#xff0c;它是指一个函数在其定义内部调用自身的过程。 特点&#xff1a; 一个问题可以分解为更小的问题用同样的方法解决&#xff1b;分解后的子问题求解方式一样&#xff0c;不同的是数据规模变小&#xff1b;存在递归终止条件 作…

单片机学习笔记---DS1302实时时钟工作原理

目录 DS1302介绍 学会读芯片手册&#xff08;DS1302芯片手册&#xff09; 封装 引脚定义 电源部分 时钟部分 通信部分 总结列表 内部结构图 电源控制部分 时钟控制部分 寄存器部分 访问部分 寄存器部分的详细定义 命令字 时序的定义 单字节读 单字节写 提前预…

Vulnhub-Empire靶机-详细打靶流程

渗透思路 1.确认靶机IP地址2.端口服务扫描3.敏感目录扫描4.ffuf命令在这个目录下&#xff0c;继续使用ffuf工具扫描 5.ssh私钥爆破1.将私钥写进sh.txt中2.将私钥转换为可以被john爆破的形式3.通过John爆破 6.ssh私钥登陆7.icex64提权8.arsene提权 1.确认靶机IP地址 ┌──(roo…

机器学习 | 深入集成学习的精髓及实战技巧挑战

目录 xgboost算法简介 泰坦尼克号乘客生存预测(实操) lightGBM算法简介 《绝地求生》玩家排名预测(实操) xgboost算法简介 XGBoost全名叫极端梯度提升树&#xff0c;XGBoost是集成学习方法的王牌&#xff0c;在Kaggle数据挖掘比赛中&#xff0c;大部分获胜者用了XGBoost。…

2 月 7 日算法练习- 数据结构-并查集

并查集 并查集是一种图形数据结构&#xff0c;用于存储图中结点的连通关系。 每个结点有一个父亲&#xff0c;可以理解为“一只伸出去的手”&#xff0c;会指向另外一个点&#xff0c;初始时指向自己。 一个点的根节点是该点的父亲的父亲的的父亲&#xff0c;直到某个点的父亲…

Python:流程控制

4.1 顺序结构 在任何编程语言中最常见的程序结构就是顺序结构。顺序结构就是程序从上到下一行行地执行&#xff0c;中间没有任何判断和跳转。 如果Python程序的多行代码之间没有任何流程控制&#xff0c;则程序总是从上往下依次执行&#xff0c;排在前面的代码先执行&#xf…

vue3-内置组件-KeepAlive

KeepAlive <KeepAlive> 是一个内置组件&#xff0c;它的功能是在多个组件间动态切换时缓存被移除的组件实例。 基本使用 默认情况下&#xff0c;一个组件实例在被替换掉后会被销毁。这会导致它丢失其中所有已变化的状态——当这个组件再一次被显示时&#xff0c;会创建…

大数据 - Spark系列《五》- Spark常用算子

Spark系列文章&#xff1a; 大数据 - Spark系列《一》- 从Hadoop到Spark&#xff1a;大数据计算引擎的演进-CSDN博客 大数据 - Spark系列《二》- 关于Spark在Idea中的一些常用配置-CSDN博客 大数据 - Spark系列《三》- 加载各种数据源创建RDD-CSDN博客 大数据 - Spark系列《…

PyTorch深度学习实战(23)——从零开始实现SSD目标检测

PyTorch深度学习实战&#xff08;23&#xff09;——从零开始实现SSD目标检测 0. 前言1. SSD 目标检测模型1.1 SSD 网络架构1.2 利用不同网络层执行边界框和类别预测1.3 不同网络层中默认框的尺寸和宽高比1.4 数据准备1.5 模型训练 2. 实现 SSD 目标检测2.1 SSD300 架构2.2 Mul…

【SpringBoot】JWT令牌

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;SpringBoot ⛺️稳重求进&#xff0c;晒太阳 什么是JWT JWT简称JSON Web Token&#xff0c;也就是通过JSON形式作为Web应用的令牌&#xff0c;用于各方面之间安全的将信息作为JSON对象传输…

第5章——深度学习入门(鱼书)

第5章 误差反向传播法 上一章中&#xff0c;我们介绍了神经网络的学习&#xff0c;并通过数值微分计算了神经网络的权重参数的梯度&#xff08;严格来说&#xff0c;是损失函数关于权重参数的梯度&#xff09;。数值微分虽然简单&#xff0c;也容易实现&#xff0c;但缺点是计…

CODE V的API 之 PSF数据的获取(3)

PSF的获取 文章目录 PSF的获取前言一、主要代码总结 前言 主要利用buf语句进行传递&#xff0c;在worksheet中有收藏。 一、主要代码 Sub OnRunPSF() Dim session As CVCommand Set session CreateObject("CodeV.Command.102") session.SetStartingDirectory (&q…

C++分支语句

个人主页&#xff1a;PingdiGuo_guo 收录专栏&#xff1a;C干货专栏 大家新年快乐&#xff0c;今天&#xff0c;我们来了解一下分支语句。 文章目录 1.什么是分支语句 1.if语句 基本形式 用法说明 练习 2.if-else语句 基本形式 用法说明 练习 3.switch语句 基本形式…

进程间通信(4):消息队列

先进先出&#xff0c;保证信息的有序性。 函数&#xff1a;msgget(搭配ftok)、msgsnd、msgrcv、msgctl 实现流程&#xff1a; 1、创建消息队列IPC对象 msgget 2、通信(内置函数&#xff1a;msgsnd、msgrcv) 3、删除消息队列IPC对象 msgctl write.c /* * 文件名称&…

数字图像处理实验记录九(数字形态学实验)

一、基础知识 1.形态学&#xff0c;用于从图像中提取对表达和描绘区域形状有意义的图像分量&#xff0c;使后续的识别工作能够抓住目标对象最为有本质的形状特征&#xff0c;如边界连通区域等。 2.膨胀运算&#xff1a;膨胀会使目标区域范围“变大”&#xff0c;将于目标区域接…

第三百一十五回

文章目录 1. 概念介绍2. 基本用法3. 补充用法4. 内容总结 我们在上一章回中介绍了"再谈ListView中的分隔线"&#xff0c;本章回中将介绍showMenu的用法.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在第一百六十三回中介绍了showMenu相关的内容…