JAVA-初步认识-第四章-内存图解

栈内存和堆内存是内存划分中,始终存在的。两者相互配合使用。

数据类型的划分中,将数组分为引用数据类型,就在于局部变量从数组实体中获取数据的方式得来的。数据类型分为,基本数据类型和引用数据类型。引用数据类型重点在于“引用”,“基本”和“引用”的不同就在于机制的不同。类和函数也被称作引用数据类型,说明它们也是独立存在,可以被调用的,具体可见前面的功能化函数调用。

上图中的代码不一定放在主函数里,但是变量一定有自己的所属函数。

我们来分析一下流程:cpu划分的五部分内存是一直存在的,首先在栈内存中,加载进去函数和属于函数的局部变量。为了明确基本数据赋值和引用数据赋值的不一样,我们在定义局部变量时,将二者区分开来,一个是int x,另一个是int[] x。一个是int类型,另一个是[]数据类型,但是为了表示出数组实体中存放的是什么类型的数据,在[]数组类型的前面加上所存储数据的类型int。同时,堆内存中也要准备好对应的数据,先是根据关键字new,在堆内存中开辟出一个数组类型的空间,空间的大小为3,同时给3个小空间给定空间地址(先给定地址,后给定数值)和默认赋值,最后将对应空间地址传送给局部变量,由局部变量自己来数组中搜寻数据。这一过程,可以理解为局部变量的数据本身是没有的,引用的都是来自数组的数据。

对于第二个语句int[] y=new int[3]而言,y和x引用的绝不是同一个数组,是重新定义的另一个数据。

接着的x[]=9, y[]=34, 都是对数组中的元素进行赋值和栈中的局部变量没有任何关系。

最后,书写了x=y的语句,x和y都是局部变量,它们之间赋值操作是在栈内存中操作的,将y的内存的空间地址给x,然后x去下面的数组来搜寻对应的位置的数据,上面的数据就变成了垃圾。接着System.out.println(x[0]),输出的是34,就是由于上面的数组已经变为了垃圾。

只要还有局部变量的指向,那么数组就不是垃圾。多个引用变量是可以同时指向一个实体的。

时间: 2024-08-25 16:14:24

JAVA-初步认识-第四章-内存图解的相关文章

(转)JAVA AJAX教程第四章—AJAX和MVC的简单结合

这里我们再理解了AJAX后,开始来用实例感受AJAX的力量. 今天我最后要实现的效果,当鼠标放到图片上时会根据,会把数据库库里的数据读出,通过显示框显示出来.这个在很多网上商店都有用到这里效果,我们这里用AJAX来实现这个效果.这个实例里结合了MySql.Servlet还有Js,理论性很少,但通过实践来感受理论知识. 一个页面中应用了 AJAX,同时他也能实现MVC框架,可以吗?当然可以的.通过页面调用AJAX,这个页面就是MVC中的V,他用来前台显示与用户交互的内容.用 JavaBean作为M

“全栈2019”Java第五十四章:多态详解

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第五十四章:多态详解 下一章 "全栈2019"Java第五十五章:方法的静态绑定与动态绑定 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"Java学习小组"

“全栈2019”Java第六十四章:接口与静态方法详解

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第六十四章:接口与静态方法详解 下一章 "全栈2019"Java第六十五章:接口与默认方法详解 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"Java学习小组&qu

“全栈2019”Java第一百零四章:匿名内部类与外部成员互访详解

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第一百零四章:匿名内部类与外部成员互访详解 下一章 "全栈2019"Java第一百零五章:匿名内部类覆盖作用域成员详解 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"

Java学习笔记—第四章

第四章  变量和常量 1. Java的访问控制修饰符 使用访问控制修饰符可以限制数据的访问权限.访问控制修饰符有4个等级:private.protected.    public和默认(不指定修饰符). 类型/权限 private protected public 默认 所属类 可访问 可访问 可访问 可访问 同一个包中的其他类(包括子类) 不可访问 可访问 可访问 可访问 不同包中的子类 不可访问 可访问 可访问 不可访问 不同包中的非子类 不可访问 不可访问 可访问 不可访问 2. 变量:变

Java(第十四章)

第十四章 1.Java中的包(package) 2.1 包,对应到磁盘中的文件夹 2.2 新建一个class,默认保存在缺省包中 2.3 声明包的关键字:package package语句,置顶位置 2.4 导入包的关键字:import import 包名.类名(*表示所有); 2.5 作用: 分类存放,解决同名冲突.方便查找和管理 2.6 命名规范 l  Java包名通常由小写字母组成,不能以圆点开头或结尾. l  一个唯一包名的前缀通常是全部小写的ASCII字母,并且是一个顶级域名com.e

Thinking In Java笔记(第四章 控制执行流程)

第四章 控制执行流程 Java中使用了C的所有流程控制语句.在Java中涉及的关键字包括if-else,while,do-while,for,return,break,continue以及选择语句switch.然而Java不支持goto语句(该语句引起了许多的反对意见),但是Java仍然可以类似goto那样跳转. 4.1 True和False 所有的条件语句都利用条件表达式的真假来决定执行的路径.Java中不允许我们将一个数字作为boolean值使用,虽然C和C++中是允许的("非零"

Java编程思想 第四章

第四章 目录: 4.1 true和false 4.2 if-else 4.3 迭代 4.4 Foreach语法 4.5 return 4.6 break和continue 4.7 goto 4.8 switch 4.1 true 和 false 注意Java不允许我们将一个数字作为布尔值使用,这与C和C++ 不同(C/C++中,"真"是非零,而"假"是零).如果将数字作为布尔表达式,Java编译器会直接报错. 4.3.1 do-while和while 二者区别在于,

Java编程思想---第四章 控制执行流程

第四章  控制执行流程 就像有知觉的生物一样,城西必须在执行过程中控制它的世界并作出选择,在Java中,你要使用执行控制语句来作出选择. 4.1 true和false 所有的条件语句都利用条件表达式的真假来决定执行路径.如a==b,它用操作符==来判断a的值是否等于b的值,返回一个true或false. 4.2 if-else if-else语句是控制程序流程的最基本形式,其中else是可选的,所以可以按下面的两种形式来使用: if(Boolean-expression) statement 或