




已阅读5页,还剩70页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三章面向对象基础,目标:介绍面向对象编程的基本思想,通过本课的学习,应该掌握如下知识:1)理解什么是类、对象、构造方法,2)对象在内存中的表现形式及如何使用对象等。3)Java的垃圾回收机制及访问修饰符。,本章要点,类和对象的关系面向对象的思想子类实例化的过程对象的创建构造方法变量的初始化顺序对象创建的内存模型垃圾回收机制Java中的关键字this关键字static关键字,主要内容,类和对象的关系,1,构造方法,2,对象创建的内存模型,3,Java中的关键字,4,类和对象的关系,面向对象的思想(ObjectOrientedProgramming,简称OOP)面向对象的基本思想是,从现实世界中客观存在的事物出发来构造软件系统,并在系统的构造中尽可能运用人类的自然思维方式面向对象更加强调运用人类在日常的思维逻辑中经常采用的思维方法与原则面向对象的三个特征封装继承多态,类和对象的关系,面向对象与面向过程,publicclassIceboxstaticvoidputThings(Stringthings)System.out.println(把冰箱门打开);System.out.println(把+things+放进来);System.out.println(把冰箱门关上);,voidOpenIcebox()printf(“把冰箱门打开n);voidPutElephantI()printf(“把大象放冰箱n);voidCloseIcebox()printf(“把冰箱们关上n);intmain()OpenIcebox();PutElephantIn();CloseIcebox();,publicclassMinepublicstaticvoidmain(Stringargs)Icebox.putThings(大象);,面向对象,面向过程,类和对象的关系,类的定义把相似的对象划归成一个类。在软件设计中,类,就是一个模板,它定义了通用于一个特定种类的所有对象的属性(变量)和行为(方法)。,类和对象的关系,类的定义?西游记游戏软件中的游戏人物孙悟空:孙悟空的武器是金箍棒,战斗力五颗星,耐力五颗星唐僧:唐僧没有武器,战斗力为零,耐力五颗星猪八戒:猪八戒的武器是耙子,战斗力四颗星,耐力两颗星沙僧:沙僧的武器是月牙铲,战斗力三颗星,耐力四颗星,类和对象的关系,类的定义修饰符一般为public,也可以没有修饰符。注意类名的命名规范。类名一般大写类的成员:成员变量(属性)成员函数(方法)通过“.”调用属性和方法,访问权限控制符class类名类的成员,类的完全声明形式publicabstract|finalclass类名称extends父类名称implements接口名称列表变量成员声明及初始化;方法声明及方法体;,变量声明格式public|protected|privatestaticfinaltransientvolatile变量数据类型变量名1=变量初值,变量名2=变量初值,;格式说明public、protected、private为访问控制符static指明这是一个静态成员变量final指明变量的值不能被修改transient指明变量是临时状态volatile指明变量是一个共享变量,类的方法声明格式:public|protected|privatestaticfinalabstractnativesynchronized返回类型方法名(参数列表)throwsexceptionList方法体;,格式说明方法修饰public、protected、private为存取控制符static指明方法是一个类方法final指明方法是一个终结方法abstract指明方法是一个抽象方法native用来集成java代码和其它语言的代码synchronized用来控制多个并发线程对共享数据的访问,方法调用给对象发消息意味着调用对象的某个方法从对象中取得信息修改对象的状态或进行某种操作进行计算及取得结果等调用格式.(参数列表)称点操作符“.”前面的为消息的接收者(receiver)参数传递值传递:参数类型为基本数据类型时引用传递:参数类型为对象类型或数组时,访问修饰符,访问修饰符,访问修饰符可访问性,类和对象的关系,类的定义Employee.java,classEmployeeStringname;intage;doublesalary;publicStringshowName()System.out.println(name);returnname;publicintshowAge()System.out.println(age);returnage;publicvoidupdateName(Stringname2)name=name2;publicvoidgetSalary()System.out.println(Thesalaryofthismonthis2000);,属性,方法,类和对象的关系,类的定义练习Person.java定义一个Person类,Person类具有名字、年龄及性别等属性,并具有一个getInfo()方法可以打印出Person类的属性,sayHello()方法和大家说“Helloeverybody!”,classPersonStringname;intage;Stringsex;voidgetInfo()System.out.println(name+age+sex);voidsayHello()System.out.println(Helloeverybody);,类和对象的关系,类的定义练习Point.java定义一个点类Point,包含两个成员变量x、y分别表示x和y的坐标,一个movePoint(intdx,intdy)方法实现点的位置的移动。publicclassPointintx,y;voidmovePoint(intdx,intdy)x=dx;y=dy;,类和对象的关系,类的定义练习MyDate.java定义一个点日期MyDate,包含三个成员变量year、month、day分别表示年、月、日,以及每个属性对应的get和set方法(如,year有getYear()方法用来获得日期的年份,还有setYear(inty)方法用来修改或设置日期的年份),最后还有printDate()方法,调用该方法可以把日期按照“yyyy-mm-dd”的形式输出。,publicclassMyDateprivateintyear;privateintmoth;privateintdate;publicvoidsetyear(intyear)this.year=year;publicintgetyear()returnyear;,publicvoidsetmoth(intmoth)this.moth=moth;publicintgetmoth()returnmoth;publicvoidsetdate(intdate)this.date=date;publicintgetdate()returndate;publicStringtoString()returnyear+年+moth+月+date+日;,类和对象的关系,类和对象的关系类(class)是对某一类事物的描述对象(object)是实际存在的某类事物的个体,也称为实例(instance)类是创建对象的模板,对象是类的实例。,类和对象的关系,对象的创建语法格式示例TestEmployee.java,类名对象名=new构造函数,Employeezhang=newEmployee(),类和对象的关系,对象的创建练习TestPerson.java在TestPerson类里写一个main方法,在main()方法中:创建一个Person类的对象这个对象的名字叫张三,年龄28,性别男在控制台中打印这个实例的信息并调用这个对象的sayHello()方法,向大家问好,类和对象的关系,对象的创建练习TestPoint.java在TestPoint类里写一个main方法,在main()方法中:创建一个Point类的对象这个点的坐标是(3,2)将这个点移动到坐标为(5,6)的位置并把移动后的点的坐标按“(x,y)”形式打印在控制台上,类和对象的关系,对象的创建练习TestDate.java在TestDate类里写一个main方法,在main()方法中:创建一个MyDate类的对象通过setXXX方法将该日期对象的时间设置为“2013年10月8日”在控制台上打印该对象的月份把该日期对象按“2013-10-8”的格式输出,类和对象的关系,匿名对象创建完对象,在调用该对象的方法时,也可以不定义对象的句柄,而直接调用这个对象的方法。这样的对象叫匿名对象使用匿名对象的情况如果对一个对象只需要进行一次方法调用,newPerson().sayHello(),Personp1=newPerson();p1.sayHello();,Contents,类和对象的关系,1,构造方法,2,对象创建的内存模型,3,Java中的关键字,4,构造方法,构造方法(构造函数/构造器,Constructor)具有与类相同的名称不含返回值类型不能在方法中用return语句返回一个值一般访问权限为public在一个类中,具有上述特征的方法就是构造方法。构造方法的作用完成对象的创建,即完成对象的实例化一般使用构造方法来完成对成员变量的初始化示例TestPerson.java,构造方法,默认的构造方法在Java中,每个类都至少要有一个构造方法,如果程序员没有在类里定义构造方法,系统会自动为这个类产生一个默认的构造方法一旦编程者为该类定义了构造方法,系统就不再提供默认的构造方法,classEmployeepublicEmployee(),classEmployee,构造方法,练习下列关于类的定义的选项中,哪些可以通过newThing()方法来创建该类的一个对象_?A.publicclassThingB.publicclassThingpublicThing()C.publicclassThingD.publicclassThingpublicThing(void)publicThing(Strings)E.publicclassThingpublicvoidThing()publicThing(Strings),答案:A、B,构造方法,练习给定下列代码的执行结果是_?publicclassAvoidA()System.out.println(“ClassA”);publicstaticvoidmain(Stringargs)newA();A.ClassAB.在第2行处抛出异常C.编译错误D.在第6行处抛出异常E.代码执行后没有输出,答案:E,构造方法,类和对象的关系练习XiyoujiRole.java构造一个完整的西游记人物类,并定义一个构造方法,通过这个方法可以创建不同的西游记人物,并写一个main函数进行验证。孙悟空:孙悟空的武器是金箍棒,战斗力五颗星,耐力五颗星唐僧:唐僧没有武器,战斗力为零,耐力五颗星猪八戒:猪八戒的武器是耙子,战斗力四颗星,耐力两颗星沙僧:沙僧的武器是月牙铲,战斗力三颗星,耐力四颗星,方法的重载,方法的重载(overload)函数的重载就是在同一个类中允许同时存在一个以上同名的函数方法重载的规则函数名称相同函数的参数必须不同参数个数不同或参数类型不同函数的返回值类型可以相同,也可以不同,方法的重载,方法的重载(overload),方法的重载,练习下列选项中,哪些可以与voidsetAge(intyear,intmonth,intday)方法在同一个类中定义_?A.publicvoidsetAge()B.voidsetAge(intage)C.voidsetAge(inty,intm,intd)D.intsetAge(Dated)E.intsetAge(intyear,intmonth,intday)F.voidsetage(intyear,intmonth,intdat),答案:ABDF,方法的重载,练习Person.java在上一个Person类的基础上,完成以下功能:声明一个有参的构造方法,使得通过调用该构造方法可以对Person类的三个成员变量进行初始化再声明一个无参的构造方法,实现构造方法的重载,方法的重载,练习MethodAdd.java在类MethodAdd中,声明三个方法add,分别计算两个整数的和三个整数的和、两个双精度浮点数(double)数的和,并在该类写一个主程序中调用这个三个函数,并将其结果打印,Contents,类和对象的关系,1,构造方法,2,对象创建的内存模型,3,Java中的关键字,4,对象创建的内存模型,引用类型变量除了8种基本数据类型的变量,其他变量都是引用类型变量类(class)接口(interface)数组,Personp;,Animala;,intc;,对象创建的内存模型,0 x8000,1.74,44,“lisi”,Personp,0 x8000,name,age,height,Personp=newPerson(“lisi”,44,1.74);,引用类型变量的内存模型,对象创建的内存模型,0 x8000,0 x3000,1.74,44,“lisi”,Personp,0 x3000,name,age,height,1.73,33,“zhang”,name,age,height,Personq,0 x8000,引用类型变量的内存模型,Personp=newPerson(“zhang”,33,1.73);Personq=newPerson(“lisi”,44,1.74);,变量的作用域,变量的作用域全局变量类体中声明的成员变量为全局变量全局变量在类的整个生命周期中都有效局部变量方法体中声明的变量,方法中的参数,或代码块中声明的变量,都是局部变量局部变量只在方法调用的过程中有效,方法调用结束后失效,变量的作用域,变量的作用域,classEmployeeStringname;intage;doublesalary;publicStringshowName()Stringhello=“你好”;System.out.println(hello+name);returnname;publicvoidupdateName(Stringname2)name=name2;,全局变量,局部变量,变量的作用域,变量初始化的顺序隐式赋予变量默认值成员变量显式赋予初始值通过构造方法体赋予新值示例PersianCat.java,各类型变量默认初始化值,变量的作用域,练习给定下列代码的执行结果是_?publicclassX(privatestaticinta;publicstaticvoidmain(Stringargs)modify(a);System.out.println(a);publicstaticvoidmodify(inta)a+;A.0B.1C.编译错误D.运行时异常,答案:A,程序执行过程,执行过程中的内存管理,代码,JVM系统代码,装载到内存区,stack,heap,datasegment,codesegment,找到main方法开始执行,基本数据类型变量引用类型变量地址,引用变量,静态变量常量,存放代码,Java代码在系统中的执行过程,补充:参数传值,当方法被调用时,如果方法有参数,参数必须要实例化,即参数变量必须有具体的值。publicclassDate/类声明intyear,month,day;/成员变量,表示年、月、日voidsetDate(inty,intm,intd)/成员方法,设置日期值/无返回值,有4个参数year=y;month=m;day=d;publicstaticvoidmain(Stringargs)Date1aday=newDate1();/创建对象aday.setDate(2013,9,28);/调用类方法,1基本数据类型参数的传值值,这种数据传递方式被称为是值传递,方法接收参数的值,但不能改变这些参数的值。,2引用类型参数的传值地址,引用传值方式:Java的引用类型数据包括对象、数组和接口,当方法中参数是引用类型时,引用数据类型传递给方法的是数据在内存中的地址,方法中对参数变量的操作可以改变原变量的值。,classPeopleStringface;voidsetFace(Strings)face=s;classCvoidf(intx,doubley,Peoplep)x=x+1;y=y+1;p.setFace(笑脸);System.out.println(参数x和y的值分别是:+x+,+y);System.out.println(参数对象p的face是:+p.face);publicclassEp4_8publicstaticvoidmain(Stringargs)intm=100;doublen=100.88;Peoplezhang=newPeople();zhang.setFace(很严肃的样子);Ca=newC();a.f(m,n,zhang);System.out.println(main方法中m和n的值仍然分别是:+m+,+n);System.out.println(main方法中对象zhang的face是:+zhang.face);,zhang.face=很严肃的样子;,改变形参值导致实参值的改变,zhang.face=“笑脸;,参数x和y的值分别是:101,101.88参数对象p的face是:笑脸main方法中m和n的值仍然分别是:100,100.88main方法中对象zhang的face是:笑脸,补充内容对象数组,在Java中不但可以声明由原始数据组成的数组,还可以声明由对象组成的数组;声明对象数组的方式如:,/假设已经定义了一个Student类/*声明由5个Student对象组成的数组*/StudentstdAry=newStudent5;,对象数组=引用数组,对象数组示例,/*对象数组示例,假设已经定义了Student类*/publicstaticvoidmain(Stringargs)/*创建包含有5个Student引用的数组*/StudentstdAry=newStudent5;/*逐一为每个引用创建对象实例*/stdAry0=newStudent(张三,18);stdAry1=newStudent(李四,20);stdAry2=newStudent(王五,24);stdAry4=newStudent(郑六,21);stdAry4=newStudent(田七,19);for(inti=0;istdAry.length;i+)stdAryi.display();,对象数组的存放形式,垃圾回收机制,垃圾回收器(GC,GarbageCollection)Java的一个重要特点句是具有一个垃圾回收器,并且能够自动回收垃圾,这也是Java相对于其他语言有优势的地方对内存的释放和回收的工作是由Java运行系统(JRE)承担的,不用编程者关注在Java程序运行过程中,一个垃圾回收器会不定时地被唤起检查是否有不再被使用的对象,并释放它们所占用的内存空间垃圾回收器的启用不由程序员控制,也无规律可循,垃圾回收机制,垃圾回收机制System.gc()、nullJava里提供了一个System.gc()方法,使用这个方法可以建议垃圾回收器回收垃圾在Java中,可以通过将对象的引用变量设置为null,来暗示垃圾回收器来回收该对象,classEmployeeStringname;intage;doublesalary;publicstaticvoidmain(Stringargs)Employeee=newEmployee();newEmployee();e=null;System.gc();System.out.println(“Theprogramisend”);,垃圾回收机制,后台线程,主线程,Objecto2=newObject();,o2=null;,Objecto1=newObject();,Theheap,检查出对象没有引用指向,调用o2对象的finalize()方法,垃圾回收机制回收分配给该对象的内存,垃圾回收采用Java多线程机制,垃圾回收机制,垃圾回收机制,练习什么时候程序会销毁一个对象x_?A.x.delete()B.x.finalize()C.System.gc()D.设置对象的引用为nullF.只有垃圾回收器才可以销毁一个对象,答案:F,Contents,类和对象的关系,1,构造方法,2,对象创建的内存模型,3,Java中的关键字,4,Java中的关键字,this关键字代表对象自身的引用一个引用指向调用该方法的当前对象通常在类的方法定义中使用用this关键字的情况方法中的变量与成员变量重名在一个构造方法中,调用其它重载的构造方法返回当前对象的引用,成员变量和局部变量,publicclassEmployeeintsideA,sideB,sideC;voidsetSide(intsideA,intsideB,intsideC)this.sideA=sideA;this.sideB=sideB;this.sideC=sideC;,注:如果局部变量的名字
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度公司车辆租赁与车队管理服务合同
- 2025版建筑工程质量保修服务协议
- 2025版广告设计承包合同协议书
- 二零二五年度建筑劳务木工分包合同绿色施工技术与材料范本
- 二零二五年度绿色建筑评价体系设计合同示范文本GF
- 2025版建筑工程造价咨询居间服务合同(甲方范本)
- 二零二五年度家庭财产分割与子女抚养合同范本
- 二零二五年度创新型企业厂房转租合同
- 2025版离婚协议书与子女抚养及财产分割执行协议
- 二零二五年度汽车行业劳务派遣合同终止模板
- 铭复乐IV期临床方案介绍
- 深圳填海工程施工实施方案
- BB/T 0023-2017纸护角
- 建设集团有限公司安全生产管理制度汇编
- 行为习惯养成教育校本教材
- 疫苗运输温度记录表
- 各国钢材-合金牌号对照表
- 医院定岗定编要点
- logopress3培训视频教程整套模具大纲
- DB32-T 2945-2016硬质合金刀具PVD涂层测试方法-(高清现行)
- TB∕T 3526-2018 机车车辆电气设备 接触器
评论
0/150
提交评论