内存
一.
1.栈
又称"堆栈",是一个只有一个出入口的容器,存储的数据从该口进去,先进去的数据吼出来,后进去的数据先进来,我们称为"FILO(first input last output)"结构(先进后出)
存放局部变量
2.堆
是一个没有管理者的容量很大的容器,可以知道该容器什么时候会满
存放new出的内容:全局变量和方法代码
3.常量区
存放常量
4.静态区域
存放static修饰的内容
二.
1.堆和堆栈
java程序在运行的时候依靠jvm在系统内存中划出一片很大的区域600m~1000,该内存被当前程序中所有的线程共享,称为java的堆内存
在方法被调用的时候,此时针对每一个方法,jvm生成一个栈,又被称为方法栈.在方法调用结束的时候(方法调用结束的标志是作出返回值或者运行的方法体的最后一行),方法栈被销毁,方法栈称为java的栈内存
2.数据的存储
- 基本数据类型
- 引用数据类型
区分数据类型的方式:
存放该数据的变量是否允许.操作,允许的都是引用数据类型
基本数据类型:
存放在栈中,针对int a = 12;而言int a称为引用,12称为值,基本数据类型的引用和值都在栈里
引用数据类型:
int[] arr = {1,2,3};引用部分int[] arr存放在栈里,{1,2,3}存放在堆里,把堆内存中真实的数据部分所占据的空间的第一个位置在jvm里的编号存放在int[] arr里面,该编号是一个十进制的数字,把这个数字称为hashcode(哈希值)
注意:java中没有地址的概念,只有jvm编号—>hashcode
两种数据类型修改值的情况:
场景:A方法中定义数据,调用B方法吧A方法中定义的数据作为该方法的参数对该数据进行修改
现象:
基本数据类型,B方法中值的修改无效;
引用数据类型,B方法中值的修改有效
结论:(可以辅助记忆,不是很准确)
- 基本数据类型,作为参数的时候传递的不是数据本身,而是数据的值,称为值传递
- 引用数据类型,作为参数的时候传递的是数据本身修改有效,称为引用传递
3.变量的作用域
全局变量:
类的属性称为全局变量,该变量和所有的方法平级,可以被所有的方法共享,且无需作为方法的参数传入.全局变量可以设置初始值,但一般不设置
局部变量:
方法内部定义的变量以及方法参数列表中的参数称为方法的局部变量,专属于该方法,可以通过传参的方式传递给其他方法使用------值传递和引用传递
在方法内部存在一个和全局变量重名的局部变量,此时全局变量会临时失效,在该方法内部变量使用的是局部变量的值
4.static(静态域)
- ①本质:静态成员属于类,而不属于对象,是公共的
- ②作用: Java的JVM在运行程序时,检测程序中所有使用static修饰的成员,把static修饰的内容直接接在到内存的静态区域中。
- ③访问方式:
类名.成员
,(即直接用类名访问,不需要创建对象) - ④静态成员的生命周期:
当程序运行时,在内存的静态区域中存在
当程序关闭后,静态成员在内存的静态区域中销毁。