【精品】Java面向对象程序设计与系统开发第4章 面向对象开发常用类精品ppt课件.ppt
Java面向对象程序设计与系统开发第4章 面向对象开发常用类驱动任任务务一一 定义一个字符串,它以空格、逗号(,)、点()和冒号(:)为分隔符,统计字符串有多少个单词,并将它们输出到屏幕上。2目目标及知及知识点点StringBuffer类 2常用方法的使用常用方法的使用3String类1 13Java面向对象软件开发面向对象软件开发String类字符串字符串v构造方法构造方法 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!”);/通通过已有字符串构造一个新的字符串已有字符串构造一个新的字符串对象象4String类字符串字符串v常用方法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的的值为falseString s1=to;String s2=get;String s3=her;System.out.print(s1.concat(s2.concat(s3);/输 出出结果果为:togetherString s=new String(Welcome to Java World!);System.out.println(s.charAt(5);/输出出结果果为:m5String类字符串字符串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”8String类字符串字符串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”9StringBuffer类字符串字符串v构造函数构造函数StringBuffer():构造一个没有任何字符的字符串对象。StringBuffer(int length):构造一个长度为length的字符串对象。StringBuffer(String str):以str为初始值构造一个StringBuffer类对象。10StringBuffer类字符串字符串v常用方法常用方法 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 pencilbox11StringBuffer类字符串字符串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);/输出出结果果为:student12Java面向对象软件开发面向对象软件开发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”13练习v1、定义一个字符串str,其值为“重庆正大软件职业技术学院”v2、求字符串str长度v3、求正在str中的位置14数据数据类型型类 v对应于Java中的基本数据类型(long,int,short,byte,float,double,char,boolean都有一个对应的数据类型类,封装了对对应基本数据类型操作的一些方法 v 数据数据类型型类与基本数据与基本数据类型型对照表照表 15Integer类v静静态域域MAX_VALUE:通过类名可直接引用,得到该类型数据可以容纳的最大值。MIN_VALUE:通过类名可直接引用,得到该类型数据可以容纳的最小值。TYPE:通过类名可直接引用,得到该类对应的基本数据类型关键字。System.out.println(Integer类可以容可以容纳的最大的最大值:+Integer.MAX_VALUE);System.out.println(Integer类对应的基本数据的基本数据类型:型:Integer.TYPE);16Integer类v构造函数构造函数Integer(int value):通:通过一个一个int类型数据构造型数据构造对象。象。Integer(String s):通:通过一个一个String的的类型数据构造型数据构造对象。象。Integer x=new Integer(123);/生成了一个生成了一个值为123的的Integer对象。象。Integer y=new Integer(1234);/生成了一个生成了一个值为1234的的Integer对象。象。17Integer类v常用方法常用方法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();18【例例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=123456str=3000Integer类对应的数据的数据类型是型是:intInteger类的最大的最大值:2147483647Integer类的最小的最小值:-214748364819 数学(数学(Math)类 v数学函数类Math类提供了常用的数学运算方法以及Math.PI和Math.E两个数学常量。该类是最终类(final class),不能被继承,类中的方法和属性全部是静态成员,因此,只能使用Math类的方法而不能对其作任何更改。v这个类有两个静态属性:E和PI属性。E代表数学中的自然对数(e),值为2.7182818,而PI代表派圆周率(),值为3.1415926。由于其是公有静态属性,所以使用时不用创建对象而是直接用Math.E 和 Math.PI进行调用。20Math类的主要方法的主要方法 21【例例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);执行结果:执行结果:PI=3.141592653589793E=2.718281828459045abs(-10.6)=10.6ceil(8.2)=9.0floor(5.7)=5.0round(7.8)=8max(10,20)=20min(10,20)=10sqrt(64)=8.0exp(2)=7.38905609893065log(e)=1.0pow(3,2)=9.0sin(30)=0.4999999999999999422 随机数随机数处理(理(Random)类 v简单产生一个小于1的随机数我们可以采用上面Math类中封装的random()方法。直接调用Math.random()就能返回一个随机数,每次调用返回的数字不会相同。若要产生a,b之间的随机数其通式为:(b-a+1)*Math.random()+a。23随机数随机数处理(理(Random)类v构造函数构造函数Random():创建一个新的随机数发生器。Random(long seed):用一个种子(长整型)创建一个随机数发生器。所谓种子是生成随机数算法的起源数字,如果用相同的种子创建Random对象,生成的随机数序列是完全一样的。24随机数随机数处理(理(Random)类v常用方法常用方法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);25任任务实现1、分析该任务获知是对字符串的处理,分隔字符串,我们可以采用String类中的String split(String str)方法进行分隔。由于是多种分隔符,我们采用java.util包中的StringTokenizer类进行处理。2、查询API获知StringTokenizer的构造方法,并用带参构造方法创建一个对象,其参数是被分析的字符串和分隔符字符串。3、利用StringTokenizer类中hasMoreTokens()判断是否还有下一个被分隔的子串,并用nextTokens()获得下一个被分隔的子串,最后将该子串打印出来。26任任务实现123引入输入输出类所需要的包引入输入输出类所需要的包 用用String类定义一个字符串对象类定义一个字符串对象str,并赋,并赋值值 用用StringTokenizer类为类为str构造一个字符构造一个字符串分析器串分析器str1;4用用StringTokenizer的常用方法求子串,的常用方法求子串,统计个数;统计个数;27驱动任任务务二二 创建一个学生类Student,其属性有学号sNo、姓名sName和性别sSex;再声明三个学生对象并赋值,然后用Set集合来实现对学生对象数据的存储,再从集合中获得这三个对象,并输出相应学生信息。28目目标及知及知识点点Set接口接口 2HashSet 3Java集合框架体系集合框架体系 1 129集合框架概述集合框架概述 vJava的实用工具类库java.util包中,提供了一些数据容器类,按照线性表、链表、堆栈、哈希表等数据结构来组织和操作其中的数据。一个集合(collection)就是一个存储一组对象的容器,一般将这些对象称为集合的元素(element)。Java集合构架支持三种类型集合:规则集(Set)、线性表(List)和图(Map),它们分别定义在接口Set、List和Map中。30集合框架概述集合框架概述vSet(集):集合中的对象不按特定方式排序(它的有些实现类能对集合中的对象按特定方式排序),并且没有重复对象。vList(列表):集合中的对象按照索引位置排序,可以有重复对象,允许按照对象在集合中的索引位置检索对象。List与数组有些相似。vMap(映射):集合中的每一个元素包含一对键对象和值对象,集合中没有重复的键对象,值对象可以重复 31vJava集合框架中接口的继承关系图集合框架概述集合框架概述 32规则集集Set和它的常用和它的常用实现类 vCollection接口是构造集合框架的基础,没有直接的实现类。Collection声明了所有集合都有的核心方法 Collection不提供不提供get()方法。如果要遍方法。如果要遍历Collection中的元素,就必中的元素,就必须用用Iterator。Collection 接口的接口的iterator()方法返回一个指向集合的迭代方法返回一个指向集合的迭代器器Iterator。Iterator接口提供接口提供next()方法(返回迭代的下一个元素。)和方法(返回迭代的下一个元素。)和hasNext()方法(判断迭代探子是否方法(判断迭代探子是否还有元素)。使用集合框架有元素)。使用集合框架时需要需要频繁使用迭代繁使用迭代器。器。33Set接口接口vSet接口继承于Collection接口,其特点是它不允许集合中存在重复项。常用的Set接口实现类有HashSet和LinkedHashSet 既然既然Set接口继承于接口继承于Collection接口,那么接口,那么Collection接口中接口中的方法在的方法在Set接口中同样可以使用接口中同样可以使用 34散列集散列集HashSetvHashSet类是一个实现Set接口的具体类,可以用来存储互不相同的元素,注意,相同的元素存到一个HashSet对象中。它不保证数据在容器中的存放顺序,不保证顺序恒久不变,元素是没有顺序的,HashSet类允许存null元素。35【例例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 36任任务实现123引入引入java.util包中的相关类。包中的相关类。创建学生类创建学生类Student,并为其定义一个构造,并为其定义一个构造函数,进行参数传递函数,进行参数传递 定义测试类定义测试类Test,在主函数,在主函数main()中声明中声明3个学生对象个学生对象s1,s2,s3,并赋值并赋值 45然后声明一个然后声明一个HashSet对象对象hs 为为hs对象依次添加对象依次添加3个学生对象个学生对象s1,s2,s3。4使用迭代器遍历集合中的每一个元素使用迭代器遍历集合中的每一个元素 37驱动任任务务三三 创建一个学生类Student,其属性有学号sNo、姓名sName和性别sSex;用其声明三个学生对象并赋值,然后用List集合来实现对学生对象数据的存储,再从其中将学生对象获取出来,并打印输出学生信息。38目目标及知及知识点点List接口及接口及实现它的它的LinkedList 2Vector对象的使用象的使用 3List接口及接口及实现它的它的ArrayList1 1栈栈Stack的使用的使用 439 List 接口接口40线性存性存储结构构 v一种或多种特定关系的数据元素的集合在计算机中的表示称为数据的存储结构。其中线性表是一种典型的线性结构,是具有相同属性的数据元素的一个有限序列。v性表的顺序存储是用一组连续的存储单元依次存储线性表中的数据元素,线性表采用顺序存储的方式称之为顺序表。v顺序表不仅支持重复元素的存储,而且支持位置存储元素,即用户可以指定操作对应位置的元素。v常见的线性结构有:顺序表、链表、栈、向量和队列等。41顺序表与序表与链表:表:v顺序表是线性表的“顺序存储”,数据元素依次存依次存储在一组连续的存储单元里 v而链表是线性表的“链式存储”,数据元素不一定存储在一组连续的存储单元里,通过“链条”连接相邻的元素,能很方便地完成元素的插入和删除工作 42栈(Stack)v是限定仅在表尾进行插入或删除操作的线性表 v对栈来说,表尾端有其特殊含义,称为栈顶,相应的表头称为栈底 v栈的数据操作只能在栈顶进行,数据的进栈(压入)和出栈(弹出)操作都在栈顶进行,也就是先进栈的元素后出栈,栈又称为“后进先出”的线性表 43向量(向量(Vector)v可以实现长度可变的数组,但是Vector中只能存放对象。与数组一样,它包含可以使用整数索引进行访问的组件。44队列列(Queue)v和栈相反,队列是一种“先进先出”的线性表 v它只允许在表的一端进行插入(入队列),在另一端进行删除(出队列)。允许插入的一端叫做队尾,允许删除的一端叫做对头 45ArrayList与LinkedListvArrayListArrayList是一个是一个实现List接口的能自接口的能自动增增长容量的容量的动态数数组,实际是采用是采用对象数象数组实现的的 46【例例4-4】演示演示ArrayList类的常用方的常用方法使用法使用 import java.util.ArrayList;import java.util.List;public class ArrayListTestpublic 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=11a1=12a2=13a3=nulla4=helloLinkedList()()执行结果一样执行结果一样47向量向量类Vector vVector和ArrayList一样是List接口的实现类,它也是用来存放数据的容器 v常用属性:capacity:集合最多能容纳的元素个数。capacityIncrement:表示每次增加多少容量。size:表示集合当前元素个数。48向量向量类Vectorv常用方法:void addElement(Object obj):添加元素到末尾。void add(int index,Object element):指定索引位置添加元素。Object elementAt(int index):取指定索引位置元素。void insertElementAt(Object obj,int index):将元素插入到指定索引位置。49【例例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!50栈Stack v堆栈(Stack)是Vector的一个子类,它实现了标准的“后进先出”操作的数据结构。Stack只定义了默认的创建空堆栈的构造方法。向堆栈输入数据的操作称为“压栈”,删除堆栈顶端的数据称为“出栈”,Stack类是作为Vector类的扩展实现的。51栈Stackv常用方法:Object push(Object item):实现堆栈顶部的压栈操作。Object pop():实现堆栈顶部的数据出栈。Object peek():用于返回栈的顶层而不弹出。int search(Object data):用于获取数据在堆栈中的位置,最顶端的位置是1,向下依次增加,若堆栈不含此数据,则返回1。boolean isEmpty():判断栈是否为空,若为空栈则返回true,否则返回false。52【例例4-6】v编写程序演示Stack类“后进先出”特点,将1到10入栈,然后再出栈 import java.util.Stack;/引入引入java.util包中的包中的Stack类public class StackTest public static void main(String args)Stack s=new Stack();/声明一个堆声明一个堆栈类对象象sSystem.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 153任任务实现123引入引入java.util包中的相关类包中的相关类 创建学生类创建学生类Student,并为其定义一个构造,并为其定义一个构造函数,进行参数传递函数,进行参数传递 定义测试类定义测试类Test,在主函数,在主函数main()中声明中声明3个学生对象个学生对象s1,s2,s3,并赋值并赋值 45然后声明一个然后声明一个ArrayList对象对象list 为为list对象依次添加对象依次添加3个学生对象个学生对象s1,s2,s3 4使用迭代器遍历集合中的每一个元素使用迭代器遍历集合中的每一个元素 7输出对应学生信息,一个学生信息占一行输出对应学生信息,一个学生信息占一行 54课堂堂总结 55