




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第3章面向对象(上)案例3-1 定义学生类一、案例描述1、考核知识点名称:类的定义2、练习目标掌握类定义的方式掌握如何在类中定义成员变量和成员方法3、需求分析在面向对象的思想中最核心就是对象,在程序中创建对象的前提是需要定义一个类。为了让初学者掌握类的定义方式,本案例将设计一个表示学生的类,该类具有表示姓名的属性name和表示年龄的属性age,同时还具有表示说话行为的方法speak(),用于输出学生的姓名和年龄。4、设计思路(实现原理)1)使用class关键字定义一个表示学生类型的类,类名为Student。2)在Student类中定义两个成员变量name和age,分别用来表示姓名和年龄。其中,
2、 name的数据类型为String ,变量age的数据类型为int。3)在Student类中定义一个表示说话行为的speak()方法,用于输出学生的姓名和年龄。、案例实现三、案例总结1、类中可以定义成员变量和成员方法,其中成员变量用于描述对象的特征,也被称为属性。成员属 性用于描述对象的行为。案例3-2同一对象被多个变量引用、案例描述1、考核知识点名称:对象创建与使用2、练习目标掌握如何创建类的对象掌握如何使用两个或者多个变量引用同一个实例对象。3、需求分析在程序中,一个对象可能在多处使用,这样就可能需要有多个变量来引用这个对象。为了让初学者更好地掌握对象的创建和使用,本案例将基于案例3-1,
3、创建三个学生对象,它们的引用变量分别是si、s2和s3,首先分别使用si和s2引用,为name和age赋值,然后调用speak()方法,最后将s2变量赋值给s3, s3也调用speak()方法。4、设计思路(实现原理)1)编写 Example01 类2)在main()方法中,创建 Student类的第一个对象,其引用变量为 s1,使用s1调用name和age 变量分别为它们赋值为“张三”和“19”,然后调用speak()方法。3)创建Student类的第二个对象,其引用变量为s2,使用s2分别为name和age赋值为“李四”和“ 20”,然后调用speak()方法。4)创建Student类的第
4、三个对象,其引用变量为s3,将s2的值赋给s3,然后使用s3调用speak()方法。、案例实现31运行结果如图3-1所示。ExampleOl gwy112StudentTe&tO1 <。 ="C:'Program FilesJava jdkl. 8. O_221binjava. exe". 张三 李四 李四 19 20 20 张三的年龄是:19 李四的年龄是:20 李四的年龄是120进程完成,退出码0生 Run - fi: TODO Terminal 2: MessagesI Event Log口 瑞译成功完成in 3 s 333 ms (2分神之前)
5、13:1 CRLF ; UTF;、图3-1 运行结果三、案例总结1、对象的创建:类名 对象名=new类名();2、对象的引用:对象引用.对象成员案例3-3类的封装、案例描述1、考核知识点名称:类的封装2、练习目标了解为什么要对类进行封装掌握如何实现类的封装3、需求分析在案例3-2中,si对象的年龄是可以随便赋值的,如果将 age的值赋值为-30,显然违背了事 实。为了解决这类问题,我们需要对类进行封装,防止外界对类中的成员变量随意访问。为了让 初学者更好地掌握类的封装,本案例将使用private关键字对成员变量 name和age进行私有化,同时分别提供一个 setName(String n)和
6、setAge(int a)方法用于外界的访问,其中 setAge(int a)中需 要age进行判断。4、设计思路(实现原理)1)编写测试类Example02,将属性age的值设为-30,演示不合理现象。2)对Student类进行修改,将name和age属性使用private修饰,然后定义getName()、setName(String n)、getAge()和setAge(int a)四个对外访问 name和age的方法。3)在setAge(int a)方法中对传入的参数进行检查,如果输入值为负数,则打印出“设置的年龄不合法”,如果不为负数,才将其设置为age属性的值。4)对Example0
7、2类进行修改,在main()方法中创建 Student类的实例对象,通过调用对象的setName(String n)和setAge(int a)方法来设置的 name属性和age属性值,并调用 speak()方法。、案例实现1、定义Example03类,代码如下所示:运行结果如图3-3所示。UJsurulsMIJ ZIJJDA# /一;«,112StudentT«$tO2:(t -"C:Program FilesJavajdkl. 8. 0_221binjava, exe* . 张三的年龄是:-30 李四的年酸是,-20 李四的年龄是;-20生 Runi=&
8、; TODOTerminalQ所有文件都是最新的片£!l之前1 Evtnt Log17:33 CRLF ; UTF-8 : 、 图3-2运行结果从上图可以看出,当将 age的值设置为-30后,程序不会报错,但却违背了现实。2、对Student类进行封装,其代码如下:进程完成,退出码0运行结果如图3-4所示。C:Program FilesJavajdkl, 8. 0_221binjava, exe .张二的年龄是: 30进程完成,退出码。®uo>«bill.<xt生 RunQ 荣译成功完成in 1 s 843 ms (1分钟之前)Q Event Log1
9、6:23 CRLF t UTF-fl :、图3-3运行结果三、案例总结1、所谓的类的封装是指在定义一个类的时候,将类的属性私有化,即使用private关键字来修饰。2、私有属性只能在它所在的类中被访问,不允许外界随意访问,如果外界想要访问私有成员,需要 提供一些使用 public修饰的公有方法,其中包才用于获取属性的getXxx方法和设置属性值的setXxx 方法。案例3-4定义有参的构造方法、案例描述1、考核知识点名称:构造方法的定义2、练习目标掌握有参构造方法的定义方式3、需求分析如果希望在创建对象的时候直接为其属性赋值,可以定义有参的构造方法。有参构造方法指 的是在初始化对象时,接受外部
10、传入的值并赋给对象的属性。为了让初学者掌握有参构造方法的 用法,本案例将演示如何使用有参构造方法完成对象属性的初始化。4、设计思路(实现原理)1)定义一个Student类,该类有一个 age属性,在类中定义一个有参数的构造方法,该参数用 于为age属性赋值。2)编写一个测试类Example04,在main()方法中通过有参构造方法创建一个对象。3)打印该对象age属性的值。、案例实现其代码如下(主函数)其代码如下(有参构造方法)运行结果如图3-4示。Run:. ExampleU4gwyn2StudentTestO4空一T"C:Program FilesJavajdkL 8. 0_22
11、1binjava. exe .;60BZ进程完成,退出码0M 4: Runm皂 &TODQ B T岷rmlndlM Qe M后.田口野营CEntL。嚣图3-4运行结果三、案例总结1、有参构造方法指的是在初始化对象时,接受外部传入的值并赋给对象的属性。2、在调用方法之前必须先新建对象,然后再进行其它操作。案例3-5 构造方法的重载、案例描述1、考核知识点名称:构造方法的重载2、练习目标掌握如何在类中定义重载的构造方法3、需求分析和普通方法一样,构造方法也可以重载。不同的构造方法,可以为不同的属性进行赋值。本案例将通过创建对象的方式演示不同构造方法的使用方式,并根据构造方法的输出结果对构造
12、方法的重载进行学习。4、设计思路(实现原理)1)对Student类进行修改,在类中定义三个重载的构造方法,包括无参的构造方法,接收一个String类型参数的构造方法,接收String类型和int类型两个参数的构造方法。2)编写测试类 Example05 ,在main()方法中,分别使用三个重载的构造方法创建三个Student对象。、案例实现其代码如下(主函数)Student类中的代码如下:运行结果如图3-5。Examp leO 5gwy 112StudentTestO5 xO “C:Program FilesJavajdkL 8. O_221binjava. exe . 我是有参函数的;小明我
13、现在。岁我是String函数的name,我的名字是:张三 他是String和函数中的李四的年龄是;15进程完成,退出码0图3-5行结果三、案例总结1、构造方法的方法名可以相同,但是形参的数量和类型需要不同。2、多个“相似的”构造函数共同构成了方法的重载。案例3-6 this关键字访问构造方法一、案例描述1、考核知识点名称:this关键字的使用2、练习目标掌握如何在构造方法中使用this关键字访问重载的构造方法3、需求分析如果一个类中定义了多个重载的构造方法,为了避免在重载的构造方法中重复书写代码,可以在一个构造方法中使用this关键字调用其它的构造方法。为了让初学者掌握this关键字访问构造方
14、法的用法,本案例将演示如何使用this关键字调用其他的构造方法。4、设计思路(实现原理)1)在Student类中创建多个重载的构造方法,包括无参的构造方法和一个参数的构造方法,以 及两个参数的构造方法。2)在一个参数的构造方法中使用this关键字调用无参构造方法,在两个参数的构造方法中调用一个参数的构造方法。3)编写测试类Example06,在main()方法中,调用两个参数的构造方法创建对象,演示构造方 法的执行顺序。、案例实现代码如下(主函数)代码如下(外部函数)运行结果如图3-6。Excurn pleO&gwyl 12StudentTestO60 “C:Program Files
15、Javajdkl. 8. 0_221binjava, exe" . name张三age>18name李四age>18name上五age>50进程完成,退出码0生 Run S ft: TODO 18 Terminal Ot MessagesQ Event Log口 编降母功完成in 1 s396e5(4分神之前)10:1 CRLF : UTF-8 S、S图3-6行结果三、案例总结1、this关键字可以用来区分当前对象。2、在构造器中使用this关键字来调用对象本身的其它构造器。3、this关键字还有一个重大作用就是返回类的引用。如:在代码中,可以使用 return t
16、his来返回某个 类的引用。此时,这个关键字就代表类的名称。案例3-7垃圾回收机制、案例描述1、考核知识点名称:垃圾回收机制2、练习目标熟悉垃圾回收机制的特点掌握垃圾回收相关的方法3、需求分析垃圾对象会占用一定的内存空间,当垃圾对象积累到一定程度后,Java虚拟机会自动进行垃圾回收。但是,如果希望程序可以及时通知Java虚拟机回收垃圾对象,可以通过System.gc()方法强制启动垃圾回收器回收垃圾。为了让初学者熟悉垃圾回收机制,本案例将演示如何通过 System.gc()方法强制启动垃圾回收器回收垃圾。4、设计思路(实现原理)1)对Student类进行修改,在类中对finalize。方法进行
17、重写。2)编写测试类 Example07,创建若干个 Student对象,然后调用 System.gc()方法通知垃圾回收 期回收垃圾,为了确保可以看到垃圾回收的过程,可以在类中编写一个简单的循环语句,延 长程序执行时间。、案例实现其代码如下(主函数)其代码如下(外部函数)运行结果如图3-7。txample0'7gwy11 ZStudentTestO70 一*C: Program FilesJavajdkl. 8, 0_221binjava. exe* *.我是循环我是循环我是循环我是循环我是循环我是循环我是循环我是循环我是循环我是循环进程完成,退出码0 4: Run := £
18、;: TODOTerminal - 0: Messages编译成功完成in 1 $ 49 ms【2分钟之前)Q Event Log13:17 CRLFi UTF=a i 母图3-7行结果三、案例总结1、java垃圾回收器主要负责发现无用的对象;2、回收被无用对象占用的内存空间,使之再次被程序使用。案例3-8静态变量、案例描述1、考核知识点名称:静态变量2、练习目标了解静态变量的作用掌握静态变量的定义和使用方式3、需求分析当多个对象存储的数据相同时,可以使用静态变量的方式存储。例如,有一个Student类具有name、className属性,请根据该类创建出三个 Student对象,并将这些对象
19、的 className值 都设置为“三年级二班”。4、设计思路(实现原理)1) 定义Student类,并在类中定义 name和className属性。2)编写测试类 Example08 ,在main()方法中创建三个学生对象,并分别为这些对象的name和className属性赋值,然后输出这些对象的name和className值。3) 对Student类进行修改,将 className定义为静态变量。4)修改测试类,在 main()方法中使用 Student.className = 三年级二班”语句为静态变量 className进行赋值,然后输出这些对象的name和className值。为了更
20、好地理解 Student类中静态变量className和Student实例对象的关系,下面通过一个 图例进行演示,如图 3-11所示:StudentclassNameStudent实例对象si s2 s3图3-1静态变量与实例对象的关系、案例实现其代码如下(主函数)其代码如下(外部函数)运行结果如图3-8。ExampleOSgwyl 12§ tudentT 然出84 #C: Program FilesJavajdkl. 8. 0 .221 binjava, exe .张三的隼龄是18李四的年龄是19王五的隼龄是20以上三人都是:三年级二班的学生进程完成,退出吗0S 叁 TODO EB
21、I Termimall M 0: MessagesQ Ewot Log图3-8行结果三、案例总结1、一个类的静态方法只能访问静态变量。2、一个类的静态方法不能够直接调用非静态方法。3、如访问控制权限允许,静态变量和静态方法也可以通过对象来访问,但是不被推荐;4、静态方法中不存在当前对象,因而不能使用this。5、静态方法不能被非静态方法覆盖。案例3-9静态方法中访问类的成员、案例描述1、考核知识点名称:静态方法2、练习目标了解在静态方法中只能访问类的静态成员,而不能访问非静态成员。3、需求分析在程序中经常会调用方法,但静态方法之间、静态方法和非静态方法之间,它们是否能够互 相调用呢?请编写一个
22、测试类,在类中定义若干个静态方法和非静态方法,通过方法之间的相互 调用,演示静态方法和非静态方法的调用情况。4、设计思路(实现原理)1)编写 ExamplelO类,在类中定义两个静态方法staticMethod1()、staticMethod2(),两个非静态方法 nonStaticMethod1()、nonStaticMethod2()2)在ExamplelO类中,针对定义的四个方法进行互相调用,观察调用情况。、案例实现其代码如下(主函数)其代码如下(外部函数)运行结果如图3-9。Example09gwy112StudentTeitO9 xQ - E*C:Program FilesJavaj
23、dkl_ 8. O_221binjava.exe* .一;«一我是静态方法1我是静态方法2我是静态方法2我是动态方法1我是辞态方法1我是静态方法2我是动态方法2我是动态方法1我是静态方法1我是静态方法2进程完成,退出码0,生 Run M §: TODO 喀 Terminal - Q,. MessagesQ Event Log口骗译成功完成"41m便分神之醐26:18 CRLF : UTF-8 :、母图3-9行结果三、案例总结1、一个类的静态方法只能访问静态变量,非静态方法既可以访问静态方法,也可以访问非静态方法。2、一个类的静态方法不能够直接调用非静态方法。4、静
24、态方法中不存在当前对象,因而不能使用this。5、静态方法不能被非静态方法覆盖。案例3-10代码块、案例描述1、考核知识点名称:静态代码块2、练习目标了解不同分类的代码块掌握不同代码块的作用及其执行时机3、需求分析有时候,需要将某一段关联紧密的或者实现了某一功能的代码封装的一个代码块中。为了让 初学者熟悉代码块的应用,本案例将编写一个包含了静态代码块,局部代码块和构造代码块的类,演示不同代码块之间的执行时机。4、设计思路(实现原理)1)编写Examplell类,在类中定义一个静态代码块、一个构造代码块、一个无参的构造方法和 一个成员方法localBlock(),在localBlock()方法中
25、定义一个局部代码块。2)创建Examplell类的两个实例对象,使用 Examplell类型的变量el和e2引用,并通过变量 el和e2调用这两个对象的localBlock()方法。、案例实现其代码如下(主函数)其代码如下(外部函数)运行结果如图3-10ExamplelOgwyl 12StudentTest1O"C:Program FilesJavajdkL 8. 0_221binjava. exe",.我是成员方法;18我是成员方法:18进程完成,退出码0Q Ev#n( LogUTT-8 :、自 4: Kiifi 5= &TOOO H TerminalMS Mo4
26、配Q 墉译成功完成in 1 $ 2S9 ms (1分林之匐20:12 CRLF :图3-10结果三、案例总结1、在java中将代码用括起来的部分叫做代码块,分为局部代码块,构造代码块,静态代码块,同 步代码块。2、局部代码块 :在方法中出现;限定变量生命周期,及早释放,提高内存利用率。3、构造代码块(初始化块厂 在类中方法外出现;多个构造方法中相同的代码存放到一起,每次调 用构造都执行,并且在构造方法前执行4、静态代码块:在类中方法外出现,并加上 static修饰;用于给类进行初始化,在加载的时候就执 行,并且只执行一次。一般用于加载驱动。5、当多线程并发,有多段代码同时执行时,我们希望某一段
27、代码执行的过程中CPU不要切换到其他线程工作.这时就需要同步.如果两段代码是同步的,那么同一时间只能执行一段 ,在一段代码没 执行结束之前,不会执行另外一段代码.o案例3-11静态内部类成员的定义和访问、案例描述1、考核知识点名称:成员内部类一一静态内部类2、练习目标理解在静态内部类中可以定义静态成员和非静态成员掌握访问静态内部类中静态成员和非静态成员的方式3、需求分析静态内部类中可以定义静态成员和非静态成员,这两者的访问方式有所不同。为了让初学者 掌握静态内部类中成员的访问方式,本案例将设计一个静态内部类,并编写测试类演示如何访问 静态内部类中的静态成员和非静态成员。4、设计思路(实现原理)1)定义外部类 Outer,在Outer类中定义一个静态内部类 Inner。2)在Inner中定义两个String类型变量,一个静态变量staticField ,其值为“静态内部类的静态变量”,一个非静态变量 nonStaticField ,其值为“静态内部类的非静态变量”。定义两个方法,一个静态方法 staticMethod()打印“静态内部类的静态方法”,一个非静态方法 nonStaticMethod() 打印“静态内部类的非静态方法”。3)编写Example12类,在类的 main()方法中调用Inne
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 道路环卫保洁合同协议
- 车辆租赁月租合同协议
- 退耕还草协议合同协议
- 遮雨布安装合同协议
- 中级审计师考试知识点归纳试题及答案
- 2024年高级审计师的创新意识与实践应用试题及答案
- 掌握2024年无人机驾驶员执照考试试题及答案
- 提升飞行技能的无人机考试试题及答案
- 初级护师考试临床解读试题及答案
- 2024年民用航空器维修人员执照考试适用知识试题及答案
- 美容美发股东合同和合伙协议
- 2024年湖北省襄阳县事业单位公开招聘医疗卫生岗笔试题带答案
- 2025-2030中国黑小麦行业深度分析及发展趋势与投资战略研究报告
- 《皮肤修复机制》课件
- 回访岗管理制度
- (正式版)SH∕T 3548-2024 石油化工涂料防腐蚀工程施工及验收规范
- 调机品管理规定
- 2022年重庆中考数学试题及答案(A卷)
- 国家最新煤的发热量测定方法
- 超星尔雅学习通《美的历程美学导论》章节测试含答案
- 危重病人床头交接班记录(样本)
评论
0/150
提交评论