Java面向对象进阶之简单内存分析
2021/11/6 7:11:34
本文主要是介绍Java面向对象进阶之简单内存分析,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Java面向对象进阶之内存分析
- 前言
- 一、内存分析
- 总结
- 参考文献
前言
如果没有面向对象基础,先看一个Java类看懂面向对象.
当new对象时,才会涉及到内存的分配,此时构造器构造对象的静态特征和动态行为。
JVM内存分为函数栈、堆、方法区。
一、内存分析
package com.xhu.java; import java.util.Date; import java.util.GregorianCalendar; /** * 一群学生抽象出来的学生类,抽象就是一个向上找描述物体的框架过程。 */ public class Student { /** * 第一部分,一群物体抽象出来的静态特征,它们的公共特征。对一群物体观察得越仔细,抽象出来的静态特征越多。 */ public String idCard;//每个学生都有身份证号码 public String name;//每个学生都有姓名 public Date birth;//每个学生都有出生时间 /** * 第二部分,一群物体抽象出来的动态行为,它们的公共行为。对一群物体观察得越仔细,抽象出来的动态行为越多。 */ public void eat() {//每个学生都有吃饭的行为。 //面向过程去编写吃饭这个行为。 System.out.println("洗手"); System.out.println("吃饭"); System.out.println("洗碗"); } public void sleep() {//每个学生都有睡觉的行为。 //面向过程去编写睡觉这个行为。 System.out.println("洗漱"); System.out.println("上床"); System.out.println("睡觉"); } /** * 这是动态行为跟静态特征关联协作的地方。 */ public void updateName(String name) {//每个学生可以修改他的名字 this.name = name; } /** * 第三部分,构造器,向上的过程为抽象,向下的过程就是具体。比如来了一个新同学,一个真实的学生,此时就需要把他实例构造出来。 */ public Student(String idCard, String name, Date birth) {//构造一个真实的对象,对他的基本特征设定一个具体的值 this.idCard = idCard; this.name = name; this.birth = birth; } /*public Student Student(){ return this; }*/ /** * 实例化对象,Java要求所有函数写入类之中,写一个该类的入口函数(该函数属于类,所以应该是static)main函数。(run一个类,必须要有入口函数main) */ public static void main(String[] args) { //通过new构造器来向下构造一个具体的对象 Student s1 = new Student("111111111111","Jack马", new GregorianCalendar().getTime()); Student s2 = new Student("222222222222","Pony马",new GregorianCalendar().getTime()); } }
1)进入主函数,开辟一个栈帧,有自己的变量
注:这里的参数有默认赋值,不同类型有不同的默认方式
所以此时args = null;s1 = null;s2 = null.
2)
Student s1 = new Student("111111111111","Jack马", new GregorianCalendar().getTime());
,此时要new出对象s1,调用构造函数,开辟栈帧,开辟对象空间并赋值。
3)执行
Student s2 = new Student("222222222222","Pony马",new GregorianCalendar().getTime());
,前一个构造函数结束,栈顶帧出栈,调用新的构造器开辟新的栈帧。
4)调用构造函数完毕,出栈。此时,买main函数也调用完毕,main函数出栈,程序结束。
总结
1)JVM的函数栈、堆、方法区。
2)面向对象时的简单内存分析。
参考文献
[1] 尚硅谷Java SE–高淇
这篇关于Java面向对象进阶之简单内存分析的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-30java最新版本是什么,有什么特性?-icode9专业技术文章分享
- 2024-11-30[开源]27.8K star!这款 Postman 替代工具太火了!
- 2024-11-30Gzip 压缩入门教程:轻松掌握文件压缩技巧
- 2024-11-29开源工具的魅力:让文档管理更“聪明”
- 2024-11-29Release-it开发入门教程
- 2024-11-29Rollup 插件入门教程:轻松掌握模块打包
- 2024-11-29从零到一,产品经理如何玩转项目管理和团队协作
- 2024-11-29如何通过精益生产管理工具帮助项目团队实现精准进度控制?
- 2024-11-29低代码应用开发课程:新手入门与基础教程
- 2024-11-29入门指南:全栈低代码开发课程