java语言程序设计第2章.ppt

上传人:max****ui 文档编号:6364737 上传时间:2020-02-24 格式:PPT 页数:123 大小:359.50KB
返回 下载 相关 举报
java语言程序设计第2章.ppt_第1页
第1页 / 共123页
java语言程序设计第2章.ppt_第2页
第2页 / 共123页
java语言程序设计第2章.ppt_第3页
第3页 / 共123页
点击查看更多>>
资源描述
1 第二章类与对象的基本概念 JAVA语言程序设计 2 目录 2 1面向对象的程序设计方法概述2 2类与对象2 3对象初始化和回收2 4应用举例2 5UML简介2 6本章小节 3 2 1面向对象的程序设计方法概述 面向对象的程序设计四大重要特征抽象封装继承多态 4 对象万物皆对象 两大构成要素 属性 数据 行为 方法 类将属性及行为相同或相似的对象抽象为类对象是类的实例 面向对象程序设计方法概述 2 1面向对象的程序设计方法概述 续 5 例 钟表数据 属性 intHour intMinute intSecond 方法 行为 SetTime ShowTime 面向对象程序设计方法概述 6 例 人数据 属性 char name char gender intage intid 方法 行为 生物行为Eat Step 社会行为Work Study 面向对象程序设计方法概述 7 2 2 1类的声明 声明形式 public abstract final class类名称 extends父类名称 implements接口名称列表 成员变量 属性 成员方法 行为 类与对象 8 关键字Class表明其后声明的是一个类 extends如果所声明的类是从某一父类派生而来 那么 父类的名字应写在extends之后implements如果所声明的类要实现某些接口 那么 接口的名字应写在implements之后 2 2 1类的声明 续 类与对象 9 修饰符可以有多个 用来限定类的使用方式public表明此类为公有类abstract指明此类为抽象类final指明此类为终结类类声明体变量成员声明及初始化可以有多个方法声明及方法体可以有多个 2 2 1类的声明 续 类与对象 10 钟表类publicclassClock 成员变量 属性 inthour intminute intsecond 成员方法 行为 publicvoidsetTime intnewH intnewM intnewS hour newH minute newM second news publicvoidshowTime System out println hour minute second 2 2 1类的声明 续 例2 1 类与对象 11 变量和对象变量除了存储基本数据类型的数据 还能存储对象的引用 用来存储对象引用的变量称为引用变量类的对象也称为类的实例 2 2 2对象的声明与引用 类与对象 12 对象的声明格式类名变量名 Clockaclock 声明一对象时并没有开辟内存空间 2 2 2对象的声明与引用 续 类与对象 13 对象的创建生成实例的格式 new 例如 aclock newClock 其作用是 在内存中为此对象分配内存空间对象可以被赋以空值例如 aclock null 2 2 2对象的声明与引用 续 类与对象 14 2 2 3数据成员 成员变量 成员变量分为实例变量和类变量 类与对象 15 声明格式 public protected private static final transient volatile 变量数据类型变量名1 变量初值 变量名2 变量初值 格式说明public protected private为访问控制符static指明这是一个静态成员变量final指明变量的值不能被修改transient指明变量是临时状态volatile指明变量是一个共享变量 2 2 3数据成员 续 类与对象 16 实例变量没有static修饰的变量称为实例变量用来存储对象需要的属性信息 不同对象属性值可能会不同可通过下面的表达式访问对象属性的值 2 2 3数据成员 续 实例变量 类与对象 17 声明一个表示圆的类 保存在文件Circle java中 然后编写测试类 保存在文件ShapeTester java中 并与Circle java放在相同的目录下publicclassCircle intradius publicclassShapeTester publicstaticvoidmain Stringargs Circlex x newCircle System out println x System out println radius x radius 2 2 3数据成员 续 例2 2 类与对象 18 编译后运行结果如下 Circle 26b249radius 0解释 之后的数值为x所指的对象的存储地址x的值及对象的状态如图 2 2 3数据成员 续 例2 2运行结果 类与对象 19 将两个文件合并为ShapeTester java 注意 一个文件中只能有一个public类 该类中可以包含main函数 且文件名与该类名相同 classCircle intradius publicclassShapeTester publicstaticvoidmain Stringargs Circlex x newCircle System out println x System out println radius x radius 20 声明一个表示矩形的类 保存在Rectangle java中 编写测试类 保存在ShapeTester java中 二文件保存在相同的目录下publicclassRectangle doublewidth 10 128 doubleheight 5 734 publicclassShapeTester publicstaticvoidmain Stringargs Circlex Rectangley x newCircle y newRectangle System out println x y 2 2 3数据成员 续 例2 3 类与对象 21 编译后运行结果如下 Circle 82f0dbRectangle 92d342解释Circle及Rectangle类对象的状态如图 2 2 3数据成员 续 例2 3运行结果 类与对象 22 对ShapeTester类进行修改 使两个实例具有不同的实例变量值publicclassShapeTester publicstaticvoidmain Stringargs Circlex Rectangley z x newCircle y newRectangle z newRectangle x radius 50 z width 68 94 z height 47 54 System out println x radius y width z width 2 2 3数据成员 续 例2 3修改 类与对象 23 编译后运行结果如下 5010 12868 94解释Circle及Rectangle类对象的状态如图 2 2 3数据成员 续 修改后运行结果 类与对象 24 地址簿程序一个人的地址通常包括以下信息 姓名 省份 城市 街道 门牌号 邮政编码采用过程化的程序设计方法 使用简单变量存储 则存储两个人地址的代码如下 2 2 3数据成员 续 例2 4 类与对象 25 publicstaticvoidmain Stringargs Stringname1 name2 intgateNumber1 gateNumber2 StringstreetName1 streetName2 Stringcity1 city2 Stringprovince1 province2 StringpostalCode1 postalCode2 name1 ZhangLi gateNumber1 15 streetName1 TsinghuaEastRoad city1 Beijing province1 Beijing postalCode1 100084 name2 LiHong gateNumber2 2 streetName2 BeiNong city2 Beijing province2 Beijing postalCode2 102206 dosomethinginteresting 2 2 3数据成员 续 例2 4 类与对象 26 采用面向对象的程序设计方法 则需要首先声明Address类如下publicclassAddress Stringname intgateNumber StringstreetName Stringcity Stringprovince StringpostalCode 方法成员略 2 2 3数据成员 续 例2 4 类与对象 27 主方法改写如下publicstaticvoidmain Stringargs Addressaddress1 newAddress address2 newAddress address1 name ZhangLi address1 streetNumber 15 address1 streetName TsinghuaEastRoad address1 city Beijing address1 province Beijing address1 postalCode 100084 address2 name LiHong address2 streetNumber 2 address2 streetName BeiNong address2 city Beijing address2 province Beijing address2 postalCode 102206 dosomethinginteresting 2 2 3数据成员 续 例2 4 类与对象 28 类变量也称为静态变量 声明时需加static修饰符不管类的对象有多少 类变量只存在一份 被所有对象共享 引用格式 2 2 3数据成员 续 类变量 类与对象 29 对于一个圆类的所有对象 计算圆的面积时 都需用到 的值 可在Circle类的声明中增加一个类属性PIpublicclassCircle staticdoublePI 3 14159265 intradius 当我们生成Circle类的对象时 在每一个对象中并没有存储PI的值 PI的值存储在类中 2 2 3数据成员 续 例2 5 类与对象 30 对类变量进行测试publicclassClassVariableTester publicstaticvoidmain Stringargs Circlex newCircle System out println x PI System out println Circle PI Circle PI 3 14 System out println x PI System out println Circle PI 测试结果3 141592653 141592653 143 14 2 2 3数据成员 续 例2 5运行结果 类与对象 31 声明一个Point类 有两个私有变量保存点坐标 一个类变量保存已有点的个数publicclassPoint privateintx privateinty publicstaticintpointCount 0 publicPoint intx inty this x x this y y pointCount 2 2 3数据成员 续 Point java 类与对象 32 测试类ex2 4classex2 4 publicstaticvoidmain String args Pointp newPoint 1 1 System out println p pointCount Pointq newPoint 2 2 System out println q pointCount System out println q pointCount Point pointCount System out println Point pointCount 2 2 3数据成员 续 Point类测试 类与对象 33 测试结果12true2 2 2 3数据成员 续 Point类测试结果 类与对象 34 实例变量和类变量都可被声明为finalfinal实例变量必须在每个构造方法结束之前赋初值 以保证使用之前会被初始化final类变量必须在声明的同时初始化 2 2 3数据成员 续 final修饰符 类与对象 35 2 2 4方法成员 成员方法 成员方法定义类的行为一个对象能够做的事情我们能够从一个对象取得的信息可以没有 也可以有多个 一旦在类中声明了方法 它就成为了类声明的一部分分为实例方法和类方法 类与对象 36 声明格式 public protected private static final abstract native synchronized 返回类型方法名 参数列表 throwsexceptionList 方法体 2 2 4方法成员 续 声明格式 类与对象 37 格式说明方法修饰public protected private为存取控制符static指明方法是一个类方法final指明方法是一个终结方法abstract指明方法是一个抽象方法native用来集成java代码和其它语言的代码synchronized用来控制多个并发线程对共享数据的访问 2 2 4方法成员 续 格式说明 类与对象 38 格式说明 续 返回类型方法返回值的类型 可以是任意的Java数据类型当不需要返回值时 返回类型为void参数类型简单数据类型 引用类型 数组 类或接口 可以有多个参数 也可以没有参数 方法声明时的参数称为形式参数方法体方法的实现包括局部变量的声明以及所有合法的Java指令局部变量的作用域只在该方法内部throwsexceptionList用来处理异常 2 2 4方法成员 续 格式说明 类与对象 39 方法调用调用格式 参数列表 参数传递值传递 参数类型为基本数据类型时引用传递 参数类型为对象类型或数组时 2 2 4方法成员 续 方法调用 类与对象 40 实例方法表示特定对象的行为声明时前面不加static修饰符 2 2 4方法成员 续 实例方法 类与对象 41 在Circle类中声明计算周长的方法publicclassCircle staticdoublePI 3 14159265 intradius publicdoublecircumference return2 PI radius 由于radius是实例变量 在程序运行时 Java会自动取对象的属性值 2 2 4方法成员 续 例2 6 类与对象 42 方法调用测试publicclassCircumferenceTester publicstaticvoidmain Stringargs Circlec1 newCircle c1 radius 50 Circlec2 newCircle c2 radius 10 doublecircum1 c1 circumference doublecircum2 c2 circumference System out println Circle1hascircumference circum1 System out println Circle2hascircumference circum2 2 2 4方法成员 续 例2 6 类与对象 43 运行结果Circle1hascircumference314 159265Circle2hascircumference62 831853说明在使用实例方法时 需要将其发送给一个实例对象 也称给对象发送一条消息 radius的值即是接收者对象的值在执行c1 circumference 时 radius的值为c1的radius属性值 在执行c2 circumference 时 radius的值为c2的radius属性值 类与对象 2 2 4方法成员 续 例2 6运行结果 44 在Circle类及Rectangle类中声明计算面积的方法area 2 2 4方法成员 续 例2 7 publicclassCircle staticdoublePI 3 14159265 intradius publicdoublecircumference return2 PI radius publicdoublearea returnPI radius radius publicclassRectangle doublewidth doubleheight publicdoublearea returnwidth height 类与对象 45 声明测试类 对Circle类及Rectangle类的area 方法进行测试publicclassAreaTester publicstaticvoidmain Stringargs Circlec newCircle c radius 50 Rectangler newRectangle r width 20 r height 30 System out println Circlehasarea c area System out println Rectanglehasarea r area 类与对象 2 2 4方法成员 续 例2 7 46 运行结果Circlehasarea7853 981625Rectanglehasarea600 0说明不同的类中可以声明相同方法名的方法使用时 系统会根据接收者对象的类型找到相应类的方法 2 2 4方法成员 续 例2 7运行结果 类与对象 47 带参数的方法举例 在Circle类中增加方法改变圆的半径publicclassCircle staticdoublePI 3 14159265 intradius publicdoublecircumference return2 PI radius publicdoublearea returnPI radius radius publicvoidenlarge intfactor radius radius factor 2 2 4方法成员 续 例2 8 类与对象 48 测试类publicclassEnlargeTester publicstaticvoidmain Stringargs Circlec1 newCircle c1 radius 50 Circlec2 newCircle c2 radius 10 System out println Circle1的周长 c1 circumference System out println Circle2的周长 c2 circumference c2 enlarge 4 System out println Circle2扩大后的周长 c2 circumference 2 2 4方法成员 续 例2 8 类与对象 49 运行结果Circle1的周长 314 159265Circle2的周长 62 831853Circle2扩大后的周长 251 327412 2 2 4方法成员 续 例2 8运行结果 类与对象 50 以对象作为参数的方法举例 在Circle类中增加fitsInside方法判断一个圆是否在一个长方形内 需要以Rectangle类的对象作为参数publicclassCircle staticdoublePI 3 14159265 intradius publicdoublecircumference return2 PI radius publicvoidenlarge intfactor radius radius factor publicbooleanfitsInside Rectangler return 2 radius r width 2 2 4方法成员 续 例2 9 类与对象 51 测试类publicclassInsideTester publicstaticvoidmain Stringargs Circlec1 newCircle c1 radius 8 Circlec2 newCircle c2 radius 15 Rectangler newRectangle r width 20 r height 30 System out println Circle1fitsinsideRectangle c1 fitsInside r System out println Circle2fitsinsideRectangle c2 fitsInside r 2 2 4方法成员 续 例2 9 类与对象 52 运行结果Circle1fitsinsideRectangle trueCircle2fitsinsideRectangle false 2 2 4方法成员 续 例2 9运行结果 类与对象 53 类方法也称为静态方法 表示类中对象的共有行为声明时前面需加static修饰符类方法可以在不建立对象的情况下用类名直接调用 也可用类实例调用 2 2 4方法成员 续 类方法 类与对象 54 将摄氏温度 centigrade 转换成华氏温度 fahrenheit 转换公式为fahrenheit centigrade 9 5 32除了摄氏温度值及公式中需要的常量值 此功能不依赖于具体的类实例的属性值 因此可声明为类方法转换方法centigradeToFahrenheit放在类Converter中publicclassConverter publicstaticintcentigradeToFahrenheit intcent return cent 9 5 32 方法调用Converter centigradeToFahrenheit 40 2 2 4方法成员 续 例2 10 类与对象 55 包是一组类的集合 以src为例 一个包可以包含若干个类文件 还可包含若干个包包的作用将相关的源代码文件组织在一起类名的空间管理 利用包来划分名字空间 便可以避免类名冲突提供包一级的封装及存取权限 2 2 5类的组织 包的概念 类与对象 56 包的声明命名的包 NamedPackages 例如 packageMypackage 程序文件中需要包含所在包的声明 而且必须是第一条语句 默认包 未命名的包 不含有包声明的编译单元是默认包的一部分 2 2 5类的组织 包的概念 续 类与对象 57 引入包为了使用其它包中所提供的类 需要使用import语句引入所需要的类Java编译器为所有程序自动引入包java langimport语句的格式importpackage1 package2 classname 其中package1 package2 表明包的层次 它对应于文件目录classname则指明所要引入的类名如果要引入一个包中的所有类 则可以使用星号 来代替类名 类与对象 2 2 5类的组织 包的概念 续 58 类的访问控制类的访问控制只有public 公共类 及无修饰符 缺省类 两种访问权限符与访问能力之间的关系如表 类与对象 2 2 6类的访问控制 59 类成员的访问控制公有 public 可以被其他任何对象访问 前提是对类成员所在的类有访问权限 保护 protected 只可被同一类及其子类的实例对象访问私有 private 只能被这个类本身访问 在类外不可见默认 default 仅允许同一个包内的访问 又被称为 包 package 访问权限 2 2 6类成员的访问控制 类与对象 60 2 2 6类成员的访问控制 续 类与对象 61 对例2 6中的Circle类声明进行修改 给实例变量加上private修饰符publicclassCircle staticdoublePI 3 14159265 privateintradius publicdoublecircumference return2 PI radius 2 2 6类成员的访问控制 续 例2 11 类与对象 62 再编译CircumferenceTester javapublicclassCircumferenceTester publicstaticvoidmain Stringargs Circlec1 newCircle c1 radius 50 Circlec2 newCircle c2 radius 10 doublecircum1 c1 circumference doublecircum2 c2 circumference System out println Circle1hascircumference circum1 System out println Circle2hascircumference circum2 2 2 6类成员的访问控制 续 例2 11 类与对象 63 编译时会提示出错在编译语句 c1 radius 50 及 c2 radius 10 时会提示存在语法错误 radiushasprivateaccessinCircle 说明由于在Circle类声明中变量radius被声明为private 因此在其它类中不能直接对radius进行存取如果要允许其它类访问radius的值 就需要在Circle类中声明相应的公有方法 通常有两类典型的方法用于访问属性值 get方法及set方法 2 2 6类成员的访问控制 续 例2 11编译 类与对象 64 get方法功能是取得属性变量的值get方法名以 get 开头 后面是实例变量的名字一般具有以下格式 publicget return 对于实例变量radius 声明其get方法如下 publicintgetRadius returnradius 2 2 6类成员的访问控制 续 get方法 类与对象 65 set方法功能是修改属性变量的值set方法名以 set 开头 后面是实例变量的名字一般具有以下格式publicvoidset 声明实例变量radius的set方法如下 publicvoidsetRadius intr radius r 2 2 6类成员的访问控制 续 set方法 类与对象 66 关键字this的使用如果形式参数名与实例变量名相同 则需要在实例变量名之前加this关键字 否则系统会将实例变量当成形式参数 在上面的set方法中 如果形式参数为radius 则需要在成员变量radius之前加上关键字this 代码如下 publicvoidsetRadius intradius this radius radius 2 2 6类成员的访问控制 续 set方法 类与对象 67 2 3对象初始化和回收 对象初始化系统在生成对象时 会为对象分配内存空间 并自动调用构造方法对实例变量进行初始化对象回收对象不再使用时 系统会调用垃圾回收程序将其占用的内存回收 68 2 3 1构造方法 构造方法一种和类同名的特殊方法 用来初始化对象通常被声明为公有的 public 没有返回类型 修饰符void也不能有 没有定义构造方法的类 系统自动提供默认的构造方法 对象初始化和回收 69 系统提供的默认构造方法如果没有声明构造方法 则系统提供一个默认的 该方法将对象中的成员变量赋空值或零 默认的构造方法没有参数 其方法体为空 对象初始化和回收 2 3 1构造方法 续 默认构造方法 70 声明一个银行帐号类及测试代码publicclassBankAccount StringownerName intaccountNumber floatbalance publicclassBankTester publicstaticvoidmain Stringargs BankAccountmyAccount newBankAccount System out println ownerName myAccount ownerName System out println accountNumber myAccount accountNumber System out println balance myAccount balance 2 3 1构造方法 续 例2 12 使用默认构造方法 对象初始化和回收 71 运行结果ownerName nullaccountNumber 0balance 0 0 对象初始化和回收 2 3 1构造方法 续 例2 12运行结果 72 自定义构造方法与方法重载可在生成对象时给构造方法传送初始值 使用希望的值给对象初始化 构造方法可以被重载 构造方法的重载和方法的重载一致一个类中有两个及以上同名的方法 但参数表不同 这种情况就被称为方法重载 对象初始化和回收 2 3 1构造方法 续 自定义构造方法 73 为BankAccount声明一个有三个参数的构造方法publicBankAccount StringinitName intinitAccountNumber floatinitBalance ownerName initName accountNumber initAccountNumber balance initBalance BankAccountmyAccount newBankAccount Lucy 30 2500 0 假设一个新帐号的初始余额可以为0 则可增加一个带有两个参数的构造方法publicBankAccount StringinitName intinitAccountNumber ownerName initName accountNumber initAccountNumber balance 0 0f BankAccountmyAccount newBankAccount LiLi 29 对象初始化和回收 2 3 1构造方法 续 例2 13 74 自定义无参的构造方法在声明构造方法时 好的声明习惯是不声明构造方法如果声明 至少声明一个无参构造方法 对象初始化和回收 2 3 1构造方法 续 自定义无参构造方法 75 构建一个Bush类 有两个有参数的构造方法classBush Bush inti Bush doubled 如果写 newBush 编译器将要告诉你找不到对应的构造方法说明用户在进行类声明时 如果没有声明任何构造方法 系统会赋给此类一个默认 无参 的构造方法 但是 只要用户声明了构造方法 即使没有声明无参的构造方法 系统也不再赋默认的构造方法 2 3 1构造方法 续 Bush java 对象初始化和回收 76 在例2 13基础上再声明一个无参的构造方法publicBankAccount ownerName accountNumber 999999 balance 0 0f 对象初始化和回收 2 3 1构造方法 续 例2 14 77 创建一个拥有两个构造方法的Tree类 一个有参 一个无参 importjava util classTree intheight Tree prt Plantingaseedling height 0 Tree inti prt CreatingnewTreethatis i feettall height i voidinfo prt Treeis height feettall voidinfo Strings prt s Treeis height feettall staticvoidprt Strings System out println s 2 3 1构造方法 续 Tree java 对象初始化和回收 78 测试Tree类publicclassOverloading publicstaticvoidmain String args for inti 0 i 5 i Treet newTree i t info t info overloadedmethod newTree 2 3 1构造方法 续 Overloading java 对象初始化和回收 79 测试结果CreatingnewTreethatis0feettallTreeis0feettalloverloadedmethod Treeis0feettallCreatingnewTreethatis1feettallTreeis1feettalloverloadedmethod Treeis1feettallCreatingnewTreethatis2feettallTreeis2feettalloverloadedmethod Treeis2feettallCreatingnewTreethatis3feettallTreeis3feettalloverloadedmethod Treeis3feettallCreatingnewTreethatis4feettallTreeis4feettalloverloadedmethod Treeis4feettallPlantingaseedling 2 3 1构造方法 续 Overloading测试结果 对象初始化和回收 80 this关键字的使用可以使用this关键字在一个构造方法中调用另外的构造方法通常用参数个数比较少的构造方法调用参数个数最多的构造方法 2 3 1构造方法 续 this关键字的使用 对象初始化和回收 81 使用this关键字 修改BankAccout类中无参数和二参数的构造方法 对象初始化和回收 publicBankAccount this 999999 0 0f publicBankAccount StringinitName intinitAccountNumber this initName initAccountNumber 0 0f publicBankAccount StringinitName intinitAccountNumber floatinitBalance ownerName initName accountNumber initAccountNumber balance initBalance 2 3 1构造方法 续 BankAccount java 82 内存回收技术当一个对象在程序中不再被使用时 就成为一个无用对象当前的代码段不属于对象的作用域把对象的引用赋值为空Java运行时系统通过垃圾收集器周期性地释放无用对象所使用的内存Java运行时系统会在对对象进行自动垃圾回收前 自动调用对象的finalize 方法 2 3 2内存回收技术 对象初始化和回收 83 垃圾收集器自动扫描对象的动态内存区 对不再使用的对象做上标记以进行垃圾回收作为一个线程运行通常在系统空闲时异步地执行当系统的内存用尽或程序中调用System gc 要求进行垃圾收集时 与系统同步运行 2 3 2内存回收技术 续 垃圾收集器 对象初始化和回收 84 finalize 方法在类java lang Object中声明 因此Java中的每一个类都有该方法用于释放系统资源 如关闭打开的文件或socket等声明格式protectedvoidfinalize throwsthrowable如果一个类需要释放除内存以外的资源 则需在类中重写finalize 方法 2 3 2内存回收技术 续 finalize 方法 对象初始化和回收 85 同C和C 的区别C语言中通过free来释放内存C 中则通过delete来释放内存在C和C 中 如果程序员忘记释放内存 则容易造成内存泄漏甚至导致内存耗尽在Java中不会发生内存泄漏情况 但对于其它资源 则有产生泄漏的可能性 2 3 2内存回收技术 续 同C和C 的区别 对象初始化和回收 86 对银行帐户类BankAccount进行一系列修改和测试声明BankAccount类声明toString 方法声明存取款方法使用DecimalFormat类声明类方法生成特殊的实例声明类变量 2 4应用举例 87 包括状态 构造方法 get方法及set方法publicclassBankAccount privateStringownerName privateintaccountNumber privatefloatbalance publicBankAccount this 0 0 publicBankAccount StringinitName intinitAccNum floatinitBal ownerName initName accountNumber initAccNum balance initBal 应用举例 2 4 1声明BankAccount类 88 publicStringgetOwnerName returnownerName publicintgetAccountNumber returnaccountNumber publicfloatgetBalance returnbalance publicvoidsetOwnerName StringnewName ownerName newName publicvoidsetAccountNumber intnewNum accountNumber newNum publicvoidsetBalance floatnewBalance balance newBalance 应用举例 2 4 1声明BankAccount类 续 BankAccount java 89 声明测试类AccountTesterpublicclassAccountTester publicstaticvoidmain Stringargs BankAccountanAccount anAccount newBankAccount ZhangLi 100023 0 anAccount setBalance anAccount getBalance 100 System out println Hereistheaccount anAccount System out println Accountname anAccount getOwnerName System out println Accountnumber anAccount getAccountNumber System out println Balance anAccount getBalance 应用举例 2 4 1声明BankAccount类 AccountTester java 90 测试结果Hereistheaccount BankAccount 372a1aAccountname ZhangLiAccountnumber 100023Balance 100 0 应用举例 2 4 1声明BankAccount类 续 AccountTester测试结果 91 toString 方法将对象的内容转换为字符串Java的所有类都有一个默认的toString 方法 其方法体如下 getClass getName Integer toHexString hashCode 下面的两行代码等价System out println anAccount System out println anAccount toString 如果需要特殊的转换功能 则需要自己重写toString 方法 应用举例 2 4 2声明toString 方法 92 toString 方法的几点说明必须被声明为public返回类型为String方法的名称必须为toString 且没有参数在方法体中不要使用输出方法System out println 2 4 2声明toString 方法 续 几点说明 93 为BankAccount类添加自己的toString 方法publicStringtoString return Account accountNumber withbalance balance 应用举例 2 4 2声明toString 方法 续 修改BankAccount类 94 对BankAccount类进行重新编译并运行测试类BankAccountTester 结果如下Hereistheaccount Account 100023withbalance 100 0Accountname ZhangLiAccountnumber 100023Balance 100 0 应用举例 2 4 2声明toString 方法 续 测试结果 95 给BankAccount类增加存款及取款方法 存款publicfloatdeposit floatanAmount balance anAmount return balance 取款publicfloatwithdraw floatanAmount balance anAmount return anAmount 应用举例 2 4 3声明存取款方法 96 publicclassAccountTester publicstaticvoidmain Stringargs BankAccountanAccount anAccount newBankAccount ZhangLi 100023 0 anAccount setBalance anAccount getBalance 100 System out println anAccount System out println anAccount newBankAccount WangFang 100024 0 System out println anAccount anAccount deposit 225 67f anAccount deposit 300 00f System out println anAccount anAccount withdraw 400 17f System out println anAccount 应用举例 2 4 3声明存取款方法 续 修改AccountTester java 97 测试结果Account 100023withbalance 100 0Account 100024withbalance 0 0Account 100024withbalance 525 67Account 100024withbalance 125 49997 应用举例 2 4 3声明存取款方法 续 测试结果 98 DecimalFormat类在java text包中在toString 方法中使用DecimalFormat类的实例方法format对数据进行格式化修改后的toString 方法如下 应用举例 2 4 4使用DecimalFormat类 publicStringtoString return Account accountNumber withbalance newjava text DecimalFormat 0 00 format balance 99 对BankAccount类重新进行编译 再运行BankTester类 运行结果如下Account 100023withbalance 100 00Account 100024withbalance 0 00Account 100024withbalance 525 67Account 100024withbalance 125 50 应用举例 2 4 4使用DecimalFormat类 续 测试结果 100 声明类方法返回特殊的BankAccount实例 作用是生成特定的几种账号样例Example1 方法 应用举例 2 4 5声明类方法生成特殊的实例 publicstaticBankAccountexample1 BankAccountba newBankAccount ba setOwnerName LiHong ba setAccountNumber 554000 ba deposit 1000 returnba 101 Example2 publicstaticBankAccountexample2 BankAccountba newBankAccount ba setOwnerName ZhaoWei ba setAccountNumber 554001 ba deposit 1000 ba deposit 2000 returnba 应用举例 2 4 5声明类方法生成特殊的实例 续 example2 方法 102 emptyAccountExample publicstaticBankAccountemptyAccountExample BankAccountba newBankAccount ba setOwnerName HeLi ba setAccountNumber 554002 returnba 2 4 5声明类方法生成特殊的实例 续 emptyAccountExample 方法 应用举例 103 修改BankAccount类增加类变量LAST ACCOUNT NUMBER 初始值为0 当生成一个新的BankAccount对象时 其帐号为LAST ACCOUNT NUMBER的值累加1自动产生对象的accountNumber 且不允许直接修改其值修改构造方法 取消帐号参数取消setAccountNumber方法取消setBalance方法 应用举例 2 4 6声明类变量 104 publicclassBankAccount2 privatestaticintLAST ACCOUNT NUMBER 0 privateintaccountNumber privateStringownerName privatefloatbalance publicBankAccount2 this 0 publicBankAccount2 StringinitName this initName 0 publicBankAccount2 StringinitName floatinitBal ownerName initName accountNumber LAST ACCOUNT NUMBER balance initBal 应用举例 2 4 6声明类变量 BankAccount2 java 105 publicstaticBankAccount2example1 BankAccount2ba newBankAccount2 ba setOwnerName LiHong ba deposit 1000 returnba publicstaticBankAccount2example2 BankAccount2ba newBankAccount2 ba setOwnerName ZhaoWei ba deposit 1000 ba deposit 2000 returnba publicstaticBankAccount2emptyAccountExample BankAccount2ba newBankAccount2 ba setOwnerName HeLi returnba 应用举例 2 4 6声明类变量 BankAccount2 java 106 publicintgetAccountNumber returnaccountNumber publicStringgetOwnerName returnownerName publicfloatgetBalance returnbalance publicvoidsetOwnerName StringaName ownerName aName 应用举例 2 4 6声明类变量 BankAccount2 java 107 publicStringtoString return Account newjava text DecimalFormat 000000 format accountNumber withbalance newjava text DecimalFormat 0 00 format balance publicfloatdeposit floatanAmount balance anAmount returnbalance public
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!