版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- T/CSAE 386-2024基于项目的温室气体减排量评估技术规范 动力电池再生利用
- T/UNP 113-2024装配式住宅室内装修技术规范
- T/GDVIA 073-2024盆栽矮生茄果类蔬菜的大苗生产技术规程
- T/CI 592-2024冬小麦夏玉米轮作浅埋滴灌技术应用规程
- T/CACM 1560.12-2024中医养生保健服务(非医疗)技术操作规范 泡洗
- T/CRRA 9917-2024风力发电设备拆解处理企业管理要求
- AI在小学教育中的应用
- 2025~2026学年福建省泉州市晋江市北师大版六年级上册学习评价数学试卷【附答案】
- 塔式起重机安全安装拆卸培训
- Photoshop试题汇编及详细参考答案
- 2025年江西省房屋租赁合同范本
- 酒店星评汇报
- 2025年食品安全管理师职业资格考试题及答案
- GB/T 45767-2025氮化硅陶瓷基片
- 放射科医院感染防控培训
- (四调)武汉市2025届高中毕业生四月调研考试 语文试卷(含答案详解)
- 教师职业发展规划书范文
- 节能验收施工自评报告
- 吊索具安全使用课件
- 原材料进厂检验规程
- CB-Z-94-1968黑色金属磷化技术条件
评论
0/150
提交评论