版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、内存分析引用传递,Java中的内存,一般Java在内存分配时会涉及到以下区域: 寄存器:我们在程序中无法控制 栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中 堆:存放用new产生的对象和数组 静态域:存放在对象中用static定义的静态成员 常量池:存放常量,栈与堆,在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。 当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。 堆内存用来存放由new创建的对象和数组。 在堆中分配的内存,
2、由Java虚拟机的自动垃圾回收器来管理。 在堆中产生了一个数组或对象后,还可以在栈中定义一个特殊的变量,让栈中这个变量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量。(引用变量就相当于是 为数组或对象起的一个名称,以后就可以在程序中使用栈中的引用变量来访问堆中的数组或对象。) 数组和对象在没有引用变量指向它的时候,才变为垃圾,不能在被使用,但仍 然占据内存空间不放,在随后的一个不确定的时间被垃圾回收器收走(释放掉)。 实际上,栈中的变量指向堆内存中的变量,这就是Java中的指针!,返回,内存分析1-Person类,public class Person Str
3、ing name;/ 表示人的姓名 int age ;/ 表示人的年龄 public void tell()/ 定义说话的方法 System.out.println(姓名: + name + ,年龄: + age) ; public static void main(String args) Person per1 = null ;/ 声明对象 Person per2 = null ;/ 声明对象 per1 = new Person() ;/ 实例化对象 - per2 = per1 ; Person per3 = new Person() ;/ 实例化对象 - = 张三 ;
4、/ 为名字赋值 per1.age = 30 ;/ 为年龄赋值- per2.age = 100; - per1.tell() ;/ 调用方法 per2.tell() ; per3.tell() ; ,内存分析1-Person类,栈内存,堆内存,Person per1 = null ;/ 声明对象 Person per2 = null ; per1 = new Person() ;/ 实例化对象,per1,name=null age=0,per2,栈内存,堆内存,per1,name=null age=0,per2,per2 = per1 ; per3 = new Person() ;/ 实例化对象
5、,栈内存,堆内存,per1,name=“张三” age=30,per2, = 张三“ per1.age = 30 ;,栈内存,堆内存,per1,name=“张三” age=100,per2,per2.age = 100 ;,name=null age=0,per3,name=null age=0,per3,name=null age=0,per3,内存分析例子2,class Demo int x = 10 ; ; public class TestDemo public static void main(String args) Demo d = new Demo() ; d
6、.x = 22 ; fun(d) ; System.out.println(d.x) ; public static void fun(Demo temp) temp.x = 55 ; ;,内存分析例子2,栈内存,p,堆内存,对象,x=10,Person p = new Person,栈内存,p,堆内存,对象,x=22,p.x=22,栈内存,p,堆内存,对象,x=22,fun(Person temp),temp,栈内存,p,堆内存,对象,x=55,temp.x=55,temp,值传递与引用传递,值传递: 方法调用时,实际参数把它的值传递给对应的形式参数,方法执行中形式参数值的改变不影响实际参
7、数的值。(发生改变的只是实参的备份,方法调用完毕后备份自动消失。) 引用传递: 也称为传地址。在方法执行中,对形式参数的操作实际上就是对实际参数的操作,方法执行中形式参数值的改变将会影响实际参数的值。 方法调用时,实际参数的引用(地址,而不是参数的值)被传递给方法中相对应的形式参数, 值传递-传递基本数据类型参数。 引用传递-引用数据类型作为参数。,举例,public class Test public static void main(String args) Stu stu = new Stu(); System.out.println(stu.getAge(); stu.age = 20
8、; System.out.println(stu.getAge(); int b = 121; stu.fun1(b); System.out.println(b); stu.fun2(stu); System.out.println(stu.getAge(); ,public class Stu public int age=12; public void fun1(int a) a=1000; public void fun2(Stu stu) stu.age=1000; public int getAge() return age; public void setAge(int age) this.age = age; ,引用传递-特殊的String类,public class Demo02 public static void main(String args
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 机电产品检测维修规范
- 某塑料厂成本控制制度
- 习题库-中小企业管理技能与实务(第三版)
- 石油厂管道维护规范
- 化工企业员工培训制度
- 干眼症治疗指导
- 医疗行业就业机会
- 某制药厂供应链管理制度的
- 敬老院消防安全操作手册
- 医药三年职业进阶规划
- 2025年GRE《语文》真题及答案解析
- 风电场道路分包合同
- 模具定期保养维护计划
- 2025-2026学年湖北省武汉市江岸区八年级(下)期中道德与法治试卷(含答案)
- 北京八十中分班测试题
- 2026年北京市中考物理试卷(含解析)
- 国家开放大学《互联网金融概论》形成性考核试题及答案
- 六年级语文阅读理解专项训练100篇含答案
- 校本教材-无人机空气动力学与飞行原理
- 雨课堂学堂在线学堂云《高级护理实践(实务)(南京医科)》单元测试考核答案
- 摄影课程 黑白摄影2
评论
0/150
提交评论