收藏 分享(赏)

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

上传人:dzzj200808 文档编号:2174164 上传时间:2018-09-04 格式:PPT 页数:66 大小:429.50KB
下载 相关 举报
面向对象java语言程序设计课程第五章_1xin.ppt_第1页
第1页 / 共66页
面向对象java语言程序设计课程第五章_1xin.ppt_第2页
第2页 / 共66页
面向对象java语言程序设计课程第五章_1xin.ppt_第3页
第3页 / 共66页
面向对象java语言程序设计课程第五章_1xin.ppt_第4页
第4页 / 共66页
面向对象java语言程序设计课程第五章_1xin.ppt_第5页
第5页 / 共66页
点击查看更多>>
资源描述

1、面向对象JAVA语言程序设计,信息科学与技术学院 网络工程系 周文峰,2,第五章 常用系统类,主要任务:介绍Java常用的系统类,包括字符串类、输入输出流类、 Java Applet类、数学函数类、日期类、随机数类以及向量类等。,3,主要内容,字符串类 String类 StringBuffer类和StringBuilder类,4,5.1 字符串类,字符与字符串的区别 字符是指用单引号括起来单个字符,如a、b、A等。这里的字符不是指占1个字节的ASCII字符,而是指占2个字节的Unicode字符。因为Unicode被设计用来处理现在世界上所有书面语言中的字符,所以一个汉字也是被当作一个字符来处理

2、的。对于单个字符,除了有char这个原始类型以外,Java平台中的java.lang包还专门提供了一个Character类来进行储存和操作。,在计算机科学领 域中,Unicode(统一码、万国 码、单一码、标准万国码)是业界的一种标准。,5,5.1 字符串类,字符串是程序设计中经常用到的数据结构,很多编程语言将字符串定义为基本数据类型。但在Java语言中,字符串被定义为类,必须先生成类的实例对象然后才能使用。 常用有两种类型的字符串:一种是创建以后不需要改变的,称为字符串常量,在Java中,String类用于存储和处理字符串常量;另外一种字符串是创建以后,需要对其进行改变的,称为字符串变量,在

3、Java中,StringBuffer类用于存储和操作字符串变量。,6,字符串与字符串类,字符串是一个完整的字符序列,可以包含字母、数字和其它符号。 在Java中,用双引号括起来的字符串是字符串常量,又称为无名字符串对象,由Java自动创建。 字符串常量可以赋给任何一个String对象引用,这样处理从表面上看起来和其它编程语言没有大的差别,照顾了程序员的习惯,但实际上存在着较大的差异。无论何时,Java中的字符串都是以对象的面孔出现的,在运行时要为它分配内存空间,创建对象引用。,7,Java将字符串定义为类有哪些好处呢?,首先,在任何系统平台上都能保证字符串本身以及对字符串的操作是一致的。对于网

4、络环境,这一点是至关重要的。 其次,String和StringBuffer经过了精心设计,其功能是可以预见的。为此,二者都被说明为最终类,不能派生子类,以防用户修改其功能。 最后,String和StringBuffer类在运行时要经历严格的边界条件检验,它们可以自动捕获异常,提高了程序的健壮性。,8,5.1 字符串类,字符串对象 字符串长度及查找 字符串的连接及子串 字符串常量与比较 String对象的不变性 命令行参数,9,5.1.1 字符串类,Java语言提供了三个字符串类:String类、StringBuffer类和StringBuilder类。String类是不变字符串,StringB

5、uffer和StringBuilder是可变字符串,这3种字符串都是16位(2个字节)的Unicode字符序列,并且这3个类都被声明为final,因此不能被继承。,10,5.1.1 字符串类,Java语言用String类表示字符串。一般使用String类的构造方法创建一个字符串对象。String类有13个重载的构造方法,可以生成一个空字符串,也可以由字符或字节数组生成字符串。 String类常用的构造方法如下: public String()/ 空字符序列构造字符串对象 public String(char value)/字符数组构造字符串对象,11,5.1.1 字符串类,public Str

6、ing(char value, int offset, int count) /字符数组的子数组 public String(byte bytes )/byte数组构造字符串对象 public String(byte bytes, int offset, int length) public String(String original)/构造一个original的副本 public String(StringBuffer buffer) public String(StringBuilder buffer),12,5.1.1 字符串类,例如: char chars1=A,B,C; char

7、chars2=中,国,; String s1=new String(chars1); String s2=new String(chars2, 0, 4);,13,5.1.1 字符串类,在Java中,还有一种特殊的创建String对象的方法,这种方法是直接利用字符串常量创建字符串对象,例如:String s=“This is a Java string.” ;,14,常量串存储在串池中。 编译时,每当碰到一个常量串,JVM就会在串池中搜索,如果此串存在,则直接使用这个现成的串;如果没有,就在串池中创建一个新串。,String x=“abcd”; String y=“abcd”; String

8、z=“1234”;,x,y,z,串池,对象: ”abcd”,对象: ”1234”,x,y,z并不是真正的对象,只是指向对象存储位置的引用。(C语言中称为指针),栈内存,没找到,找到,null,null,null,字符串的内存分配(字符串常量),15,字符串变量与字符串常量不存储在同样的位置。,字符串的内存分配(创建串对象),String x=new String(“abcd”);,x,对象: ”abcd”,对象: ”abcd”,其它常量 对象,串池,null,找到,复制,栈内存,堆内存,16,5.1.2 字符串长度及查找,创建String类对象外,更常用的是调用String类的方法,该类定义了

9、许多方法。public int length() 返回字符串的长度,即字符串包含的字符个数。注意对含有汉字和其他语言符号的字符串,计算长度时,一个符号作为一个字符计数。 例如获取字符串“MingRiSoft”长度的代码如下:,String nameStr = “MingRiSoft“; int i = nameStr.length(); / 获得字符串的长度为10,17,5.1.2 字符串长度及查找,public int indexOf(int ch) 查找字符ch第一次出现的位置。如果查找不成功则返回-1。public int indexOf(int ch, int fromIndex )

10、查找字符ch从fromIndex开始第一次出现的位置(在原字符串中的下标)。,String str = “mingrikeji“; int i = str.indexOf(i); System.out.println(“字符i第一次出现在索引:“ + i); / 索引值是1,18,5.1.2 字符串长度及查找,public int indexOf(String str) 查找字符串str第一次出现的位置。如果查找不成功则返回-1。public int indexOf(String str, int fromIndex ) 查找字符串str从fromIndex开始第一次出现的位置(在原字符串中的

11、下标)。,String str = “mingrikeji“; i = str.IndexOf(“ri“); System.out.println(“字符串“ri”第一次出现在索引:“ + i); / 索引值是4,19,5.1.2 字符串长度及查找,public int lastIndexOf(int ch) 查找字符ch最后一次出现的位置。public int lastIndexOf(int ch, int endIndex) 查找字符ch到endIndex为止最后一次出现的位置。,String str = “mingrikeji“; i = str.lastIndexOf(i); Syst

12、em.out.println(“字符i最后一次出现在索引:“ + i); / 索引值是9 i = str.lastIndexOf(i, 4); System.out.println(“到第4个字符为止,字符i最后一次出现在索引:“ + i);/ 索引值是1,20,5.1.2 字符串长度及查找,public int lastIndexOf(String str) 查找字符串str最后一次出现的位置。public int lastIndexOf(String str, int endIndex) 查找字符串str到endIndex为止最后一次出现的位置(在原字符串中的下标)。,String str

13、 = “mingrikeji“; i = str.lastIndexOf(ri); System.out.println(“字符串ri最后一次出现在索引:“ + i); / 索引值是4,21,5.1.3 字符串的连接与子串,public String concat(String str) 调用字符串与参数字符串连接起来,产生一个新的字符串。public String substring(int beginIndex, int endIndex) 从字符串的下标beginIndex开始到endIndex结束产生一个子字符串。(不包含endIndex处的字符)public String subst

14、ring(int beginIndex) 从字符串的下标beginIndex开始到结束产生一个子字符串。,22,5.1.3 字符串的连接与子串,public char charAt(int index) 返回字符串中指定位置的字符,index表示位置,范围为0s.length()-1。public String replace(char oldChar, char newChar) 将调用字符串中的所有oldChar字符改变为newChar字符,返回一个新的字符串。,23,5.1.3 字符串的连接与子串,public String toUpperCase()public String toLo

15、werCase() 将字符串转换成大写或小写字母。public boolean startsWith(String prefix)public boolean endsWith(String suffix) 返回字符串是否以某个字符串开始或结尾。,24,5.1.3 字符串的连接与子串,public void getChars(int srcBegin, int srcEnd, char dst, int dstBegin) 将字符串中从起始位置(srcBegin)到结束位置(srcEnd)之间的字符复制到字符数组dst中从起始位置为dstBegin。,25,5.1.3 字符串的连接与子串,下面

16、的程序说明了String对象的使用。String s=new String(“This is a Java string.“) ;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 字符串的连接与子串,String s=new String(“

17、This is a Java string.“) ;System.out.println(s.lastIndexOf(“is“); / 5System.out.println(s.indexOf(“my“); / -1 char subs=new char4;s.getChars(10,14,subs,0);System.out.println(subs); /Java,27,5.1.3 字符串的连接与子串,String s=new String(“This is a Java string.“) ; String s1=“Its interesting.“;s1=s.concat(s1);

18、System.out.println(s.toUpperCase(); /THIS IS A JAVA STRING.System.out.println(s1.toLowerCase();/this is a java string.its interesting.System.out.println(s.endsWith(“in“); /false,28,5.1.4 字符串解析,String类提供了一个split()方法,它用来实现将一个字符串分解成子字符串或令牌(token)。该方法使用正则表达式指定分隔符public String split(String regex, int lim

19、it) public String split(String regex),29,public class SplitDemo public static void main(String args) String ss=“11,22,33“; System.out.println(ss); String str=ss.split(“,“); System.out.println(str0); System.out.println(str1); System.out.println(str2); ,30,5.1.5 字符串常量与字符串比较,在Java程序中,凡是由双引号定界的字符序列都是字符串

20、常量(literal string),如”abc”。 字符串常量存放在字符串常量池(pool of literal string)中。字符串常量也是String类的对象,可以直接使用,例如:System.out.println(“Hello“.length(); /结果输出5,31,1.字符串相等的比较 你可能想到用“=”号来比较,如下代码所示。 String s1 = new String(“Hello“); String s2 = new String(“Hello“); System.out.println(s1=s2);,5.1.5 字符串常量与字符串比较,32,再看下面一段代码:St

21、ring s1 = “Hello” ;String s2 = “Hello” ;System.out.println(s1=s2);,33,String str1 = “abc“; String str2 = “abc“; System.out.println(str1=str2); /true,字符串的比较,str1,str2,串池,对象: ”abc”,栈内存,找到,null,null,没找到,Str1与str2存储的是同一块内存地址,34,String str1 =new String (“abc“); String str2 =new String (“abc“); System.out

22、.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()方法在比较两个字符串时区分字母大小写。,String str = “A

23、“; boolean b = str.equals(“a”); / 比较结果b为false,36,2. 字符串大小的比较 要比较字符串的大小,可以使用String类的compareTo()方法,该方法的格式为:public int compareTo(String anotherString),37,字符串比较使用字符的Unicode码值进行比较。若当前字符串小于参数字符串时,方法返回值小于0,若当前字符串大于参数字符串时,方法返回值大于0,若当前字符串等于参数字符串时,方法返回值等于0。例如,表达式:“abc”.compareTo(“abd”)/返回值为-1。,38,对于字符串相等和大小比较

24、还可以忽略大小写,可以使用下面两个方法: public boolean equalsIgnoreCase(String anotherString) public int compareToIgnoreCase(String anotherString) 注意,字符串不能使用、=、=进行比较,可以使用!=比较。,39,比较字符串 startsWith()和endsWith()方法,这两方法分别用于判断字符串是否以指定的字符串开始或结束,它们的定义如下:参数prefix和suffix为欲比较的字符串对象,该方法的返回值为boolean型, 例:分别判断字符串“ABCDE”是否以字符串“a”开始以

25、及以字符串“DE”结束:,public boolean startsWith(String prefix) public boolean endsWith(String suffix),String str = “ABCDE“; boolean bs = str.startsWith(“a”); / 比较结果bs为false boolean be = str.endsWith(“DE“); / 比较结果be为true,40,startsWith() 还有一个重载方法,可以指定索引位置开始是否为指定的字符串,重载方法定义如下:方法的第二个参数toffset是比较字符串的索引位置。 例如下面的代码

26、判断字符串“ABCDE”从索引位置2开始是否为字符串“CD”:上面代码的判断结果为true,即字符串“ABCDE”从索引位置2开始是字符串“CD”。,public boolean startsWith(String prefix, int toffset),String str = “ABCDE“; boolean b = str.startsWith(“CD“, 2);,41,5.1.6 String对象的不变性,在Java程序中,一旦创建一个String对象,就不能对其内容进行改变,因此说Java的String对象是不可变的字符串。 请看下面的例子。,42,public class Cha

27、ngeStringpublic static void main(String args)String s=new String(“Hello,world“);s.replace(o,A);s=s.substring(0,6).concat(“Java“);s.toLowerCase();System.out.println(s); ,43,public class ChangeStringpublic static void main(String args)String s=new String(“Hello,world“);System.out.println(s.replace(o,A

28、); s=s.substring(0,6).concat(“Java“);System.out.println(s); System.out.println(s.toLowerCase(); ,44,5.1.7 命令行参数,main()方法的声明格式为:public static void main(String args) 其中参数String args为字符串数组,该参 数是通过命令行传递给main()方法的。,45,例:从命令行输入三个整数,输出最大值和最小值。 public class ThreeIntegerpublic static void main(String args)in

29、t max,min,a,b,c;a=Integer.parseInt(args0);b=Integer.parseInt(args1);c=Integer.parseInt(args2);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:java ThreeInteger “23” “-234” “100”程序运行结果为:max=100min=-2

30、34,47,注意:命令行参数传递的是字符串,若将其作为数值处理,需要进行转换。若字符串中含有非数值字符,则抛出NumberFormatException运行时异常。根据传递的参数个数确定数组args的长度,如果给出的参数少于引用的元素,则抛出ArrayIndexOutOfBoundsException运行时异常。如D:java ThreeInteger “23” “-234”,48,5.2 StringBuilder和StringBuffer类,创建StringBuffer对象 StringBuffer对象的访问和修改 StringBuilder类,49,5.2.1 创建StringBuffe

31、r对象,字符串缓冲区类StringBuffer类是字符串的另一种处理办法。 StringBuffer类常用的构造方法有下面三个: public StringBuffer () 创建一个没有字符的字符串缓冲区,初始容量为16个字符。此时length()方法的值为0,而capacity()方法的值为16。,50,public StringBuffer (int capacity) 创建一个没有字符的字符串缓冲区,capacity为指定的初始容量。 public StringBuffer (String str) 利用一个已存在的字符串对象str创建一个字符串缓冲区对象,另外再分配16个字符的缓冲区

32、。,51,StringBuffer类除定义了length()、charAt()、getChars()、indexOf()等方法外,还提供了下列常用方法: public int capacity() 返回当前的字符串缓冲区的容量。 public void setCharAt(int index, char ch) 用ch修改指定位置的字符。,52,public StringBuffer deleteCharAt(int index) 删除指定位置的字符。 public StringBuffer append(String str) 向当前的字符串的末尾添加一个字符串。该方法有一系列的重载方法,参

33、数可以是boolean、char、int、long、 float、double、char等任何数据类型。,53,public StringBuffer insert(int offset, String str) 从当前字符串的指定位置插入一个字符串。这个方法个也有多个重载的方法,参数可以是boolean、char、int、long、 float、double、char等类型。 public StringBuffer delete(int start, int end) 删除从start开始到end(不包括end)之间的字符。,54,public StringBuffer replace(in

34、t start, int end, String str) 用字符串str替换从start开始到end(不包括end)之间的字符。 public StringBuffer reverse() 将字符串的所有字符反转。 public StringBuffer substring(int start) 返回从start开始到字符串末尾的子字符串,55,public StringBuffer substring(int start, int end) 返回从start开始到end(不包括end)之间的子字符串。 例:下面程序演示了StringBuffer对象及其方法的使用。StringBuffer

35、sb=new StringBuffer (“Hello“);System.out.println(sb);/Hello System.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.

36、out.println(sb.reverse();/!dlroW,olleH,57,5.2.3 StringBuilder类,StringBuilder类与StringBuffer类的区别是 StringBuffer类的实例是线程安全的, StringBuilder类的实例不是线程安全的。 如果需要线程同步,推荐使用StringBuffer类。,58,习题,1. 下列关于构造方法描述错误的是 。A.Java语言规定构造方法名与类名必须相同;B.Java语言规定构造方法没有返回值,但不用void声明;C.Java语言规定构造方法不可以重载;D.Java语言规定构造方法只能通过new自动调用。 2

37、. 已知语句int a=1, 2, 3;下列描述错误的是 。A.定义了一个名为a的一维数组 B.数组a有3个元素C.数组a中每个元素都是整型 D.数组元素a3的值为3,59,习题,3下列选项中,用于在定义子类时声明父类名的关键字是 。A.interface B. package C. extends D. class 4. 设 i、j、k 为类 x 中定义的 int 型变量名,下列类 x 的构造函数中不正确的是 。A. x( int m) . B. void x( int m) . C. x( int m, int n) . D. x( int h,int m,int n) . 5.Java

38、和 c+都是面向对象的程序设计语言。( ) 6. 同一个类中定义多个参数列表不同的同名方法,叫做方法的重载。( ),60,习题,7.一个程序里可以有多个父类,也可以有多个主类。( ) 8. 一个子类可以重新定义从父类那里继承来的同名方法,而且允许它们有不同的返回值。( ) 9.Java application中的主类需包含main方法,main方法的返回类型是 。 A.int B.float C.double D.void 10.在类的定义中可以有两个同名方法,这种现象称为方法 。 A.封装 B.继承 C.覆盖 D.重载,61,11. 下列程序的输出结果是 。 class F public F

39、() System.out.print(“F() is called!“); class S extends F public S() System.out.print(“S() is called!“); public class Ex public static void main(String args)S sa=new S(); A)F() is called! B)S() is called! C)F() is called! S() is called! D)S() is called! F() is called!,62,习题,12.现有类说明如下: class A int x=

40、10; int GetA()return x; class B extends A int x=100; int GetB () return x; 问题: 1)类B是否能继承类A的属性x? 2)若b是类B的对象,则b.GetB()的返回值是什么? 3)若b是类B的对象,则b.GetA()的返回值是什么? 4)类A和类B都定义了x属性,这种现象称为什么?,63,习题,13以下Java语句中,String str = “123456789”;str =str.subString(1,3);执行后str中的值为()。 A.“23” B. “123” C. “12” D. “234” 14.Java

41、语言中,String str=”123456789”,System.out.println(str.indexOf(“5”),输出结果为()。a) 6 b) 5 c) 4 d) -1 15.在java中,已定义两个接口B和C,要定义一个实现这两个接口的类,以下语句正确的是( ) 。 a) interface A extends B,Cb) interface A implements B,Cc) class A implements B,Cd) class A implements B,implements C,64,16.给定JAVA代码,如下: Class Parentpublic voi

42、d count() System.out.println(10%3) ; public class Test extends Parentpublic void count() System.out.println(10/3) ; public static void main(String args) Parent p = new Test() ;p.count() ; 运行编译后,输出结果是( )。 A.1 B.1.0 C.3 D.3.3333333333333335,65,习题,17. 在java 中,下列( ) 类不能派生出子类。 a) public class MyClass b)

43、class MyClass c) abstract class MyClass d) final class MyClass 18. 在java 中,以下( )命令能够将java源文件编译为类文件 a) Java b) javaw c) javac d) jar 19. 研究下面的Java 代码,当x=2 时,运行结果是() 。 switch ( x ) case1: System.out.println(1) ; case2: case3: System.out.println(3) ; Case4: System.out.println(4) ; a) 没有输出任何结果 b) 输出结果为3 c) 输出结果是3 和4 d) 输出结果是l 、3 和4,66,习题,20.试编写java代码实现一个计算器类Computer,其中包 括: (1)用counterValue来保存计数器的当前值; (2)方法increment()计数器加1; (3)方法decrement()计数器减1; (4)方法reset()计数器清零。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报