资源描述
,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,*,面向对象程序设计与系统开发,第,4,章 面向对象开发常用类,2,驱动,任务一,定义一个字符串,它以空格、逗号,、点和冒号:为分隔符,统计字符串有多少个单词,并将它们输出到屏幕上。,Java,面向对象软件开发,3,目标及知识点,StringBuffer,类,2,常用方法的使用,3,String,类,1,1,4,String,类字符串,构造方法,String(),:构造一个空字符串对象。,String(char value),:通过,char,数组构造字符串对象。,String(String original),:构造一个传入的字符串的副本,该副本与传入的字符串对象是两个不同的对象,虽然它们的内容一样。,String(StringBuffer buffer),:通过,StringBuffer,对象来构造字符串对象,可以利用这个方法来将,StringBuffer,对象转变成,String,。,String str1 = How do you do? ; / 直接赋值方式,String str2 = new String(); /构造一个空串,不是null,String str3 = new String(“I am a student!); / 通过已有字符串构造一个新的字符串对象,5,String,类字符串,常用方法,int length() :返回当前字符串长度。,boolean equals(Object Object) :当Object不为空并且与当前String对象一样,返回true;否那么,返回false。,String concat(String str) :将该String对象与str连接在一起返回一个新字符串。,char charAt(int index) :取字符串中的某一个字符,其中的参数index指的是字符串中字符的序数。该序数从0开始。,String s = How do you do? ;,int x = s.length();/x,的值为:,13,String s = AB;,boolean x = s.equals(AB);/x,的值为,true,boolean y = s.equals(BA);/y,的值为,false,String s1=to;,String s2=get;,String s3=her;,System.out.print(s1.concat(s2.concat(s3); /,输 出结果为:,together,String s = new String(Welcome to Java World!);,System.out.println(s.charAt(5); /,输出结果为:,m,6,String,类字符串,int indexOf(int ch),:从字符串中匹配参数中的字符,返回第一次匹配字符位置。,int indexOf(int ch, int fromIndex),:从,fromIndex,这个参数表示的位置起查找,返回第一次匹配字符位置。,int indexOf(String str),:返回匹配的字符串第一次出现的位置。,int indexOf(String str,int fromIndex),:从,fromIndex,String s = new String(write once, run anywhere!);,String ss = new String(run);,System.out.println(s.indexOf(r); /,输出结果为:,1,System.out.println(s.indexOf(r,2); /,输出结果为:,12,System.out.println(s.indexOf(ss); /,输出结果为:,12,7,String,类字符串,String substring(int beginIndex),:取子串操作,返回从,beginIndex,位置开始到结束的子字符串。,String substring(int beginIndex, int endIndex),:取从,beginIndex,位置开始到,endIndex,位置的子字符串。,String s = 我是中国人;,String str1 = s.substring(2);/str1的值为“中国人,String str2 = s.substring(2,4);/str2的值为“中国,8,String,类字符串,String replace(char oldChar, char newChar),:将字符串中所有的字符,oldChar,替换成,newChar,。,String replace(String oldString, String newString):,将字符串中所包含的,oldString,子串全部替换为,newString,。,String s = abcbabcd;,String str1 = s.replace(b, d);/str1的值“adcdadcd,String str2 = s.substring(ab,jk);/str2的值为“jkcbjkcd,9,String,类字符串,String trim():,去除字符串左右两边空格。,String toLowerCase(),:将字符串转换成小写。,String toUpperCase(),:将字符串转换成大写。,String s = abc ;,String str1 = s.trim();/str1的值“abc,String s = abcABC;,String str1 = s.toLowerCase();/str1的值“abcabc,String str2 = s.toUpperCase();/str2的值为“ABCABC,10,StringBuffer,类字符串,构造函数,StringBuffer(),:构造一个没有任何字符的字符串对象。,StringBuffer(int length),:构造一个长度为,length,的字符串对象。,StringBuffer(String str),:以,str,为初始值构造一个,StringBuffer,类对象。,11,StringBuffer,类字符串,常用方法,public StringBuffer append(String b) :是向字符串缓冲区“追加元素,而且这个“元素参数可以是布尔量、字符、字符数组、双精度数、浮点数、整型数、长整型数、对象类型、字符串和StringBuffer类等。如果添加的字符超出了字符串缓冲区的长度,Java将自动进行扩充。,String s1 = This is a pencil;,String s2 = box;,StringBuffer sb = new StringBuffer(s1);,System.out.println(sb.append(s2);,/,结果为:,This is a pencilbox,Java,面向对象软件开发,12,StringBuffer,类字符串,public StringBuffer insert(int offset, double d) :在当前StringBuffer对象中插入一个元素,第一个参数offset表示插入位置,第二个参数d表要插入的数据,这个“元素参数可以是布尔量、字符、字符数组、双精度数、浮点数、整型数、长整型数、对象类型、字符串等。,public StringBuffer delete(int start, int end) :删除当前StringBuffer对象中以索引号start开始到end结束的子串,但不会删除end处的字符。,StringBuffer sb=new StringBuffer(I am a student!);,System.out.println(sb.insert(7,good );,/,输出结果为:,I am a good student!,StringBuffer sb=new StringBuffer(I am a student);,System.out.println(sb.delete(0,7); /,输出结果为:,student,13,StringBuffer,类字符串,public StringBuffer deleteCharAt(int index),:删除指定位置的单个字符。,public StringBuffer replace(int start, int end, String str),:替换当前,StringBuffer,对象的字符串。从,start,开始,到,end,结束的位置替换成,str,。,public StringBuffer reverse(),:将字符串翻转。,public String toString():,将,StringBuffer,中的内容放入一个,String,对象中返回出来,我们可以利用这个方法实现,StringBuffer,到,String,的转化。,StringBuffer sb=new StringBuffer(too);,System.out.println(sb.deleteCharAt(2); /,输出结果为:,to,StringBuffer sb=new StringBuffer(I am a student.);,System.out.println(sb.replace(7,14, teacher);,/,输出结果为:,I am a teacher,StringBuffer sb = new StringBuffer(0123456789);,System.out.println(sb.reverse(); /,输出结果为:,9876543210,StringBuffer sb = new StringBuffer(0123456789);,String str = sb.toString();/str的值为“0123456789,14,练习,1、定义一个字符串str,其值为“重庆正大软件职业技术学院,2、求字符串str长度,3、求正在str中的位置,15,数据类型类,对应于Java中的根本数据类型long,int,short,byte,float,double,char,boolean都有一个对应的数据类型类,封装了对对应根本数据类型操作的一些方法,数据类型类与根本数据类型对照表,16,Integer,类,静态域,MAX_VALUE:通过类名可直接引用,得到该类型数据可以容纳的最大值。,MIN_VALUE:通过类名可直接引用,得到该类型数据可以容纳的最小值。,TYPE:通过类名可直接引用,得到该类对应的根本数据类型关键字。,System.out.println(Integer类可以容纳的最大值: + Integer.MAX_VALUE );,System.out.println(Integer类对应的根本数据类型:Integer.TYPE);,17,Integer,类,构造函数,Integer(int value),:通过一个,int,类型数据构造对象。,Integer(String s),:通过一个,String,的类型数据构造对象。,Integer x = new Integer (123); /,生成了一个值为,123,的,Integer,对象。,Integer y = new Integer(1234); /,生成了一个值为,1234,的,Integer,对象。,18,Integer,类,常用方法,public int intValue(),:返回该整数对象的数值,public static int parseInt (String s),:将数字字符串转化为,int,数。,public static Integer valueOf(String s),:将字符串转换成,Integer,数。,public String toString(),:将,Integer,对象转化为字符串。,public static String toString(int d),:将整型参数转化为字符串。,Integer x = new Integer (123); /,生成了一个值为,123,的,Integer,对象。,int y = x.intValue(); /y,的值为,123,。,int x = Integer.parseInt (1234); /,将字符串,1234,转变为,int,型返回。,int a=Integer.parseInt(123);,int b=Integer.valueOf(678).intValue();,long c=Long.parseLong(12345678);,long d=Long.valueOf(12345678).longValue();,float e=Float.parseFloat(123.456);,float f=Float.valueOf(123.456).floatValue();,19,【,例,4-1】,编写程序演示数据类型类的使用。,public class DataTypeTest ,public static void main(String args) ,Integer x = new Integer(123456);,int y = x.intValue();,System.out.println(y= + y);,String str = Integer.toString(1000 + 2000);,System.out.println(str= + str);,/,显示对应的类型,System.out.println(“Integer,类 数据类型是,: + Integer.TYPE);,/,显示整型的最大值,System.out.println(Integer,类的最大值,: + Integer.MAX_VALUE);,/,显示整型的最小值,System.out.println(Integer,类的最小值,: + Integer.MIN_VALUE);,执行结果:,y=123456,str=3000,Integer,类对应的数据类型是,:int,Integer,类的最大值,:2147483647,Integer,类的最小值,:-2147483648,20,数学Math类,数学函数类Math类提供了常用的数学运算方法以及Math.PI和Math.E两个数学常量。该类是最终类(final class),不能被继承,类中的方法和属性全部是静态成员,因此,只能使用Math类的方法而不能对其作任何更改。,这个类有两个静态属性:E和PI属性。E代表数学中的自然对数(e),值为2.7182818,而PI代表派圆周率(),值为3.1415926。由于其是公有静态属性,所以使用时不用创立对象而是直接用Math.E 和 Math.PI进行调用。,21,Math,类的主要方法,22,【,例,4-2】Math,类主要方法的举例。,public class MathTest ,public static void main(String args) ,System.out.println(PI= + Math.PI);,System.out.println(E= + Math.E);,System.out.println(abs(-10.6)= + Math.abs(-10.6);,System.out.println(ceil(8.2)= + Math.ceil(8.2);,System.out.println(floor(5.7)= + Math.floor(5.7);,System.out.println(round(7.8)= + Math.round(7.8);,System.out.println(max(10,20)= + Math.max(10, 20);,System.out.println(min(10,20)= + Math.min(10, 20);,System.out.println(sqrt(64)= + Math.sqrt(64);,System.out.println(exp(2)= + Math.exp(2);,System.out.println(log(e)= + Math.log(Math.E);,System.out.println(pow(3,2)= + Math.pow(3, 2);,System.out.println(sin(30)= +,Math.sin(Math.toRadians(30);,执行结果:,abs(-10.6)=10.6,ceil(8.2)=9.0,floor(5.7)=5.0,round(7.8)=8,max(10,20)=20,min(10,20)=10,sqrt(64)=8.0,exp(2)=7.38905609893065,log(e)=1.0,pow(3,2)=9.0,sin(30)=0.49999999999999994,23,随机数处理Random类,简单产生一个小于1的随机数我们可以采用上面Math类中封装的random()方法。直接调用Math.random()就能返回一个随机数,每次调用返回的数字不会相同。假设要产生a,b之间的随机数其通式为:b-a+1*Math.random()+a。,24,随机数处理Random类,构造函数,Random():创立一个新的随机数发生器。,Random(long seed):用一个种子长整型创立一个随机数发生器。所谓种子是生成随机数算法的起源数字,如果用相同的种子创立Random对象,生成的随机数序列是完全一样的。,25,随机数处理Random类,常用方法,public boolean nextBoolean(),:返回下一个从随机发生器的系列中得到的均匀分布的布尔值,相当于抛硬币,不是正面就是反面,因此这个方法返回,true,或者,false,。,public double nextDouble(),:该方法的作用是生成一个随机的,double,值,数值介于,0,,,1.0),之间。,public int nextInt(),:生成,int,范围内的任意,int,数值。如果要获得某个区间的整数,可以参看下面的方法。,int nextInt(int n),:返回,0,,,n),之间的整型值。也就是,0,到,n,之间的随机,int,值,包含,0,而不包含,n,。,例如生成,50100,之间的随机数如下代码:,Random r = new Random();,Int x = 50+r.nextInt(50);,26,任务实现,1、分析该任务获知是对字符串的处理,分隔字符串,我们可以采用String类中的String split(String str)方法进行分隔。由于是多种分隔符,我们采用java.util包中的StringTokenizer类进行处理。,2、查询API获知StringTokenizer的构造方法,并用带参构造方法创立一个对象,其参数是被分析的字符串和分隔符字符串。,3、利用StringTokenizer类中hasMoreTokens()判断是否还有下一个被分隔的子串,并用nextTokens()获得下一个被分隔的子串,最后将该子串打印出来。,27,任务实现,1,2,3,引入输入输出类所需要的包,用,String,类定义一个字符串对象,str,,并赋值,用,StringTokenizer,类为,str,构造一个字符串分析器,str1,;,4,用,StringTokenizer,的常用方法求子串,统计个数;,28,驱动,任务,二,创立一个学生类Student,其属性有学号sNo、姓名sName和性别sSex;再声明三个学生对象并赋值,然后用Set集合来实现对学生对象数据的存储,再从集合中获得这三个对象,并输出相应学生信息。,29,目标及知识点,Set,接口,2,HashSet,3,Java,集合框架体系,1,1,30,集合框架概述,Java的实用工具类库java.util包中,提供了一些数据容器类,按照线性表、链表、堆栈、哈希表等数据结构来组织和操作其中的数据。一个集合collection就是一个存储一组对象的容器,一般将这些对象称为集合的元素element。Java集合构架支持三种类型集合:规那么集Set、线性表(List)和图Map,它们分别定义在接口Set、List和Map中。,31,集合框架概述,Set集:集合中的对象不按特定方式排序它的有些实现类能对集合中的对象按特定方式排序,并且没有重复对象。,List列表:集合中的对象按照索引位置排序,可以有重复对象,允许按照对象在集合中的索引位置检索对象。List与数组有些相似。,Map映射:集合中的每一个元素包含一对键对象和值对象,集合中没有重复的键对象,值对象可以重复,32,Java,集合框架中接口的继承关系图,集合框架概述,33,规那么集Set和它的常用实现类,Collection接口是构造集合框架的根底,没有直接的实现类。Collection声明了所有集合都有的核心方法,Collection不提供get()方法。如果要遍历Collection中的元素,就必须用Iterator。Collection 接口的iterator()方法返回一个指向集合的迭代器Iterator。Iterator接口提供next()方法返回迭代的下一个元素。和hasNext()方法判断迭代探子是否还有元素。使用集合框架时需要频繁使用迭代器。,34,Set,接口,Set,接口继承于,Collection,接口,其特点是它不允许集合中存在重复项。常用的,Set,接口实现类有,HashSet,和,LinkedHashSet,既然,Set,接口继承于,Collection,接口,那么,Collection,接口中的方法在,Set,接口中同样可以使用,35,散列集,HashSet,HashSet,类是一个实现,Set,接口的具体类,可以用来存储互不相同的元素,注意,相同的元素存到一个,HashSet,对象中。它不保证数据在容器中的存放顺序,不保证顺序恒久不变,元素是没有顺序的,,HashSet,类允许存,null,元素。,36,【,例,4-3】,演示,HashSet,容器的使用。,import java.util.*; /Set,接口及其实现类均在这个包中,public class HashSetTest ,/*,*,测试,HashSet,类存储元素及存储顺序,*,/,public static void main(String args) ,Set s = new HashSet();,s.add(I);,s.add(am);,s.add(a);,s.add(student);,s.add(a); /,测试能否添加重复元素,System.out.print(,排序结果:,);,/,使用迭代器遍历集合中的每一个元素,Iterator it = s.iterator();,while (it.hasNext() /,如果,HashSet,对象中迭代器指向,的数据下一个还存在的话,System.out.print(it.next() + );/,获得该数据,执行结果:,排序结果:,student am a I,HashSet,中不能存入两个一样的数据,另外它的存储数据结构不保证按顺序存储数据。,Set s = new LinkedHashSet();,执行结果:,排序结果:,I am a student,Set s = TreeSet();,执行结果:,排序结果:,I am a student,37,任务实现,1,2,3,引入,java.util,包中的相关类。,创立学生类Student,并为其定义一个构造函数,进行参数传递,定义测试类,Test,,在主函数,main(),中声明,3,个学生对象,s1,s2,s3,并赋值,4,5,然后声明一个,HashSet,对象,hs,为,hs,对象依次添加,3,个学生对象,s1,s2,s3,。,4,使用迭代器遍历集合中的每一个元素,38,驱动,任务,三,创立一个学生类Student,其属性有学号sNo、姓名sName和性别sSex;用其声明三个学生对象并赋值,然后用List集合来实现对学生对象数据的存储,再从其中将学生对象获取出来,并打印输出学生信息。,39,目标及知识点,List,接口及实现它的,LinkedList,2,Vector,对象的使用,3,List,接口及实现它的,ArrayList,1,1,栈,Stack,的使用,4,40,List,接口,41,线性存储结构,一种或多种特定关系的数据元素的集合在计算机中的表示称为数据的存储结构。其中线性表是一种典型的线性结构,是具有相同属性的数据元素的一个有限序列。,性表的顺序存储是用一组连续的存储单元依次存储线性表中的数据元素,线性表采用顺序存储的方式称之为顺序表。,顺序表不仅支持重复元素的存储,而且支持位置存储元素,即用户可以指定操作对应位置的元素。,常见的线性结构有:顺序表、链表、栈、向量和队列等。,42,顺序表与链表:,顺序表是线性表的“顺序存储,数据元素依次存储在一组连续的存储单元里,而链表是线性表的“链式存储,数据元素不一定存储在一组连续的存储单元里,通过“链条连接相邻的元素,能很方便地完成元素的插入和删除工作,43,栈Stack,是限定仅在表尾进行插入或删除操作的线性表,对栈来说,表尾端有其特殊含义,称为栈顶,相应的表头称为栈底,栈的数据操作只能在栈顶进行,数据的进栈(压入)和出栈(弹出)操作都在栈顶进行,也就是先进栈的元素后出栈,栈又称为“后进先出的线性表,44,向量Vector,可以实现长度可变的数组,但是,Vector,中只能存放对象。与数组一样,它包含可以使用整数索引进行访问的组件。,45,队列,(Queue),和栈相反,队列是一种“先进先出的线性表,它只允许在表的一端进行插入(入队列),在另一端进行删除(出队列)。允许插入的一端叫做队尾,允许删除的一端叫做对头,46,ArrayList,与,LinkedList,ArrayList,ArrayList,是一个实现,List,接口的能自动增长容量的动态数组,实际是采用对象数组实现的,47,【,例,4-4】,演示,ArrayList,类的常用方法使用,import java.util.ArrayList;,import java.util.List;,public class ArrayListTest,public static void main(String args) ,List list = new ArrayList();,/ 添加对象元素到数组列表中,list.add(new Integer(11);,list.add(new Integer(12);,list.add(new Integer(13);,list.add(null);,list.add(new String(hello);,System.out.println(数组元素为:);,/ 使用迭代器遍历集合中的每一个元素,Iterator it = list.iterator();,while(it.hasNext(),System.out.println(“a + i + “ = + it.next();/获取,ArarryList对象中存放的数据,注意获得的是Object类型的,执行结果:,数组元素为:,a0 = 11,a1 = 12,a2 = 13,a3 = null,a4 = hello,LinkedList,执行结果一样,48,向量类,Vector,Vector,和,ArrayList,一样是,List,接口的实现类,它也是用来存放数据的容器,常用属性:,capacity,:集合最多能容纳的元素个数。,capacityIncrement,:表示每次增加多少容量。,size,:表示集合当前元素个数。,49,向量类,Vector,常用方法:,void addElement(Object obj):,添加元素到末尾。,void add(int index, Object element),:指定索引位置添加元素。,Object elementAt(int index),:取指定索引位置元素。,void insertElementAt(Object obj, int index),:将元素插入到指定索引位置。,50,【,例,4-5】,演示,Vector,类的常用方法。,import java.util.Vector;,public class Demo ,public static void main(String args) ,Vector v = new Vector();,v.add(I );,v.add(like );,v.add(Java );,v.add(very much!);,for(int i=0;iv.size();i+),System.out.println(v.get(i); /,获取指定索引处的元素,执行结果:,I,like,Java,very much!,51,栈,Stack,堆栈Stack是Vector的一个子类,它实现了标准的“后进先出操作的数据结构。Stack只定义了默认的创立空堆栈的构造方法。向堆栈输入数据的操作称为“压栈,删除堆栈顶端的数据称为“出栈,Stack类是作为Vector类的扩展实现的。,52,栈,Stack,常用方法:,Object push(Object item):实现堆栈顶部的压栈操作。,Object pop():实现堆栈顶部的数据出栈。,Object peek():用于返回栈的顶层而不弹出。,int search(Object data):用于获取数据在堆栈中的位置,最顶端的位置是1,向下依次增加,假设堆栈不含此数据,那么返回1。,boolean isEmpty(): 判断栈是否为空,假设为空栈那么返回true,否那么返回false。,53,【,例,4-6】,编写程序演示Stack类“后进先出特点,将1到10入栈,然后再出栈,import java.util.Stack;/,引入,java.util,包中的,Stack,类,public class StackTest ,public static void main(String args) ,Stack s = new Stack();/,声明一个堆栈类对象,s,System.out.print(,栈的入栈顺序为:,);,for (int i = 1; i = 10; i+) /,入栈操作,System.out.print(s.push(i) + );,System.out.println();,int len = s.size();/,求栈长度,System.out.print(,栈的出栈顺序为:,);,for (int i = 1; i = len; i+) /,出栈操作,System.out.print(s.pop() + );,执行结果:,栈的入栈顺序为:,1 2 3 4 5 6 7 8 9 10,栈的出栈顺序为:,10 9 8 7 6 5 4 3 2 1,54,任务实现,1,2,3,引入,java.util,包中的相关类,创立学生类Student,并为其定义一个构造函数,进行参数传递,定义测试类,Test,,在主函数,main(),中声明,3,个学生对象,s1,s2,s3,并赋值,4,5,然后声明一个,ArrayList,对象,list,为,list,对象依次添加,3,个学生对象,s1,s2,s3,4,使用迭代器遍历集合中的每一个元素,7,输出对应学生信息,一个学生信息占一行,55,课堂总结,
展开阅读全文