




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6天面向对象今日任务:理解面向过程和面向对象的概念以及区别;掌握如何在需求中提取对象,会使用Java代码描述提取的对象;了解对象在内存中的存在状态理解类和对象的区别掌握局部变量和成员变量的概念和使用理解匿名对象的概念、使用局限和应用掌握引用传递和值传递面向对象,是整个Java中最最核心、最最基础、最最重要的东西;面向对象的引入需求:计算一个班级的总分;升级需求:计算多个班级总分:问题:相同的功能多次出现,如果每出现一次,就把功能代码再写一遍,就会造成程序的复用性差,程序开发和维护困难;为了解决这个问题,我们学习了函数:结论:通过使用函数,可以提高程序的复用性;继续升级需求:有多个程序,都有相同的功能,需要计算一个数组的和;问题:多个程序中有相同的代码,程序的复用性差;如何解决呢?思考:原来在同一个类中,有相同的代码,可以抽取到函数中,要使用时调用函数解决问题;现在能不能也将重复的内容抽取出来,要使用的时候再调用呢?分析:重复的内容是函数;而函数是定义在类中的一段独立的代码;所以要将函数抽取出来,也只能放到一个类中,不能放到其他地方:问题:一个类中不能直接使用其他类中的函数;怎么解决呢?要想让一个Java程序中可以使用其他类中的函数,必须告诉这个类要到哪里找;办法是:首先使用new关键字创建一个其他类的对象;然后通过这个对象调用它的函数;书写方式:创建一个类的对象,格式是:类名对象名=new类名();//等号左边表示创建一个变量,变量名就是对象名,变量的数据类型就是类名表示的类;右边表示创建一个类的对象;例如:Toolt=newTool();通过一个对象调用它的函数的格式:对象名.方法名(参数);例如:t.getSum(array);在这里,.可以念做“的”;在这个解决方法中,创建了一个类的对象,就是使用了面向对象的思想解决问题;结论:使用面向对象,可以将不同类中共同的东西抽取出来,要使用的时候再调用,可以提高代码的复用性;面向过程和面向对象面向过程什么是过程:就是做一件事情的步骤,就是先做什么,后做什么;生活中的过程:泡面:1、买面;2、烧水;3、撕开包装,放入面饼,加入调料,再倒入开水,等3分钟;4、开吃;5、收拾碗筷;java程序的过程:就是程序执行的先后顺序;先执行哪行代码,再执行哪行代码;什么是面向过程:面向过程,就是关心过程的意思,关心的是一件事情的先后经过;面向过程写程序:首先要分析程序中有哪些功能,然后分别写函数实现这些功能,再按照程序执行的顺序依次调用这些函数;我们前面五天写的程序都是面向过程的;在这个过程中,开发者需要自己实现每一步功能;在这样的程序中,程序的基本组成单位就是函数,面向过程写程序的特点:需求简单的时候:程序结构简单明了,一目了然;需求复杂的时候,程序的功能非常多,按照面向过程的方法写,就会太麻烦;面向对象什么是对象:指的是实际存在的一个事物;生活中的对象:人、电脑、鼠标、被子、鼠标垫、耳机、桌子、凳子、花盆、空气、思想、大地、太阳、月亮、宇宙……Java程序中的对象:指的是通过new关键字再内存中开辟的空间;什么是面向对象:也是一种解决问题的思想:使用这种思想解决问题我们关心的是事情中有哪些参与者;使用这种思想写程序:首先需要明确需求,然后知道实现这个需求需要那些功能;接下来,就要找有没有已经实现了这些功能的类,如果有,就创建这个类的对象,通过对象调用功能;如果没有,就要自己写一个类,再类里面书写功能【面向过程】,然后在创建这个类的对象,通过对象调用功能【面向对象】;在这种思想中,程序的基本单位是包含了各种功能的类;我们开发者更多的时候是在寻找和调用别人已经写好的类,所以开发者是指挥者;以后写程序,都要按照面向对象的思想写程序;面向过程和面向对象举例吃水饺:使用面向过程的方法吃饺子:包饺子:先剁馅;和面;包饺子;煮饺子:烧开水;下饺子;吃饺子:收拾:使用面向对象的方法吃饺子:找一个卖饺子的饭店:大娘水饺店;告诉对方要吃什么馅、多少个;等服务员端上来,开吃;面向过程和面向对象的区别关注点不同:面向过程:关心的是事件中的每一步功能怎么做;面向对象:关心的是事件中的每一步功能有没有什么对象已经实现好了,然后直接拿来使用;效率不同:面向过程:因为自己要参与每一步的实现,所以效率比较慢;面向对象:因为大多数都是调用别人已经实现好的功能,所以效率比较高;开发质量:面向过程:因为是自己一步步实现的,大多数情况会有地方会出问题;面向对象:因为大多数都是调用别人写好的功能,而这些功能一般都经过大量的验证,质量有保证;使用范围不同:面向过程:适合解决需求简单的问题;面向对象:更适合解决复杂的需求;联系:在面向对象中,有没有过程?肯定有;面向对象,是基于面向过程的;对象在需求中的使用和练习使用面向对象的思想解决问题,首先就要找到问题中的对象,简称找对象;需求一:模拟猫抓老鼠;使用伪代码描述下面场景:场景:猫看见老鼠;猫追老鼠;猫抓老鼠;找对象的技巧:名词提炼法:就是先找到需求描述的文字中的名词;练习一:人吃饺子;找对象:名词提炼法: 名词:人 饺子对象:人 饺子描述对象:人{吃(饺子){}}饺子{}模拟场景://创造一个人的对象人小明=new人();//创建饺子对象饺子三鲜水饺=new饺子();//调用对象功能实现场景小明.吃(三鲜水饺);需求二:人开手机;找对象:找名词: 人 手机对象: 人 手机描述对象:人{开(手机){手机.开机();}}手机{开机(){}}模拟场景:人老王=new人();手机诺基亚=new手机();老王.开(诺基亚);练习二:人关灯;找对象:人灯描述对象:人{关(灯){灯.断开电源();}}灯{断开电源(){}}模拟场景:人小红=new人();灯日光灯=new灯();小红.关(日光灯);对象在代码中的体现需求:写程序模拟红色的车在行驶;代码实现:/* 需求:写程序模拟 红色的车在行驶; 名词: 车 对象: 车 伪代码描述: 车{ 颜色; 行驶(){} } 模拟场景: 车法拉利=new车(); 法拉利.颜色=红色; 法拉利.行驶();*///在Java程序中,所有代码,都写在类里面,所以要创建一个类来描述车classCar{ /* 属性:因为属性是可以改变的,所以应该使用变量表示; 事物的属性是属于这个属性本身,还是属于这个事物的某个功能? 因为属性是属于事物本身,不属于某个功能,所以表示属性的变量不能定义在 具体的一个函数中,应该直接写在类里面; 如果一个变量直接写在类里面,这个变量就叫做成员变量; 定义在函数中的变量,叫做局部变量; 事物的属性都应该使用成员变量表示; */ //因为颜色是使用一个字符串表示,所以表示颜色的成员变量的数据类型应该是String Stringcolor; /* 功能:Java中使用函数表示一个具体的功能; 这里使用一个函数描述行驶的功能; */ voidrun(){ System.out.println(color+"的车在行驶"); }}/* 因为程序执行必须从main函数开始,而main函数不属于车的功能, 所以要定义要给测试类,在测试类中书写main函数,以及场景模拟的代码*/classTest{ publicstaticvoidmain(String[]args) { //创建车的对象 Carfalali=newCar(); //给车的颜色赋值为红色 falali.color="红色"; //调用车的行驶功能 falali.run(); }}对象的内存图解画出上面程序的内存图解:类和对象的区别类和对象的关系:对象是根据类创建的;先有类,再有对象;局部变量和成员变量概念成员变量:直接定义在类中的变量就是成员变量;局部变量:定义在局部范围(函数)的变量就是局部变量;同名的局部变量和成员变量的使用问题:下列程序执行的结果是什么?出现这种结果的原因是什么?classDemo{ inta=10; voidfunc(){ inta=100; System.out.println("method:"+a); }}classTest{ publicstaticvoidmain(String[]args) { Demod=newDemo(); d.func(); }}区别从定义的位置上:局部变量:定义在局部范围(函数中)成员变量:直接定义在类中从内存上看:局部变量:保存在栈内存中成员变量:保存在堆内存中从生命周期(指的是从分配空间到回收空间)上看:局部变量:定义它的函数进栈执行到这一行,给它开辟空间;函数出栈,空间被回收成员变量:创建对象的时候开辟空间;对象成为垃圾空间被回收的时候,成员变量的空间被回收;从使用范围上:局部变量:只能在定义它的函数中使用;成员变量:在定义它的类中都可以使用从初始值上看:局部变量:没有默认值,使用前必须先初始化;成员变量:有默认值,使用前可以不必先赋值,也可以先赋值匿名对象什么是匿名对象匿名:没有名字;匿名对象:没有名字的对象;通过前面的例子可以发现,对对象的操作,都是通过对象的引用实现的;实际操作都是通过保存了对象的引用地址的变量进行的;所以对象的名字就可以认为是保存了对象的引用地址的变量;如果创建对象后,不把它的引用赋值给任何变量,就没有变量能够保存它的引用,也就是说,这个对象没有名字,是一个匿名对象;Carcar=newCar();//对象的名字就是carnewCar();//创建了一个对象,但是这个对象没有名字,就是一个匿名对象;匿名对象再创建出来的那一行中是可以使用的;匿名对象的局限问题:下列程序执行的结果是什么?出现这种结果的原因是什么?classDemo{ inta; voidfunc(){ System.out.println("method:"+a); }}classTest{ publicstaticvoidmain(String[]args) { newDemo().a=10;System.out.println(newDemo().a); newDemo().func(); }}匿名对象的应用因为匿名对象只能在创建的时候使用一次,所以一般在只需要使用一次的情况下,就可以使用匿名对象;通过研究内存,发现问题:通过上面的分析可以使用匿名对象传参的方式解决问题:内存原理是:结论:如果一个对象只需要使用一次,就可以定义为匿名对象;好处是使用完就成为垃圾空间,可以被回收,能够节省内存;引用传递和按值传递问题:下列程序执行的结果是什么?出现这种结果的原因是什么?classDemo{ inta;}classTest{ publicstaticvoidupdate(Demod){ d.a+=10; } publicstaticvoidupdate(inta){ a+=10; } publicstaticvoidmain(String[]args) { Demod=newDemo(); d.a=10; update(d); System.out.println(d.a); inta=10; update(a); Sy
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 四川省内江市东兴区2025届初三培优班考前测验(生物试题)试题(1)含解析
- 信阳学院《特效短片创作》2023-2024学年第二学期期末试卷
- 南昌影视传播职业学院《工程设计与分析》2023-2024学年第一学期期末试卷
- 吉林电子信息职业技术学院《传感器原理与应用》2023-2024学年第二学期期末试卷
- 南京审计大学金审学院《绿色建筑与节能技术》2023-2024学年第二学期期末试卷
- 浙江水利水电学院《啤酒工艺学》2023-2024学年第二学期期末试卷
- 内江卫生与健康职业学院《电子技术课程设计》2023-2024学年第二学期期末试卷
- 云南省曲靖市沾益县重点名校2024-2025学年初三综合测试(二)英语试题含答案
- 市场营销学前言
- 机器人焊装基础
- 跨境电商平台下的中国二手车出口模式
- 2024国家电投集团中国电力招聘(22人)笔试参考题库附带答案详解
- 2024年辅导员岗位素质试题及答案
- 运动素质知到课后答案智慧树章节测试答案2025年春浙江大学
- 树立正确的婚恋观讲座课件
- 急性阑尾炎中医护理查房
- (高清版)DB12∕T 934-2020 公路工程资料管理技术规程
- 居间费用分配协议
- 比亚迪入职考试题及答案
- 2025年杭州万向职业技术学院单招职业适应性测试题库及答案1套
- 2024年天津医科大学眼科医院自主招聘笔试真题
评论
0/150
提交评论