 
         
         
         
         
        
            已阅读5页,还剩59页未读,            继续免费阅读
        
        
                版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
            学习导读本章着重介绍Java编程中类和对象等非常重要的概念 Java程序是由一个个类定义组成的 编写Java程序的过程就是从现实世界中抽象出Java可实现的类并用合适的语句定义它们的过程 这个定义过程包括对类内各种属性和方法的定义 创建类的对象 也包括类间的各种关系和接口的定义 方法是类的主要组成部分 在一个类中 程序的作用体现在方法中 方法是Java语言的基本构件 利用方法可以组成结构良好的程序 本章介绍方法的构成规则和设计 使用方法的基本要点 Java的应用程序接口 API 大量的软件包库 第4章类和对象 第4章类和对象 4 1 面向对象的基本概念4 2类4 3方法4 4访问控制符4 5静态修饰符 静态字段和方法4 6抽象类与抽象方法4 7最终类 最终属性 最终方法与终结器本章小结思考与练习 4 1 面向对象的基本概念 学习要点之二 OOD方法提供了抽象数据类型机制 遵循软件设计的三条重要原则 即抽象 信息隐藏和模块化 双重模块化 数据 对数据的操作 信息 处理 封装 4 1 面向对象的基本概念 4 1 1抽象 1 什么是抽象抽象就是抽出事物的本质特性而暂时不考虑它们的细节 过程抽象和数据抽象是常用的两种主要抽象手段 2 如何用面向对象的方法实现抽象 一个抽象数据类型 AbstractDataType ADT 可以分解成4个部分 如图4 2所示 语法和语义构成抽象数据类型ADT的说明 让使用者了解这个抽象数据类型的特征 属性和方法构成ADT的实现 展示这个ADT是怎样做成的 图4 2抽象数据类型 4 1 2封装 将信息隐蔽的过程称为封装 有两方面的原因促使我们控制对成员的访问 第一个原因是防止程序员接触他们不该接触的东西 通常是内部数据类型的设计思想 若只是为了解决特定的问题 用户只需操作接口即可 毋需明白这些信息 第二个原因是允许库设计人员修改内部结构 不用担心它会对客户程序员造成什么影响 4 1 3对象 可将对象想象对象 object 应是实际问题域中有意义的个体或概念实体 此外 对象应该具有记忆自身状态的能力 同时对象应该以某种方式与系统发生关联 既对象应该与系统中其他有意义的对象进行消息传递 并提供外部服务 4 1 3对象 1 所有东西都是对象 可将对象想象成一种新型变量 它保存着数据 但可要求它对自身进行操作 2 程序是一大堆对象的组合 通过消息传递 各对象知道自己该做些什么 3 每个对象都有自己的存储空间 可容纳其他对象 4 每个对象都有一种类型 根据语法 每个对象都是某个 类 的一个 实例 其中 类 Class 是 类型 Type 的同义词 一个类最重要的特征就是 能将什么消息发给它 5 同一类所有对象都能接收相同的消息 4 2类 类是现实世界某些对象的共同特征 属性和操作 的表示 对象是类的实例 类的属性 就是类的静态属性的简称 指类内包含的各项数据 如变量或其他类的对象 类的服务 则被称为成员函数或方法 4 2类 类的基本定义方法如下 修饰符 class类名 extends父类 implements接口名 类成员变量声明类方法声明 类的修饰符用来说明类的特殊性质 分为三种 访问控制符 public公共类抽象类说明符 abstract最终类说明符 final 接口名跟在implements关键字后面 用来说明当前类中实现了哪个接口定义的功能和方法 接口是Java语言用来实现多重继承的一种特殊机制 我们将在后面详细介绍它的使用方法 1 关于类头 class class关键字 在它的后面 应跟随新数据类型的名称 注意不要把class写成Class 父类名跟在extends关键字后面 用来说明当前类是哪个已经存在类的子类 存在继承关系 继承是类与类之间的一种非常重要的关系 1 关于类头 类的修饰符 public 公共 意味着后续的定义任何人均可使用 private 私有 意味着除您自己 类型的创建者以及那个类型的内部函数成员 其他任何人都不能访问后续的定义信息 protected 受保护的 与 private 相似 只是一个继承的类可访问受保护的成员 但不能访问私有成员 friendly 友好的 若某样东西是 友好的 意味着它只能在这个包装的范围内使用 所以这一访问级别有时也叫作 包装访问 1 关于类头 接口名 接口名跟在implements关键字后面 用来说明当前类中实现了哪个接口定义的功能和方法 接口是Java语言用来实现多重继承的一种特殊机制 我们将在后面详细介绍它的使用方法 2 关于类体类体的定义要包括类的具体内容 包括类的属性与方法 class Java中声明类属性为简单变量的语法如下 修饰符 变量类型变量名 变量初值 变量类型和变量名是声明一个变量必不可少的部分 变量的类型是简单数据类型 如int double等 2 关于类体 类的属性 2 关于类体 类的方法 Java中声明方法的语法如下 修饰符 返回值类型方法名 参数列表 throws例外名1 例外名2 方法体 局部变量声明 语句序列 类的方法 又称为成员函数 用来规定类属性上的操作 实现类的内部功能的机制 同时也是类与外界进行交互的重要窗口 类中定义的方法通常起到两种作用 一是围绕着类的属性进行各种操作 二是与其他的类或对象进行数据交流 消息传递等操作 注意 系统调用方法的最大特点 不需要在程序里书写专门的调用方法的命令 Java语言中定义的方法有两类 一类是需要程序书写专门的调用命令来调用的方法 称为程序调用方法 例如isPfime 另一类是运行过程中系统自动调用的方法 称为系统方法 例如我们前面程序中的action paint init 等 这两类方法的定义和使用原则有很大差异 2 关于类体 类的方法 4 2 2用户程序自定义类 Java程序员把注意力放在创建称为类的用户自定义类型 user definedtype 上 类也称为程序员定义的类型 programmer definedtype 每个类都含有数据和一组操作数据的方法 类中的数据部分称为实例变量 用户定义类型 即类 的实例称为对象 下面是一个简单化的Employee类 在编写今后的职工工资系统时 会用到它 classEmployee 构造函数publicEmployee Stringn doubles intyear intmonth intday name n 职工姓名salary s 职工工资hireDay newGregorianCalendar year month 1 day 出勤数 方法1publicStringgetName returnname 更多的方法 属性的实例privateStringname privatedoublesalary privateDatehireDay 4 2 3创建类及类的实例对象 对象是类的一个实例 类是同种对象的抽象 是创建对象的模板 在程序中创建 个对象将在内存中开辟一块空间 其中包括该对象的属性和方法 我们将分步讲述这个类的实现细节 创建对象使用关键字运算符new 例如下面的语句将创建Employee的对象 例4 1 显示三个员工的相关信息 4 2 3创建类及类的实例对象 在程序中我们构造了一个Employee数组 并给它赋给三个Employee对象 关于数组我们将在下一章讲述 staff 0 newEmployee 张三 75000 1987 12 15 staff 1 newEmployee 李四 50000 1989 10 1 staff 2 newEmployee 王五 40000 1990 3 15 创建对象以某个类为模板 这个类里定义了哪些属性和方法 新建的对象就必然在内存里拥有相应的属性和方法 可见 相对于简单数据类型 类就是用户自己定义的复杂的抽象数据类型 而相对于简单变量 对象就是复杂的既包括数据又包括方法代码的复杂数据单位 4 2 4构造函数1 构造函数的一般概念2 创建自己的构造函数3 构造函数的作用 4 2 4构造函数 构造函数的一般概念 要使用对象 首先必须构造它们 并指定它们的初始状态 然后将方法应用于对象 在Java程序设计语言中 使用构造函数 constructor 来构造新的实例 一个构造函数是一个新的方法 它的作用是构造并初始化对象 构造函数是类的一种特殊方法 它的特殊性主要体现在如下的几个方面 1 构造函数的方法名与类名相同 2 构造函数没有返回类型 3 构造函数的主要作用是完成对类对象的初始化工作 4 构造函数不能由编程人员显式地直接调用 5 在创建一个类的新对象的同时 系统会自动调用该类的构造函数为新对象初始化 4 2 4构造函数 创建自己的构造函数 构造函数的名字和类的名字是相同的 当构造Employee类的对象时 此构造函数被启动 实例字段赋初值 在Java中 定义和初始化是统一的 两者缺一不可 例如 用下面的代码创建Employee类的一个实例时 newEmployee JamesBond 100000 1950 1 1 构造函数的特点有 1 构造函数和类具有相同的名字 2 一个类可以有多个构造函数 3 构造函数可以有0个 1个或多个参数 4 构造函数没有返回值 5 构造函数总是和new运算符一起被调用 4 2 4构造函数 构造函数的作用 1 对象初始化 2 引入更多的灵活度 变量赋值或更复杂的操作 3 Java中可以不定义构造函数Java中可以不定义构造函数 此时系统会自动为该系统生成一个默认的构造函数 这个构造函数的名字与类名相同 它没有任何形式参数 也不完成任何操作 为了避免失去控制 一般将构造函数的声明与创建分开处理 4 3 1方法概述 4 3方法 Java程序是由一个个类定义组成的 类有两个部分 属性和方法 属性描述类是什么 方法描述类做什么 任何对象都有独立的内存存储它的属性 类的所有的对象共享存贮在内存的方法 换言之 方法是类的主要组成部分 在一个类中 程序的作用体现在方法中 方法即是JAVA创建一个有名字的子程序 一个主方法和若干个子方法构成 主方法调用其他方法 其他方法间也可互相调用 同一个方法可被一个或多个方法调用任意次 4 3 1方法概述 Java程序的基本结构如下 引入Java类库 定义用户类1 定义类1的若干变量或对象 定义类1的方法1 定义类1的方法2 定义类1的方法M1 定义用户类2 定义类2的若干变量或对象 定义类2的方法1 定义类2的方法2 定义类2的方法M2 4 3 1方法概述 Java语言的方法实现子任务处理时 有下面几个原则与规律 1 算法中需要细化的步骤 程序中重复的代码以及重载父类方法都可以定义成类的方法 2 界面清晰 3 大小适中 4 方法有两种 一种是标准方法 JavaAPI提供了丰富的类和方法 这些方法提供了程序员所需的许多功能 另一种是用户自定义的方法 以解决用户专门需要 5 Java应用程序中 程序的执行从main类开始 调用其他方法后又回到main类 在main类中结束整个程序的运行 4 3 2定义方法1 声明方法头2 声明方法体 Java中声明方法的语法如下 修饰符 返回值类型方法名 参数列表 throws例外名1 例外名2 方法体 局部变量声明 语句序列 类的方法 又称为成员函数 用来规定类属性上的操作 实现类的内部功能的机制 同时也是类与外界进行交互的重要窗口 4 3 2定义方法 声明方法头1 声明方法头方法头一般由方法名 参数列表 返回类型 方法修饰符和方法抛出的例外五部分组成 1 方法名可以是任何有效的标识符 命名规则与标识符命名规则相同 2 类型说明符用来指定方法返回值的类型 方法最多只能返回一个值 3 参数列表是方法的输入接口 它列出了一系列形式参数的类型和名称 在方法参数表的右括号后加一个分号是语法错误 参数表以逗号为分隔符 其中包含了方法被调用时传递给方法的参数说明 对于方法定义中的每一个参数 方法调用时必须有一个参量与之对应 而且该参量的类型必须与对应参数类型相一致 4 3 2定义方法 声明方法体 方法头定义了方法的性质 方法体则定义了方法的具体内容 方法体通常起到两种作用 一是围绕类的属性进行各种操作 二是与其他的类与对象进行数据交流 消息传递等操作 在一个方法中定义另一个方法将产生语法错误 1 最好避免局部变量 屏蔽 实例变量 在一个类中不使用同名标识符就可以做到这一点 方法调用中参数用来传递数值 传递引用 同时方法还可以嵌套 递归调用 2 方法体中如果指定了非void的返回值类型 方法中就必须包含一条return语句保证任何情况下都有返回数值 return语句后面不能跟任何表达式 4 3 2定义方法 声明方法体 例如下面的语句为部门类Department定义了若干方法 ClassDepartment intm DeptNo 部门编号Stringm DeptName 部门名称intm DeptTotalEmp 部门雇员数ManagerEmployeem DeptMgr 部门主管intgetDeptNo 获取当前对象的部门号 return DeptNo 返回这个对象的部门号 4 3 3方法的调用1 系统调用方法2 程序调用方法 Java语言中调用方法有两类 一类是需要程序书写专门的调用命令来调用的方法 称为程序调用方法 例如isPfime 另一类是运行过程中系统自动调用的方法 称为系统方法 例如我们前面程序中的action paint init 等 这两类方法的定义和使用原则有很大差异 注意 系统调用方法的最大特点 不需要在程序里书写专门的调用方法的命令 4 3 3方法的调用 在类中调用类自身的方法 可以直接使用这个方法的名称 调用其他对象或类的方法 则需要使用该对象或类为前缀 例如在isSameDept 方法中 语句if getDeptNo d getDeptNo 中通过getDeptNo 调用当前对象自身的方法并获得当前对象的部门号 通过d getDeptNo 调用形式参数d的方法获得d的部门编号 这里的形式参数d也是一个Depamnent类的对象 4 3 3方法的调用 实例 booleansetDeptNo intNewNo 把当前部门号重新设置称参数值 if NewNo 0 若给出的新部门号合法 m DeptNo NewNo 修改类属性m DeptNoreturntrue 返回true 声明部门编号修改成功 elsereturnfalse 若形式参数给出新部门号非法 返回false 4 3 4JavaAPI中的方法1 Math类的方法2 Math方法的调用实例 在Java中 JavaAPI ApplicationProgramInterface 也称为Java类库 提供了丰富的类和方法 可以执行常见的算术运算 字符串操作 字符操作 输入输出 错误检查等操作 4 3 4JavaAPI中的方法 Math类的方法 表4 1Math类常用的方法 4 3 4JavaAPI中的方法 Math方法的调用实例 表4 1Math类常用的方法 调用方法的一般格式是先写方法名 然后是左括号 接着是参数 argument 或由逗号分隔的参数表 最后是右括号 例如 要计算并且打印出900的平方根 调用方法的语句格式 System out prtntln Math sqrt 900 注意 所有Math类方法的调用必须采用方法名前冠以类名Math和点 运算符的形式 例4 2 掷一个六面骰子6000次的程序 4 4访问控制符 Java推出了 访问控制修饰符 的概念 允许库创建者声明哪些东西是客户程序员可以使用的 哪些是不可使用的 这种访问控制的级别在 最大访问 和 最小访问 的范围之间 分别包括 public defaut 无关键字 protected以及private 下面的列表说明访问控制修饰符含义 4 4访问控制符4 4 1公共访问控制符public Java中类的访问控制符只有一个 public 即公共的 一个类被声明为公共类 表明它可以被所有的其他类所访问和引用 这里的访问和引用是指这个类作为整体是可见和可使用的 程序的其他部分可以创建这个类的对象 访问这个类内部可见的成员变量和调用它的可见的方法 一个类作为整体对程序的其他部分可见 并不能代表类内的所有属性和方法也同时对程序的其他部分可见 前者只是后者的必要条件 类的属性和方法能否为所有其他类所访问 还要看这些属性和方法自己的访问控制符 实例字段应用public关键字 这是一种非常糟糕的做法 破坏封装 4 4 2缺省访问控制符 假如一个类没有访问控制符 说明它具有缺省的访问控制特性 这种缺省的访问控制权规定该类只能被同一个包中的类访问和引用 而不可以被其他包中的类使用 这种访问特性称为包访问性 通过声明类的访问控制符可以使整个程序结构清晰 严谨 减少可能产生类间干扰和错误 4 4 3私有访问控制符private用private修饰的属性或方法只能被该类自身所访问和修改 而不能被任何其他类 包括该类的子类 来获取和引用 1 对私有数据访问的方法例如有三个实例字段 它们含有在Employee类的实例内部被操作的数据 privatestringname privatedoublesalary privateDatehireDay private 私有的 关键字用来确保可以访问这些实例字段的只能是Employee类本身的方法 4 4 3私有访问控制符private2 私有方法 在实现类时 我们使所有的数据字段都是私有的 因为公开的数据是危险的 对于方法又是什么情况呢 虽然大多数方法是公开的 但是私有方法也经常使用 这些方法只能被同一个分离的方法 总起来说 在下面的情况下可以选择私有方法 1 与类的使用者无关的那些方法 2 如果类的实现改变了 不容易维护的那些方法 4 4 4保护访问控制符protected用protected修饰的成员变量可以被三种类所引用 该类自身 与它在同一个包中的其他类 在其他包中的该类的子类 使用protected修饰符的主要作用是允许其他包中的它的子类来访问父类的特定属性 protected关键字为我们引入了一种名为 继承 的概念 它以现有的类为基础 并在其中加入新的成员 同时不会对现有的类产生影响 我们将这种现有的类称为 基础类 或者 基本类 BaseClass 亦可改变那个类现有成员的行为 对于从一个现有类的继承 我们说自己的新类 扩展 extends 了那个现有的类 4 4 5私有保护访问控制符privateprotected private和protected按顺序连用构成一个完整的访问控制符 私有保护访问控制符 用pnvateprotected修饰的成员变量可以被两种类访问和引用 一种是该类本身 一种是该类的所有子类 不论这些子类是与该类在同一个包里 还是处于其他的包中 相对于protected privateprotected修饰符把同一包内的非子类排除在可访问的范围之外 使得成员变量更专有于具有明确继承关系的类 而不是松散地组合在一起的包 图4 3程序中的访问控制区域 4 5静态修饰符 静态字段和方法 4 5 1静态修饰符 2 另一种情形是我们需要一个特殊的方法 它没有与这个类的任何对象关联 也就是说 即使没有创建对象 也需要一个能调用的方法 static一项重要的用途就是帮助我们在不必创建对象的前提下调用那个方法 4 5静态修饰符 静态字段和方法 4 5 1静态修饰符 static称为静态修饰符 它可以修饰类中的属性和方法 使用static 静态 关键字 可满足两方面的要求 1 一种情形是只想用一个存储区域来保存一个特定的数据 无论要创建多少个对象 甚至根本不创建对象 被static修饰的属性称为静态属性 这类属性一个最本质的特点是 它们是类的属性 而不属于任何一个类的具体对象 换句话说 对于该类的任何一个具体对象而言 静态属性是一个公共的存储单元 任何一个类的对象访问它时 取到的都是相同的数值 同样任何一个类的对象去修改它时 也都是在对同一个内存单元做操作 4 5 2静态字段如果把一个字段定义为static 静态的 那么在一个类中只能有一个这类字段 4 5 3静态常量静态变量是很少见的 然而 静态常量却很普遍 例如 Math类中定义了一个静态常量 publicclassMath publicstaticfinaldoublePI 3 1 49323846 4 5 4静态方法4 5 5main方法 4 5 4静态方法声明一个方法为static至少有三重含义 1 使用这个方法时 应该使用类名做前缀 而不是某一个具体的对象名 2 static的方法是属于某个对象的方法 在这个对象创建时对象的方法在内存中拥有自己专用的代码段 而static的方法是属于整个类的 它在内存中的代码段将随着类的定义而分配和装载 不被任何一个对象专有 3 由于static方法是属于整个类的 所以它不能操纵和处理属于某个对象的成员变量 而只能处理属于整个类的成员变量 4 5 5main方法 main方法并不对任何对象施加操作 实际上 当程序开始执行时 还不存在任何对象 静态方法被执行 并构造程序所需的对象 提示每个类都可以有一个main方法 这是对类进行单元测试的一个很方便技巧 4 6抽象类与抽象方法 4 6 1抽象类当一个类被声明为abstract时 这个类被称为是抽象类 所谓抽象类就是没有具体实例对象的类 针对这个问题 Java专门提供了一种机制 名为 抽象方法 它属于一种不完整的方法 只含有一个声明 没有方法主体 下面是抽象方法声明时采用的语法 abstractvoidX 人类就是一个典型的抽象类 我们知道 类是对象的集合 对象是类的实例化 而人类这个类却不存在一个仅属于它的具体对象 abstract是抽象修饰符 可以用来修饰类或方法 4 6 2抽象方法作为类方法修饰符 abstract则声明了一种仅有方法头 而没有具体的方法体和操作实现的抽象方法 可见 abstract方法只有方法头的声明 而用一个分号来代替方法体的定义 至于方法体的具体实现 那是由当前类的不同子类在它们各自的类定义中完成的 需要特别注意的是 所有的抽象方法 都必须存在于抽象类之中 除了抽象方法 抽象类也可以有具体的数据和方法 例如 Person类存储人的名字并且用一个具体的方法来返回它 在Java编程语言中抽象方法是非常重要的概念 在接口里你会大量的用到它 4 7最终类 最终属性 最终方法与终结器 final是最终修饰符 它可以修饰类 属性和方法 另外终结器的关键字与final很相近 一并介绍 4 7 1最终类如果一个类被声明为final 意味着它不能再派生出新的子类 不能作为父类被继承 因此一个类不能既被声明为abstract的 又被声明为final的 被定义成final的类 通常是一些有特殊作用的 用来完成标准功能的类 将一个类定义为final则可以将它的内容 属性和功能固定下来 与它的类名形成稳定的映射关系 从而保证引用这个类时所实现的功能是准确无误的 4 7 2最终属性无论static还是final字段 都只能存储一个数据 而且不得改变 许多程序设计语言都有自己的办法告诉编译器某个数据是 常数 常数主要应用于下述两个方面 1 编译期常数 它永远不会改变 2 在运行期初始化的一个值 我们不希望它发生变化 可以把一个实例字段定义为final 不能改变的 在对象被构造时 这种字段必须被初始化 即 必须保证在每一个构造函数结束之前其值已被设定 以后字段的值不能改变 4 7 3最终方法之所以要使用final方法 可能是出于对两方面理由的考虑 第一个是为方法 上锁 防止任何继承类改变它的本来含义 设计程序时 若希望一个方法的行为在继承期间保持不变 而且不可被覆盖或改写 就可以采取这种做法 采用final方法的第二个理由是程序        
    温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年企业培训师职业资格考试《培训设计与实施》备考题库及答案解析
- 转型财务bp面试题目及答案
- 2025年渠道销售职业资格考试《销售技巧培训》备考题库及答案解析
- 吊装培训试题及答案
- 入党积极分子发展对象考试考前冲刺测试卷含答案详解(典型题)
- 2025年人力资源管理师《组织行为学基础知识(一)》备考题库及答案解析
- 炉外精炼工安全操作水平考核试卷含答案
- 岗前培训考试写作题及答案解析
- 2025年初级养老护理考试题库及答案解析
- 自学期货从业资格考试及答案解析
- 融资租赁公司风险控制管理方案
- 2025年注册计量师(一级)计量案例分析模拟试题及答案测量不确定度深度解析
- 税务局国考行测题库及答案详解(各地真题)
- GA 1804-2022危险化学品生产企业反恐怖防范要求
- 小学课外阅读书籍《王子与贫儿》PPT
- 三年级上册道德与法治说课教案-第一单元第1课《学习伴我成长》第二课时
- 公路勘测地形测绘内容与取舍要点有哪些
- WB/T 1066-2017货架安装及验收技术条件
- GB/T 16930.2-2021盲杖第2部分:性能要求和试验方法
- GB/T 14336-1993合成短纤维长度试验方法
- 微生物的分类与鉴定课件
 
            
评论
0/150
提交评论