类与对象(完全版)精讲

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第二章类与对象类与对象同学们大学毕业了,准备成立一家公司,首先,你们经过讨论,制定了公司的蓝图(公司章程),对公司董事长、总裁……等职位的权利和责任进行了明确,对所需设施设备列好了清单,对公司的运作流程进行了设计。请问到这一步为止,你们的公司是一个实际运作的公司吗?类与对象同学们根据蓝图(公司章程),注册了公司,通过选拔对公司董事长、总裁……等职位进行了任命,各种物资到位,公司业务按运作流程开始运作。请问到这一步为止,你们的公司是一个实际运作的公司吗?类与对象同学们通过公司运营的检验,认为公司的蓝图(公司章程)设计是成功的,值得推广的,所以根据蓝图的范本,又在不同地方注册开设了几家连锁公司请问:1、蓝图和实体公司之间是什么关系2、Mcdonloads保证各连锁店的味道基本一致的秘密是什么类与对象分析:类是对象的抽象,对象是类的实例公司章程炸鸡的各种配料及用量(蓝图)(配方)公司实例操作:按公司章程建立连锁公司、按配方生产出口味一致的炸鸡炸鸡抽象提炼抽象提炼建立实例生产实例JAVA程序中的类与对象Scannerin=newScanner(System.in);//内置Scanner类System.out.print(Pleaseenteranumberindouble);doublenum=in.nextDouble();//执行Scanner类的next方法,接收doule数据IntI=5JAVA程序中的类与对象Scannerin=newScanner(System.inIntI=5JAVA内置的Scanner类实例化命令在堆内存中根据Scanner类的设计要求开辟空间,对属性作初始化,万事俱备类参数一个可以看作数据类型的类建立一个person类,具有两个类属性变量(也叫成员变量):name和age,具有三个操作方法:setName()、setAge()和sayHello()publicclassPerson{privateStringname;privateintage;publicPerson(Stringname,intage){this.name=name;this.age=age;}publicvoidSetName(Stringname){this.name=name;}publicvoidSetAge(intage){this.age=age;}publicvoidSayHello(){System.out.println(我的名字叫+name+,我+age+岁了);}}在程序中使用数据类型的类publicclassMemoryAnalysis{publicstaticvoidmain(String[]args){Personmate=newPerson(小明,15);StringnewName=小红;intnewAge=18;mate.SetName(newName);mate.SetAge(newAge);mate.SayHello();}}作者:胡玉洋基本数据类型与引用数据类型基本数据类型与引用数据类型什么东西可以揣在衣兜里,什么东西需要锁在寝室里而在衣兜里揣一把寝室钥匙。基本数据类型:占用内存较小的,结构较简单的数据引用数据类型:占用内存较大的,结构较复杂的数据揣在衣兜里:小的、随时可能使用的锁在箱子里:大的、不常使用的寝室里的钥匙与存放物品的寝室之间是一种引用关系,有钥匙就能找到物品而寝室只是一个地址(如A栋101),代表物品存放的位置即钥匙指向地址、从地址可以引用物品(对象)。基本数据类型与引用数据类型基本数据类型:占用内存较小的,结构较简单的数据,赋值的同时就把值给变量了引用数据类型:占用内存较大的,结构较复杂的数据,在实例化的同时,会在堆内存中根据类结构开辟一块内存(分一间寝室A栋101),并将该内存的地址(寝室号)给引用变量(钥匙)publicclassMemoryAnalysis{publicstaticvoidmain(String[]args){Personmate=newPerson(小明,15);StringnewName=小红;intnewAge=18;mate.SetName(newName);mate.SetAge(newAge);mate.SayHello();}}Person可看作一种数据类型。Mate是对象名,其内容是一把寝室钥匙,钥匙指向new后分配的(寝室)地址。该地址指向一个内存空间空间(寝室),该空间的布置符合Person的要求:空间能存储1个int数据和String数据,还存有操作这两个数据的方法。并且根据参数传递,将name初始化为小明,age的值初始化为为15。背景知识:程序的执行过程堆内存与栈内存想想我们书桌上东西的摆放情景:本节课用的东西会放在方便用的桌面,占据较大的空间不常用的书或者文个会堆在桌子边上或者书柜内栈就相当于桌面最好用的位置,用来存放当节课要用的东西堆就相当于桌面上堆书的位置或者书柜,用来存放当前不方便放在桌面上的东西。可以想象当我们的程序很大时,需要存的(书)会很多,多得要用图书馆才能装下,那我们就需要把书存在书库,并且需要给书编目(地址),要想找某本书就可以通过书目上标示的地址的指引去找到它。这样的概念是否和引用数据的概念相似?1.Personmate=newPerson(小明,15);StringnewName=小红;intnewAge=18;mate.SetName(newName);mate.SetAge(newAge);mate.SayHello();}}内存分析Personmate=newPerson(小明,15);2.StringnewName=小红;intnewAge=18;mate.SetName(newName);mate.SetAge(newAge);mate.SayHello();}}内存分析Personmate=newPerson(小明,15);StringnewName=小红;3.intnewAge=18;mate.SetName(newName);mate.SetAge(newAge);mate.SayHello();}}内存分析Personmate=newPerson(小明,15);StringnewName=小红;intnewAge=18;4.mate.SetName(newName);mate.SetAge(newAge);mate.SayHello();}}privateStringname;1.publicvoidSetName(Stringname){this.name=name;}内存分析Personmate=newPerson(小明,15);StringnewName=小红;intnewAge=18;4.mate.SetName(newName);mate.SetAge(newAge);mate.SayHello();}}privateStringname;1.publicvoidSetName(Stringname){this.name=name;}内存分析作者:胡玉洋Personmate=newPerson(小明,15);StringnewName=小红;intnewAge=18;4.mate.SetName(newName);mate.SetAge(newAge);mate.SayHello();}}privateStringname;1.publicvoidSetName(Stringname){this.name=name;}内存分析Personmate=newPerson(小明,15);StringnewName=小红;intnewAge=18;mate.SetName(newName);5.mate.SetAge(newAge);mate.SayHello();}}privateintage;2.publicvoidSetAge(intage){this.age=age;}内存分析作者:胡玉洋Personmate=newPerson(小明,15);StringnewName=小红;intnewAge=18;mate.SetName(newName);5.mate.SetAge(newAge);mate.SayHello();}}privateintage;2.publicvoidSetAge(intage){this.age=age;}构造方法实例化的时候用来作初始设置的方法(现实:到银行开卡需要提供一个初始密码,给新生儿取名,初始化游戏角色)特点:1、方法名与类名相同;publicclassPerson{privateStringname;privateintage;publicPerson(Stringname,intage){this.name=name;this.age=age;}}Personmate=newPerson(小明,15);构造方法2、一个类中可以有多个构造方法,他们的方法名相同,但参数必须不同publicclassbuyfood{privateStringfood;publicbuyfood(){this.food=“米饭”;}publicbuyfood(Stringfood){this.food=food;}buyfoodworker1=newbuyfood();buyfoodworker2=newbuyfood(“京酱肉丝”);worker1米饭worker2京酱肉丝基础:变量的分类与作用域按定义的位置:可分为类成员变量(定义在任何方法外)和局部变量(定义在方法中)按入口类型:可分为public(公用)、pravite(本对象中可用)、friendly(默认,可不写,同目录下可用)按存储位置:可分为static(静态)、栈、堆按内容:可分为值和引用成员变量与局部变量成员变量:方法以外的变量局部变量:方法内的变量1、有效范围不一样2、初始值不一样为什么需要有效范围不一样?比如Mcdonloads配方好比一个成员变量列表,对原料的品种、数量、烹制时间等作了要求,任何操作环节中这个配方都是有效的。而在营销宣传方法中用什么样的宣传语来打动当地客户则可以看作局部变量,因为他可能只对本店顾客生效。成员变量的有效范围及初始值publicclassvar{bytea;intb;doublec;chard;booleane;publicstaticvoidmain(String[]args){varm=newvar();System.out.println(Byte初始值数据=+m.a);System.out.println(Int初始值数据=+m.b);System.out.println(Double初始值数据=+m.c);System.out.println(Char初始值数据=+m.d);System.out.println(Boolean数据=+m.e);}}请找编译错误原因publicclassvar1{voidprintnumber(){bytea;intb;doublec;chard;booleane;}publicstaticvoidmain(String[]args){var1m=newvar1();System.out.println(打印byte初始值数据=+m.a);System.out.println(打印int初始值数据=+m.b);System.out.println(打印double初始值数据=+m.c);System.out.println(打印char初始值数据=+m.d);System.out.println(打印boolean数据=+m.e);})将打印语句置于局部变量有效范围publicclassvar1{voidprintnumber(){bytea=1;intb=2;doublec=2;chard='A';booleane=true;System.out.println(打印byte初始值数据

1 / 59
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功