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.mzph.cn/news/672654.shtml

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

相关文章

【Langchain+Streamlit】打造一个旅游问答AI

利用LangchainStreamlit打造一个交互简单的旅游问答AI机器人,如果你有openai账号,可以按照如下的网址直接体验,如果你没有的话可以站内私信博主要一下临时key体验一下: 产品使用传送门—— http://101.33.225.241:8501/ 这里有演示效果和代码…

蓝桥杯(Web大学组)2023省赛真题3:收集帛书碎片

需要实现: 1.将二维数组转为一维数组; 2.数组去重 一、将二维数组转为一维数组: 二、数组去重: function collectPuzzle(...puzzles) {// console.log(puzzles);// console.log(...puzzles);// TODO:在这里写入具体的实现逻辑/…

论文阅读-Examining Zero-Shot Vulnerability Repair with Large Language Models

1.本文主旨: 这篇论文探讨了使用大型语言模型(LLM)进行零射击漏洞修复的方法。人类开发人员编写的代码可能存在网络安全漏洞,新兴的智能代码补全工具是否能帮助修复这些漏洞呢?在本文中,作者研究了大型语言…

最新话费充值系统源码,附带系统安装教程

搭建教程 亲测环境:PHP7.0MySQL5.6 PHP扩展安装:sg11 数据库配置文件路径:/config/database.php 伪静态设置为thinkphp 后台地址:/admin 账号密码:admin/123456

ASP.NET Core MVC 控制查询数据表后在视图显示

如果是手动写代码&#xff0c;不用VS自带的一些控件&#xff0c;那比较简单的方式就是把查询的数据集&#xff0c;逐条赋给对象模型&#xff0c;再加到List&#xff0c;最后在控制加到 ViewBag&#xff0c;视图循环显示ViewBag变量 控制器代码 List<Users> list new Li…

node.js后端+小程序前端+mongoDB(增删改查)

前言 今天我对比了以下node.js的express与python的fastAPI&#xff0c;我决定我还是出一期关于node.jsmangoDB小程序的小案例吧。 不是python的fastAPI不好用&#xff0c;因为fastAPI是python较新的技术&#xff0c;我不敢果断发出教学文章&#xff08;这件事情还是留着给pyt…

[机器学习]K-means——聚类算法

一.K-means算法概念 二.代码实现 # 0. 引入依赖 import numpy as np import matplotlib.pyplot as plt # 画图依赖 from sklearn.datasets import make_blobs # 从sklearn中直接生成聚类数据# 1. 数据加载 # 生成&#xff08;n_samples&#xff1a;样本点&#xff0c;centers&…

PostgreSQL不停机迁移数据

通常涉及到数据迁移&#xff0c;常规操作都是停服务更新。不停机迁移数据是相对比较高级的操作。 不停机数据迁移在本质上&#xff0c;可以视作由三个操作组成&#xff1a; 复制&#xff1a;将目标表从源库逻辑复制到宿库。改读&#xff1a;将应用读取路径由源库迁移到宿库上…

从零开始手写mmo游戏从框架到爆炸(零)—— 导航

从今天开始我们尝试从零开始写一个mmo的游戏。主要技术还是netty。参考了网上很多的大神的框架&#xff0c;本来希望基于ioGame或者vert.x等来直接写功能的&#xff0c;觉得从零开始更有意义&#xff0c;而且咱们也不需要太NB的底层功能&#xff0c;够用就行。 下面是导航&…

HarmonyOS开发工具DevEco Studio安装以及汉化

HUAWEI DevEco Studio 面向HarmonyOS应用及元服务开发者提供的集成开发环境(IDE)&#xff0c; 助力高效开发。 应用内共享HSP开发 支持在Stage模型和模块化编译方式下开发HSP&#xff0c;以及共享HSP给应用内其他模块使用;支持运行态共享HSP。Code Linter代码检查 支持ArkTS/T…

幻兽帕鲁转移/迁移游戏存档之后,无法迁移角色存档,进入游戏需要重新建角色问题(已解决),服务器到服务器之间的存档转移

很多朋友在迁移幻兽帕鲁游戏存档到服务器的时候&#xff0c;可能会遇到一个问题&#xff0c;就是迁移完成后&#xff0c;进入到游戏会发现又需要从头开始&#xff0c;重新新建角色。 其实这个问题也很好解决&#xff0c;因为Palworld服务端有两种&#xff0c;一种是有APPID&…

SpringFramework实战指南(六)

SpringFramework实战指南(六) 4.4 基于 配置类 方式管理 Bean4.4.1 完全注解开发理解4.4.2 实验一:配置类和扫描注解4.4.3 实验二:@Bean定义组件4.4.4 实验三:高级特性:@Bean注解细节4.4.5 实验四:高级特性:@Import扩展4.4.6 实验五:基于注解+配置类方式整合三层架构组…

vue项目集成booststrap

1.首先安装bootstrap npm install bootstrap 我安装的是4.3的版本 2.在main.js中引用bootstrap import bootstrap/dist/css/bootstrap.css import bootstrap/dist/css/bootstrap.min.css import bootstrap/dist/js/bootstrap.js import bootstrap/dist/js/bootstrap.min.…

(Python)字典列表数据本地存储工具

前言 一个简单的实现简便 "列表字典" 数据存储本地。 适合不会SQL但又想实现数据存储本地的同学。 操作使用都非常简单。 文件只做了简单的加密处理&#xff0c;如果需要复杂加密的同学可以修改加密函数。 温馨提示&#xff1a; 1.使用前&#xff0c;在项目目录…

CentOS7如何安装宝塔面板并实现固定公网地址远程访问

文章目录 一、使用官网一键安装命令安装宝塔二、简单配置宝塔&#xff0c;内网穿透三、使用固定公网地址访问宝塔 宝塔面板作为建站运维工具&#xff0c;适合新手&#xff0c;简单好用。当我们在家里/公司搭建了宝塔&#xff0c;没有公网IP&#xff0c;但是想要在外也可以访问内…

使用Spring AOP实现对外接口的日志自动打印

文章目录 一、引言二、使用AOP实现日志打印三、logback单独打印api调用信息 一、引言 相信我们都有过这样的经历&#xff0c;在提供第三方对外接口时&#xff0c;为了防止推诿扯皮&#xff0c;我们会在自己接口被调用时日志打印一下第三方的调用参数&#xff0c;再在业务逻辑结…

数据结构第十一天(栈)

目录 前言 概述 源码&#xff1a; 主函数&#xff1a; 运行结果&#xff1a; ​编辑 前言 今天简单的实现了栈&#xff0c;主要还是指针操作&#xff0c;soeasy! 友友们如果想存储其他内容&#xff0c;只需修改结构体中的内容即可。 哈哈&#xff0c;要是感觉不错&…

[React] ref属性

简介 ref 即 reference &#xff0c;是 React 提供给我们的安全访问 DOM 元素或者某个组件实例的句柄。 组件被调用时会新建一个该组件的实例&#xff0c;而 ref 就会指向这个实例。它可以是一个回调函数&#xff0c;这个回调函数会在组件被挂载后立即执行。 为了防止内存泄漏…

数论 之 欧拉函数篇

欧拉函数 定义&#xff1a;1 ∼ N 中与 N 互质的数的个数被称为欧拉函数&#xff0c;记为 ϕ(N) 公式&#xff1a;若 N p1^a1 * p2^a2 * … * pk^ak 所有的pi都是N的质因数 那么 ϕ(N) N * (p1-1)/p1 * (p2-1)/p2 * … *(pk-1)/pk; 性质 : 性质1&#xff1a;如果n是质数&…

【C生万物】C语言分支和循环语句

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更新的动力❤️ &#x1f64f;小杨水平有…