类与对象(完全版)剖析.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * 这个类没有main方法,只能供其他类调用 * * * 如图所示,大致分为3个步骤: 1、最开始,我们的程序是存在于硬盘中的,当启动运行时,程序会被加载(load)到内存中去,这里的内存可以看做我们的内存条; 2、此时,内存中除了存在刚加载的程序的代码,还存在操作系统本身的代码,操作系统会找到程序中的Main方法开始执行程序; 3、第三步,系统在程序执行过程中对内存的管理。在Java中,内存大致会被分为四块——heap(栈)、stack(堆)、data segment(数据段)、code segment(代码段),分别用来存放程序中的局部变量、new出来的对象或数组等、静态变量、程序代码。 这里主要讨论heap(栈)和stack(堆)。 * 实例化了Person类后: ? ? ? ?堆内存:堆内存中分配一块内存用来存放Person实例person中的数据,因为person的name属性为String类型,所以在堆内存中会另外分配一块内存用来存放String类型的“小明”,person中的name中存放的只是一个地址(地址3),这个地址指向存放“小明”的内存块;person中age属性为int类型,所以直接在age的内存单元存放int类型的“15”。 ? ? ? ? 栈内存:因为person为引用类型,所以在栈内存中分配的内存单元person中存放的是一个指向堆内存中person实例的地址(地址1)。如果上面的代码中只是定义了person,而没有new,那么只会在栈内存中分配一个person的内存单元,内才能中的值为空。 * 因为newName类型为String类型,所以newName的实际内容也会存放于堆内存中,栈内存分配的内存单元newName中只是存放指向堆内存中“小红”的地址。 * newAge的类型为int类型,所以直接将值(18)存放在栈内存分配的单元newAge中。 * 到了函数这块,会有一点点复杂,因为SetName(String name)函数有一个类型为引用类型参数name,而且传入的实参为newName,这时newName中存储的值(地址2)会赋值给这个name,所以这时newName和name存储的地址相同(即同时指向“小红”)。同理,当执行了SetName(String name)函数中的this.name=name时,会把栈内存中name中存储的值(地址2)赋值给堆内存中person的name,此时person中的name里存储的也是指向“小红”的地址。 * 之后,person原来的name值“小明”会在某个时刻被java的垃圾回收机制所回收。 * ?方法执行完毕后,栈内存中变量name所占的内存被回收。 * 跟SetName(String name)一样,执行时也会在栈内存中为形参age分配内存单元,只不过SetAge(int age)函数中的形参age为int类型,所以直接在栈内存分配的单元中直接存储实参的值(18)即可。 * 方法执行完毕后,栈内存中变量age所占的内存被回收。 * * 测试局部变量的初始值 public class var1{ void printnumber(){ byte a; int b; double c; char d; boolean e=; System.out.println( 打印byte初始值数据 =+a); System.out.println( 打印int初始值数据 =+b); System.out.println( 打印double初始值数据 =+c); System.out.println( 打印char初始值数据 =+d); System.out.println( 打印boolean数据 =+e); } public static void main(String[] args){ var1 m=new var1(); m.printnumber(); } } 初始化值的区别 全局变量可以不用进行初始化可使用 局部变量必须要先初始化后使用 成员变量和方法的访问格式 1、在类方法中调用本类 this(有的情况可省略) this主要用于解决局部变量与成员同名的问题 ???????????? ?????? ?Person?mate=new?Person(小明,15);?? ???? ???String?newName=小红;?? ????? ?int?newAg

文档评论(0)

美洲行 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档