面向对象java语言程序设计课程第五章.ppt

上传人:sh****n 文档编号:7451411 上传时间:2020-03-21 格式:PPT 页数:66 大小:429.50KB
返回 下载 相关 举报
面向对象java语言程序设计课程第五章.ppt_第1页
第1页 / 共66页
面向对象java语言程序设计课程第五章.ppt_第2页
第2页 / 共66页
面向对象java语言程序设计课程第五章.ppt_第3页
第3页 / 共66页
点击查看更多>>
资源描述
面向对象JAVA语言程序设计 信息科学与技术学院网络工程系周文峰 2 第五章常用系统类 主要任务 介绍Java常用的系统类 包括字符串类 输入输出流类 JavaApplet类 数学函数类 日期类 随机数类以及向量类等 3 主要内容 字符串类String类StringBuffer类和StringBuilder类 4 5 1字符串类 字符与字符串的区别字符是指用单引号括起来单个字符 如 a b A 等 这里的字符不是指占1个字节的ASCII字符 而是指占2个字节的Unicode字符 因为Unicode被设计用来处理现在世界上所有书面语言中的字符 所以一个汉字也是被当作一个字符来处理的 对于单个字符 除了有char这个原始类型以外 Java平台中的java lang包还专门提供了一个Character类来进行储存和操作 在计算机科学领域中 Unicode 统一码 万国码 单一码 标准万国码 是业界的一种标准 5 5 1字符串类 字符串是程序设计中经常用到的数据结构 很多编程语言将字符串定义为基本数据类型 但在Java语言中 字符串被定义为类 必须先生成类的实例对象然后才能使用 常用有两种类型的字符串 一种是创建以后不需要改变的 称为字符串常量 在Java中 String类用于存储和处理字符串常量 另外一种字符串是创建以后 需要对其进行改变的 称为字符串变量 在Java中 StringBuffer类用于存储和操作字符串变量 6 字符串与字符串类 字符串是一个完整的字符序列 可以包含字母 数字和其它符号 在Java中 用双引号括起来的字符串是字符串常量 又称为无名字符串对象 由Java自动创建 字符串常量可以赋给任何一个String对象引用 这样处理从表面上看起来和其它编程语言没有大的差别 照顾了程序员的习惯 但实际上存在着较大的差异 无论何时 Java中的字符串都是以对象的面孔出现的 在运行时要为它分配内存空间 创建对象引用 7 Java将字符串定义为类有哪些好处呢 首先 在任何系统平台上都能保证字符串本身以及对字符串的操作是一致的 对于网络环境 这一点是至关重要的 其次 String和StringBuffer经过了精心设计 其功能是可以预见的 为此 二者都被说明为最终类 不能派生子类 以防用户修改其功能 最后 String和StringBuffer类在运行时要经历严格的边界条件检验 它们可以自动捕获异常 提高了程序的健壮性 8 5 1字符串类 字符串对象字符串长度及查找字符串的连接及子串字符串常量与比较String对象的不变性命令行参数 9 5 1 1字符串类 Java语言提供了三个字符串类 String类 StringBuffer类和StringBuilder类 String类是不变字符串 StringBuffer和StringBuilder是可变字符串 这3种字符串都是16位 2个字节 的Unicode字符序列 并且这3个类都被声明为final 因此不能被继承 10 5 1 1字符串类 Java语言用String类表示字符串 一般使用String类的构造方法创建一个字符串对象 String类有13个重载的构造方法 可以生成一个空字符串 也可以由字符或字节数组生成字符串 String类常用的构造方法如下 publicString 空字符序列构造字符串对象publicString char value 字符数组构造字符串对象 11 5 1 1字符串类 publicString char value intoffset intcount 字符数组的子数组publicString byte bytes byte数组构造字符串对象publicString byte bytes intoffset intlength publicString Stringoriginal 构造一个original的副本publicString StringBufferbuffer publicString StringBuilderbuffer 12 5 1 1字符串类 例如 charchars1 A B C charchars2 中 国 Strings1 newString chars1 Strings2 newString chars2 0 4 13 5 1 1字符串类 在Java中 还有一种特殊的创建String对象的方法 这种方法是直接利用字符串常量创建字符串对象 例如 Strings ThisisaJavastring 14 常量串存储在串池中 编译时 每当碰到一个常量串 JVM就会在串池中搜索 如果此串存在 则直接使用这个现成的串 如果没有 就在串池中创建一个新串 Stringx abcd Stringy abcd Stringz 1234 x y z 串池 对象 abcd 对象 1234 x y z并不是真正的对象 只是指向对象存储位置的引用 C语言中称为指针 栈内存 没找到 找到 null null null 字符串的内存分配 字符串常量 15 字符串变量与字符串常量不存储在同样的位置 字符串的内存分配 创建串对象 Stringx newString abcd x 对象 abcd 对象 abcd 其它常量对象 串池 null 找到 复制 栈内存 堆内存 16 5 1 2字符串长度及查找 创建String类对象外 更常用的是调用String类的方法 该类定义了许多方法 publicintlength 返回字符串的长度 即字符串包含的字符个数 注意对含有汉字和其他语言符号的字符串 计算长度时 一个符号作为一个字符计数 例如获取字符串 MingRiSoft 长度的代码如下 StringnameStr MingRiSoft inti nameStr length 获得字符串的长度为10 17 5 1 2字符串长度及查找 publicintindexOf intch 查找字符ch第一次出现的位置 如果查找不成功则返回 1 publicintindexOf intch intfromIndex 查找字符ch从fromIndex开始第一次出现的位置 在原字符串中的下标 Stringstr mingrikeji inti str indexOf i System out println 字符i第一次出现在索引 i 索引值是1 18 5 1 2字符串长度及查找 publicintindexOf Stringstr 查找字符串str第一次出现的位置 如果查找不成功则返回 1 publicintindexOf Stringstr intfromIndex 查找字符串str从fromIndex开始第一次出现的位置 在原字符串中的下标 Stringstr mingrikeji i str IndexOf ri System out println 字符串 ri 第一次出现在索引 i 索引值是4 19 5 1 2字符串长度及查找 publicintlastIndexOf intch 查找字符ch最后一次出现的位置 publicintlastIndexOf intch intendIndex 查找字符ch到endIndex为止最后一次出现的位置 Stringstr mingrikeji i str lastIndexOf i System out println 字符i最后一次出现在索引 i 索引值是9i str lastIndexOf i 4 System out println 到第4个字符为止 字符i最后一次出现在索引 i 索引值是1 20 5 1 2字符串长度及查找 publicintlastIndexOf Stringstr 查找字符串str最后一次出现的位置 publicintlastIndexOf Stringstr intendIndex 查找字符串str到endIndex为止最后一次出现的位置 在原字符串中的下标 Stringstr mingrikeji i str lastIndexOf ri System out println 字符串ri最后一次出现在索引 i 索引值是4 21 5 1 3字符串的连接与子串 publicStringconcat Stringstr 调用字符串与参数字符串连接起来 产生一个新的字符串 publicStringsubstring intbeginIndex intendIndex 从字符串的下标beginIndex开始到endIndex结束产生一个子字符串 不包含endIndex处的字符 publicStringsubstring intbeginIndex 从字符串的下标beginIndex开始到结束产生一个子字符串 22 5 1 3字符串的连接与子串 publiccharcharAt intindex 返回字符串中指定位置的字符 index表示位置 范围为0 s length 1 publicStringreplace charoldChar charnewChar 将调用字符串中的所有oldChar字符改变为newChar字符 返回一个新的字符串 23 5 1 3字符串的连接与子串 publicStringtoUpperCase publicStringtoLowerCase 将字符串转换成大写或小写字母 publicbooleanstartsWith Stringprefix publicbooleanendsWith Stringsuffix 返回字符串是否以某个字符串开始或结尾 24 5 1 3字符串的连接与子串 publicvoidgetChars intsrcBegin intsrcEnd char dst intdstBegin 将字符串中从起始位置 srcBegin 到结束位置 srcEnd 之间的字符复制到字符数组dst中从起始位置为dstBegin 25 5 1 3字符串的连接与子串 下面的程序说明了String对象的使用 Strings newString ThisisaJavastring System out println s length 22System out println s charAt 10 JSystem out println s lastIndexOf a 13System out println s lastIndexOf a 10 8System out println s indexOf is 2 26 5 1 3字符串的连接与子串 Strings newString ThisisaJavastring System out println s lastIndexOf is 5System out println s indexOf my 1char subs newchar 4 s getChars 10 14 subs 0 System out println subs Java 27 5 1 3字符串的连接与子串 Strings newString ThisisaJavastring Strings1 It sinteresting s1 s concat s1 System out println s toUpperCase THISISAJAVASTRING System out println s1 toLowerCase thisisajavastring it sinteresting System out println s endsWith in false 28 5 1 4字符串解析 String类提供了一个split 方法 它用来实现将一个字符串分解成子字符串或令牌 token 该方法使用正则表达式指定分隔符publicString split Stringregex intlimit publicString split Stringregex 29 publicclassSplitDemo publicstaticvoidmain Stringargs Stringss 11 22 33 System out println ss String str ss split System out println str 0 System out println str 1 System out println str 2 30 5 1 5字符串常量与字符串比较 在Java程序中 凡是由双引号定界的字符序列都是字符串常量 literalstring 如 abc 字符串常量存放在字符串常量池 poolofliteralstring 中 字符串常量也是String类的对象 可以直接使用 例如 System out println Hello length 结果输出5 31 1 字符串相等的比较你可能想到用 号来比较 如下代码所示 Strings1 newString Hello Strings2 newString Hello System out println s1 s2 5 1 5字符串常量与字符串比较 32 再看下面一段代码 Strings1 Hello Strings2 Hello System out println s1 s2 33 Stringstr1 abc Stringstr2 abc System out println str1 str2 true 字符串的比较 str1 str2 串池 对象 abc 栈内存 找到 null null 没找到 Str1与str2存储的是同一块内存地址 34 Stringstr1 newString abc Stringstr2 newString abc System out println str1 str2 false 字符串的比较 str2 对象 abc 对象 abc 其它常量对象 串池 null 找到 复制 栈内存 堆内存 str1 对象 abc null str1与str2存储的是堆内存中的不同地址 35 如果要比较两个对象的内容是否相等 可以使用String类的equals 方法 对于上面两种情况 表达式 s1 equals s2 的结果都为true 因为s1 s2的内容都相等 例如比较字符串 A 和字符串 a 是否相等 注意 equals 方法在比较两个字符串时区分字母大小写 Stringstr A booleanb str equals a 比较结果b为false 36 2 字符串大小的比较要比较字符串的大小 可以使用String类的compareTo 方法 该方法的格式为 publicintcompareTo StringanotherString 37 字符串比较使用字符的Unicode码值进行比较 若当前字符串小于参数字符串时 方法返回值小于0 若当前字符串大于参数字符串时 方法返回值大于0 若当前字符串等于参数字符串时 方法返回值等于0 例如 表达式 abc compareTo abd 返回值为 1 38 对于字符串相等和大小比较还可以忽略大小写 可以使用下面两个方法 publicbooleanequalsIgnoreCase StringanotherString publicintcompareToIgnoreCase StringanotherString 注意 字符串不能使用 进行比较 可以使用 比较 39 比较字符串startsWith 和endsWith 方法 这两方法分别用于判断字符串是否以指定的字符串开始或结束 它们的定义如下 参数prefix和suffix为欲比较的字符串对象 该方法的返回值为boolean型 例 分别判断字符串 ABCDE 是否以字符串 a 开始以及以字符串 DE 结束 publicbooleanstartsWith Stringprefix publicbooleanendsWith Stringsuffix Stringstr ABCDE booleanbs str startsWith a 比较结果bs为falsebooleanbe str endsWith DE 比较结果be为true 40 startsWith 还有一个重载方法 可以指定索引位置开始是否为指定的字符串 重载方法定义如下 方法的第二个参数toffset是比较字符串的索引位置 例如下面的代码判断字符串 ABCDE 从索引位置2开始是否为字符串 CD 上面代码的判断结果为true 即字符串 ABCDE 从索引位置2开始是字符串 CD publicbooleanstartsWith Stringprefix inttoffset Stringstr ABCDE booleanb str startsWith CD 2 41 5 1 6String对象的不变性 在Java程序中 一旦创建一个String对象 就不能对其内容进行改变 因此说Java的String对象是不可变的字符串 请看下面的例子 42 publicclassChangeString publicstaticvoidmain Stringargs Strings newString Hello world s replace o A s s substring 0 6 concat Java s toLowerCase System out println s 43 publicclassChangeString publicstaticvoidmain Stringargs Strings newString Hello world System out println s replace o A s s substring 0 6 concat Java System out println s System out println s toLowerCase 44 5 1 7命令行参数 main 方法的声明格式为 publicstaticvoidmain Stringargs 其中参数Stringargs 为字符串数组 该参数是通过命令行传递给main 方法的 45 例 从命令行输入三个整数 输出最大值和最小值 publicclassThreeInteger publicstaticvoidmain Stringargs intmax min a b c a Integer parseInt args 0 b Integer parseInt args 1 c Integer parseInt args 2 max Math max Math max a b c min Math min Math min a b c System out println max max System out println min min 46 运行该程序需要在命令行给出参数 如下所示 D javaThreeInteger 23 234 100 程序运行结果为 max 100min 234 47 注意 命令行参数传递的是字符串 若将其作为数值处理 需要进行转换 若字符串中含有非数值字符 则抛出NumberFormatException运行时异常 根据传递的参数个数确定数组args的长度 如果给出的参数少于引用的元素 则抛出ArrayIndexOutOfBoundsException运行时异常 如D javaThreeInteger 23 234 48 5 2StringBuilder和StringBuffer类 创建StringBuffer对象StringBuffer对象的访问和修改StringBuilder类 49 5 2 1创建StringBuffer对象 字符串缓冲区类StringBuffer类是字符串的另一种处理办法 StringBuffer类常用的构造方法有下面三个 publicStringBuffer 创建一个没有字符的字符串缓冲区 初始容量为16个字符 此时length 方法的值为0 而capacity 方法的值为16 50 publicStringBuffer intcapacity 创建一个没有字符的字符串缓冲区 capacity为指定的初始容量 publicStringBuffer Stringstr 利用一个已存在的字符串对象str创建一个字符串缓冲区对象 另外再分配16个字符的缓冲区 51 StringBuffer类除定义了length charAt getChars indexOf 等方法外 还提供了下列常用方法 publicintcapacity 返回当前的字符串缓冲区的容量 publicvoidsetCharAt intindex charch 用ch修改指定位置的字符 52 publicStringBufferdeleteCharAt intindex 删除指定位置的字符 publicStringBufferappend Stringstr 向当前的字符串的末尾添加一个字符串 该方法有一系列的重载方法 参数可以是boolean char int long float double char 等任何数据类型 53 publicStringBufferinsert intoffset Stringstr 从当前字符串的指定位置插入一个字符串 这个方法个也有多个重载的方法 参数可以是boolean char int long float double char 等类型 publicStringBufferdelete intstart intend 删除从start开始到end 不包括end 之间的字符 54 publicStringBufferreplace intstart intend Stringstr 用字符串str替换从start开始到end 不包括end 之间的字符 publicStringBufferreverse 将字符串的所有字符反转 publicStringBuffersubstring intstart 返回从start开始到字符串末尾的子字符串 55 publicStringBuffersubstring intstart intend 返回从start开始到end 不包括end 之间的子字符串 例 下面程序演示了StringBuffer对象及其方法的使用 StringBuffersb newStringBuffer Hello System out println sb HelloSystem out println sb length 5System out println sb capacity 21 56 sb append Java System out println sb HelloJavaSystem out println sb insert 5 Hello JavaSystem out println sb replace 6 10 World Hello World System out println sb reverse dlroW olleH 57 5 2 3StringBuilder类 StringBuilder类与StringBuffer类的区别是StringBuffer类的实例是线程安全的 StringBuilder类的实例不是线程安全的 如果需要线程同步 推荐使用StringBuffer类 58 习题 1 下列关于构造方法描述错误的是 A Java语言规定构造方法名与类名必须相同 B Java语言规定构造方法没有返回值 但不用void声明 C Java语言规定构造方法不可以重载 D Java语言规定构造方法只能通过new自动调用 2 已知语句inta 1 2 3 下列描述错误的是 A 定义了一个名为a的一维数组B 数组a有3个元素C 数组a中每个元素都是整型D 数组元素a 3 的值为3 59 习题 3 下列选项中 用于在定义子类时声明父类名的关键字是 A interfaceB packageC extendsD class4 设i j k为类x中定义的int型变量名 下列类x的构造函数中不正确的是 A x intm B voidx intm C x intm intn D x inth intm intn 5 Java和c 都是面向对象的程序设计语言 6 同一个类中定义多个参数列表不同的同名方法 叫做方法的重载 60 习题 7 一个程序里可以有多个父类 也可以有多个主类 8 一个子类可以重新定义从父类那里继承来的同名方法 而且允许它们有不同的返回值 9 Javaapplication中的主类需包含main方法 main方法的返回类型是 A intB floatC doubleD void10 在类的定义中可以有两个同名方法 这种现象称为方法 A 封装B 继承C 覆盖D 重载 61 11 下列程序的输出结果是 classF publicF System out print F iscalled classSextendsF publicS System out print S iscalled publicclassEx publicstaticvoidmain Stringargs Ssa newS A F iscalled B S iscalled C F iscalled S iscalled D S iscalled F iscalled 62 习题 12 现有类说明如下 classA intx 10 intGetA returnx classBextendsA intx 100 intGetB returnx 问题 1 类B是否能继承类A的属性x 2 若b是类B的对象 则b GetB 的返回值是什么 3 若b是类B的对象 则b GetA 的返回值是什么 4 类A和类B都定义了x属性 这种现象称为什么 63 习题 13 以下Java语句中 Stringstr 123456789 str str subString 1 3 执行后str中的值为 A 23 B 123 C 12 D 234 14 Java语言中 Stringstr 123456789 System out println str indexOf 5 输出结果为 a 6b 5c 4d 115 在java中 已定义两个接口B和C 要定义一个实现这两个接口的类 以下语句正确的是 a interfaceAextendsB Cb interfaceAimplementsB Cc classAimplementsB Cd classAimplementsB implementsC 64 16 给定JAVA代码 如下 ClassParent publicvoidcount System out println 10 3 publicclassTestextendsParent publicvoidcount System out println 10 3 publicstaticvoidmain Stringargs Parentp newTest p count 运行编译后 输出结果是 A 1B 1 0C 3D 3 3333333333333335 65 习题 17 在java中 下列 类不能派生出子类 a publicclassMyClass b classMyClass c abstractclassMyClass d finalclassMyClass 18 在java中 以下 命令能够将java源文件编译为类文件a Javab javawc javacd jar19 研究下面的Java代码 当x 2时 运行结果是 switch x case1 System out println 1 case2 case3 System out println 3 Case4 System out println 4 a 没有输出任何结果b 输出结果为3c 输出结果是3和4d 输出结果是l 3和4 66 习题 20 试编写java代码实现一个计算器类Computer 其中包括 1 用counterValue来保存计数器的当前值 2 方法increment 计数器加1 3 方法decrement 计数器减1 4 方法reset 计数器清零
展开阅读全文
相关资源
相关搜索

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


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

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


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