




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2第5章 抽象和封装知识要点面向过程的设计思想(略)抽象封装属性、局部变量/成员属性变量的作用域Java程序执行过程分析方法方法调用方法参数及其传递问题this关键字简单的JavaBean类包 35.2 面向对象的设计思想面向对象的设计思想将事物看成对象,每个对象都包含属性(即特征)和方法(即行为),以一个人为例,他不仅有作为人的特征,还具有作为人的行为。面向对象的编程思想更加接近于现实的事物,它有以下几点好处。(1)使编程更加容易。(2)在软件工程上,面向对象可以使工程更加模块化,实现更低的耦合和更高的内聚。(3)在设计模式上(似乎只有面向对象才涉及设计模式),面向对象可以更好地实现开闭原则
2、,也使代码更易阅读。45.3 抽 象首先来了解面向对象编程思想的第一个特征抽象。抽象主要用来把客观世界中真实存在的事物用编程语言描述出来。这也是理解面向对象编程思想的第一步。抽象涉及到对象和类的概念。55.3 抽 象类是组成java程序的最小单位。类的主要功能:作为模板创建对象。类的定义格式:修饰词 class 类名. /类体类是抽象的概念,而对象对应一个具体的实体一个类可以创建多个对象65.4 封 装封装指将相关的信息封装成一个类,且设定类成员的访问权限,主要是为了提高程序的安全性。Java语言通过以下的修饰词设置成员的访问控制权限:public、private、protected、frie
3、nd等关键字,以适用于不同的情况。类成员访问权限的设置应该根据实际的需要。一般而言,成员变量即属性的访问权限一律为private,即对外界不可见,成员方法一般为public。75.4.1 类Java类的定义语法如下:public class 类名 /定义属性部分属性1的类型 属性1;.属性n的类型 属性n;/定义方法部分方法1;.方法m;85.4 类在Java中,类定义的步骤如下。第1步 定义类名。第2步 编写类的属性。第3步 编写类的方法。95.4.1 类【例5.1】ClassRoom.java。如果用类的思想来描述“教室”,那么就需要定义ClassRoom类,再定义它的属性,如教室名称、教
4、室数目、机器数目等,方法为显示教室的信息。代码如下:参见教材P139Object类具有一个toString()方法,用户创建的每个类都会继承该方法。它把对象的相关信息用String来表示,这个方法对于调试非常有帮助。然而默认的toString()方法往往不能满足需求,需要覆写这个方法。这里就覆写了toString()方法,将ClassRoom对象的相关信息组装为字符串,返回给方法的调用者。105.4.2 Java中对象的创建和使用对象是Java程序的核心,在Java程序中“万事万物皆对象”。类描述了对象的属性和对象的行为。类是对象的模板和图纸。对象是类的一个实例,是一个实实在在的个体。类与对象
5、的关系如图5.11所示。类是对象的模板,决定着对象的属性和方法。由对象可以抽象出类,类可以实例化成对象,就像印钞机的模板决定印刷出来的钱的大小、颜色。115.4.2 Java中对象的创建和使用创建和使用对象的步骤如下。第1步 使用new关键字创建类的一个对象,格式为:类名 对象名 = new 类名();第2步 通过“对象名.属性名”或“对象名.方法名()”来访问对象成员。125.4.2 Java中对象的创建和使用任何类都可以包含main方法。135.5 属 性在定义类时,经常包含属性的定义。下面就来介绍与属性相关的内容。145.5.1 属性的定义在类中定义的属性有常量属性和成员属性之分。常量属
6、性就是用final修饰的属性,它的值只能赋值一次,以后不能再更改了。并且在类中定义的常量属性一般用大写字母命名,例如:/代码AttributeDemo1.javapublic class AttributeDemo1 final String ABS = -8;final double PI = 3.14; /常量属性,圆周率 155.5.1 属性的定义非常量属性就是成员属性,它直接定义在类的主体中,例如:/代码AttributeDemo2.javapublic class AttributeDemo2 private String name;private int age; /成员属性 成员
7、属性的访问控制方式一般都是private165.5.1 属性的定义对于成员属性,在Java中提供了三种初始化方式。(1)使用默认值初始化(2)使用显式值初始化(3)使用构造器初始化175.5.2 变量变量根据它定义的位置,分为成员变量和局部变量。直接定义在类的主体中的变量叫成员变量,定义在方法的主体中的变量叫局部变量。上面介绍的类的属性其实就叫成员变量,它们只是两种不同的称谓而已。Java变量在使用前必须先声明和初始化(赋初值),特别是局部变量,如果没有被显式初始化并赋值,那么它的值是不可预见的,程序中使用这个变量时,就可能会出现异常情况。185.5.2 变量定义局部变量的语法格式为:数据类型
8、 变量名 = 值;例如,下面的代码编译时发生了异常:参见教材P144变量是有作用域的。所谓变量的作用域,是指定变量使用的范围,也就是活动范围。变量作用域与现实生活中的实例可以类比:鱼要在水中游、鸟要在天空中飞,每一个事物都有它的作用范围。在Java编程中,一般通过大括号来表示变量的作用范围。195.5.2 变量变量声明的位置决定变量作用域,变量作用域确定了可以在程序中用变量名来访问该变量的值的区域。Company类的示意如图5.13所示。205.5.2 变量在图5.13中,变量1可以在方法1、方法2中使用,也可以在方法1和方法2的外面使用,只要在类的主体(也就是类的大括号)中都可以使用。但变量
9、2只能在方法1中使用,变量3只能在方法2中使用,超出这样的范围就不能使用了。215.6 方 法在封装一个类时,不仅要定义出该类的属性,更为重要的是封装该类的方法。本节就来详细介绍在类中如何封装方法。225.6.1 方法的定义方法类似于c中的函数,即完成某种功能的一段代码集合。方法的作用有:使程序变得更简短、更清晰,有利于程序维护,可以提高程序开发的效率,提高代码的重用性。235.6.1 方法的定义方法的语法: () throws 方法名要遵守标识符的规范,还要遵循自身的命名规范:通常方法名是一个动词,如果由两个以上单词组成,则第一个单词的首字母应小写,其后单词首字母大写,如addStudent
10、等。245.6.1 方法的定义方法的返回值有以下两种情况。(1)方法没有返回值,返回类型为void。(2)方法有返回值,必须使用关键字return返回该值,返回类型为该返回值的类型,如:return 表达式; /注意,表达式的值必须是确定的值255.6.1 方法的定义下面来了解一下定义方法时经常出现的错误。1. 返回类型不匹配2. main方法不能有返回值3. 方法最多只能有一个返回值265.6.2 方法的分类1. 自定义方法自定义方法是在类中为了解决某个问题而编写的一段功能代码片段。自定义方法必须满足方法的三要素:返回值类型、方法名和行参列表,至于方法体有没有,需要根据情况而定。自定义方法的
11、语法为:public 返回值类型 方法名(行参列表) .275.6.2 方法的分类2. 系统提供的方法Java的JDK中,预定义了很多的类,提供了各种方法,在程序中可以直接使用,通过这些预定一类,可以大大提高编程效率。如常用的:System.out.pringln()方法Scanner类的nextInt()方法这些预定义的使用可以查看api文档,里面有详细的说明。285.6.2 方法的分类演示Scanner类的使用。第1步 通过查阅说明书API,将类引入到用户自己的程序中。例如:import java.util.Scanner;第2步 声明此类型的变量。例如:Scanner input;第3步
12、 通过new关键字对变量进行初始化。例如:input = new Scanner(System.in);第4步 通过查API知道类的方法功能,然后通过“对象名.方法名(参数列表)”的形式来使用。例如:String a = input.next();295.6.3 构造方法构造方法的功能是与new运算符一起创建对象,它会对新生成对象的成员属性进行初始化,构造方法必须满足以下几个条件。(1)方法名必须与类名称完全相匹配。(2)不要声明返回类型。(3)不能被static、final、synchronized、abstract、native修饰,且不能有return语句返回值。创建某类的对象要遵循如下
13、语法:类名 对象名 = new 类名(); 305.6.3 构造方法根据参数不同,构造方法又可以分为以下3类。1. 隐式无参构造方法(默认构造方法)2. 显式无参构造方法3. 显式有参构造方法315.6.3 构造方法隐式无参构造方法(默认构造方法)。在定义类时,如果没有显示为该类定义构造方法,系统会自动为其添加构造方法,325.6.4 方法重载方法重载指的是一个类中可以定义有相同的名字但参数列表(参数的类型、个数、顺序)不同的多个方法。调用时,会根据不同的参数列表来选择对应的方法。这里要说明的是方法的返回类型可以不同。类中定义的普通方法、构造方法都可以重载。335.6.4 方法重载【例5.10
14、】Person3.java。下面的Person3类定义了两个构造方法,构成构造方法重载,其代码如下:参见教材P163注意:对于方法中有相同类型而不同数量的参数情形,罗列多个方法并不是最恰当的设计,如要创建一个计算一组整数平均数值的方法,通常会如下设计:public class AverageDemo public float average(int n1, int n2) return (float)(n1+n2)/2;public float average(int n1, int n2, int n3) return (float)(n1+n2+n3)/3;public float ave
15、rage(int n1, int n2, int n3, int n4) return (float)(n1+n2+n3+n4)/4;345.6.4 方法重载这3个重载的方法有相同的功能,Java SE 5.0或以后的版本提供了一个新功能,称为可变参数,可以简化上述代码,写出更通用的方法:public class AverageDemo public float average(int .nums) int sum = 0;for(int x : nums) sum += x;return (float)(sum/nums.length);新的可变参数可以按照重载方法的方式被调用,length
16、属性为内建特征,用以返回参数的数量。355.6.5 方法的调用方法的调用语法格式是:对象变量名.方法名(实参列表);其中“实参列表”由定义的方法的形式参数决定,形式参数和实际参数两者间一定要匹配。365.6.5 方法的调用方法的调用根据有无参数,分为以下两类。1. 无参方法的调用无参方法是个“黑匣子”,用于完成某个特定的应用程序功能。语法:对象名.方法名();2. 有参方法的调用语法:修饰符1 修饰符2 . 返回值类型 方法名(形式参数列表) 程序代码;return 返回值;375.6.6 方法参数及其传递问题方法参数传递的过程如图5.19所示。385.6.6 方法参数及其传递问题1. 基本数
17、据类型传递2. 引用数据类型传递(1)数组传递(2)对象传递395.6.7 理解main()方法语法及命令行参数main()方法入口是一个数组类型的参数,也可以给main()方法传递参数,通过命令行在运行时接着参数即可。【例5.14】CMDParameter.java。代码如下:参见教材P160编译上面的代码,在运行的过程中输入:java CMDParameter 中 国 人405.6.7 理解main()方法语法及命令行参数当运行上面的命令时,程序会将“中”、“国”、“人”三个参数分别赋值给main方法参数数组元素args0、args1、args2,然后打印输出。输出结果为:参数1:中参数2
18、:国参数3:人args数组中元素的个数就是在命令行中给类传递的参数的个数,每个参数间用空格分开,如果某个参数中含有空格,将这个参数用双引号括起来。参数与args数组的对应关系如图5.20所示。415.7 this关键字每个类的每个非静态方法(没有被static修饰)都会隐含一个this关键字,它指向调用这个方法的对象。当在方法中使用本类的属性时,都会隐含地使用this关键字,当然也可以明确指定。this可以看作是一个变量,它的值就是当前对象的引用。例如:/Person类的构造方法public Person(String name, boolean sex, int age)
19、 = name;this.sex = sex;this.age = age;425.7 this关键字从总体来看,this关键字有以下几种用法。(1)当类中某个非静态方法的参数名与类的某个成员变量名相同时,该成员变量被屏蔽,必须使用this关键字来指定实现对被屏蔽的成员变量的引用。(2)如果某个构造方法的第一条语句具有形式this(.),那么这个构造方法将调用本类中的其他构造方法。(3)如果某个方法需要传入当前对象,则可以将当前的对象作为参数传递给它。435.8 JavaBeanJavaBean满足某种约定的java类,JavaBean在实际开发中很常用。一个完整有效的JavaBean需要符合
20、以下约定:有一个无参的公共的构造方法。有属性,属性最好定义为私有的。有与属性对应的get、set存取方法。445.9 包包的功能与文件目录相似,用来对类进行组织和管理,避免命名冲突。类似于C#中的命名空间。455.9.2 如何创建包在Java中用关键字package来创建包。例如代码School.java:package com.tjitcast.chapter5; /声明包public class School .public void toString() . 465.9.2 如何创建包创建包时需要注意的地方如下:创建包时用package关键字。如果有包声明,那么它一定作为源代码的第一行。
21、包的名称一般为小写,而且要有意义。如果不加package语句,则指定为默认包或无名包。475.9.3 编译并生成包带有包的类的源代码,在编译成字节码时,不能直接用javac.exe编译,需要带上“-d”这个参数来编译。(1)带包编译:javac -d destpath 类名.java(2)带包运行。带有包的类,在运行它时需要指定包名、类名,即通常所说的使用全限定名,格式如下:java 包名.类名485.9.3 编译并生成包包的命名规范有如下几点:包名由小写字母组成,不能以圆点开头或结尾。用户自己设定包名之前最好加上唯一的前缀,通常使用组织倒置的网络域名。如package net.javagroup.mypackage;。用户自己设定的包名部分依不同的机构各自内部的规模不同而不同。包的命名规范如图5.23所示。495.9.4 使用带包的类为了使用不在同一个包中的类,需要在Java程序中使用import关键字导入这个类。包的导入语法如图5.24所示。505.9.4 使用带包的类使
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 步行街个人店铺租赁合同书
- 区商贸城商铺租赁合同
- 健身场地租赁合同
- 农副产品购销合同
- 土地租赁建房合同
- 借款抵押担保合同
- 停车位代理销售合同
- 知识产权专项法律服务合同
- 焦作师范高等专科学校《高尔夫球具维护》2023-2024学年第二学期期末试卷
- 长沙航空职业技术学院《广播电视技术实务》2023-2024学年第二学期期末试卷
- 吉林省吉林市普通中学2024-2025学年高三上学期二模试题 数学
- 北京市东城区2024-2025学年高一上学期期末统一检测历史试卷(含答案)
- 发展新质生产力如何“因地制宜”
- 河北省高等职业院校技能大赛关务实务赛项参考试题及答案
- 《fema失效模式分析》课件
- 联合救治房颤患者的协议书
- 企业自查报告范文
- 沐足店长合同范例
- 母婴护理的职业道德
- 《商务沟通-策略、方法与案例》课件 第二章 口头沟通
- 运灰安全管理制度模版(2篇)
评论
0/150
提交评论