5Java基础第5章课件.ppt
《5Java基础第5章课件.ppt》由会员分享,可在线阅读,更多相关《5Java基础第5章课件.ppt(161页珍藏版)》请在三一办公上搜索。
1、第五章 数组、字符串及容器类,String类和StringBuffer类System类和Runtime类Math类和Random类,包装类Date类、Calendar类和DateFormat类,字符串,数组是指一组数据的集合,数组中的每个数据被称作元素。在数组中可以存放任意类型的元素,但同一个数组里存放的元素类型必须一致。数组变量属引用类型,数组也可以看成是对象,数组中的每 个元素相当于该对象的成员变量。数组中的元素可以是可以任何数据类型,包括基本类型和引 用类型。,5.1 一维数组,5.1 一维数组,5.1.1 一维数组的定义在Java中,可以使用以下格式来定义一个数组。上述语句就相当于在内
2、存中定义了100个int类型的变量,第一个变量的名称为x0,第二个变量的名称为x1,以此类推,第100个变量的名称为x99,这些变量的初始值都是0。,5.1一维数组,5.1.1 一维数组的定义接下来,通过两张内存图来详细地说明数组在创建过程中内存的分配情况。,注意:数据类型可以是8种基本数据类型,也可以是引用类型 例如:int a;int b;Animal dog;Java语言中声明数组时不能指定其长度(数组中元素的个数),int a10;/错误,5.1 一维数组,注意:元素为引用数据类型的数组中的每一个元素都需要实例化。,public class TestArry public static
3、 void main(String args)Date days;days=new Date3;for(int i=0;i 3;i+)daysi=new Date(2010,10,i+1);class Date int year;int month;int day;Date(int y,int m,int d)year=y;month=m;day=d;,Days:null,Days:xxx,null,null,null,xxx,xxx,xxx,2010,10,1,2010,10,2,2010,10,3,5.1.1 一维数组的定义-元素为引用数据类型的数组,5.1 一维数组,5.1 一维数组,5
4、.1.1 一维数组的定义-默认值,5.1.2 一维数组的初始化,Java中数组的初始化分为两种方式:静态初始化和动态初始化。动态初始化:为数组元素分配空间和赋值的操作分开进行,例如:,5.1 数组,5.1 数组,5.1.1 一维数组的初始化,再例如:,5.1 一维数组,5.1.2 一维数组的初始化在初始化数组时还有一种方式叫做静态初始化,就是在定义数组的同时就为数组的每个元素赋值。数组的静态初始化有两种方式:但是为了简便,建议采用第二种方式。,5.1 一维数组,5.1.2 一维数组的初始化数组静态初始化的效果:,5.1 一维数组,5.1.2 一维数组的初始化数组静态初始化的效果:,值得注意的是
5、,例程中的第3行代码千万不可写成int x=new int41,2,3,4;,这样写编译器会报错。原因在于编译器会认为数组限定的元素个数4与实际存储的元素1,2,3,4个数有可能不一致,存在一定的安全隐患。,脚下留心,1、每个数组的索引都有一个范围,即0length-1。在访问数组的元素时,索引不能超出这个范围,否则程序会报错:,运行结果中所提示的错误信息是数组越界异常ArrayIndexOutOfBoundsException,出现这个异常的原因是数组的长度为4,其索引范围为03,例程中的第4行代码使用索引4来访问元素时超出了数组的索引范围。所谓异常指程序中出现的错误,它会报告出错的异常类型
6、、出错的行号以及出错的原因,关于异常在后面的章节会有详细地讲解。,脚下留心,2、在使用变量引用一个数组时,变量必须指向一个有效的数组对象,如果该变量的值为null,则意味着没有指向任何数组,此时通过该变量访问数组的元素会出现空指针异常:,5.1 一维数组,5.1.3 数组的常见操作1、一维数组遍历在操作数组时,经常需要依次访问数组中的每个元素,这种操作称作数组的遍历。,2.8 数组,2.7.2 数组的常见操作2、数组最值在操作数组时,经常需要获取数组中元素的最值。,5.1一维数组,5.1.3 数组的常见操作3、一维数组排序在操作数组时,经常需要对数组中元素进行排序。冒泡排序:在排序过程中,不断
7、地比较数组中相邻的两个元素,较小者向上浮,较大者往下沉:,第一步,从第一个元素开始,将相邻的两个元素依次进行比较,直到最后两个元素完成比较。如果前一个元素比后一个元素大,则交换它们的位置。整个过程完成后,数组中最后一个元素自然就是最大值,这样也就完成了第一轮比较。第二步,除了最后一个元素,将剩余的元素继续进行两两比较,过程与第一步相似,这样就可以将数组中第二大的数放在了倒数第二个位置。第三步,以此类推,持续对越来越少的元素重复上面的步骤,直到没有任何一对元素需要比较为止。,5.1 一维数组,5.1.3 数组的常见操作3、数组排序在操作数组时,经常需要对数组中元素进行排序。,5.1 一维数组,5
8、.1.3 数组的常见操作3、数组排序在操作数组时,经常需要对数组中元素进行排序。,bubbleSort()方法中通过一个嵌套for循环实现了冒泡排序。,5.1 数组,5.1.3 数组的常见操作3、数组排序在操作数组时,经常需要对数组中元素进行排序。,2628行代码实现了数组中两个元素的交换。,练习题,定义一个对象数组 Student stus=new Student5;每个元素中存储学生信息 姓名(String),年龄(int),成绩(int)然后按成绩给这个数组排序。,5.2 多维数组,5.2.1 二维数组的声明多维数组可以简单地理解为在数组中嵌套数组。在程序中比较常见的就是二维数组。二维数
9、组的定义有很多方式:,5.2.1 二维数组的声明二维数组可以看成以数组为元素的数组。例如:Int a=1,3,3,5,6,7,2,6,3;Java中多维数组的声明和初始化应从最左边维数进行,例如:int a=new int3;a0=new int2;a1=new int3;a2=new int4;int b=new int3;/非法也可以同时指定所有的维数:int a=new int35;,5.2 多维数组,5.2 多维数组,5.2.1 二维数组的声明所以,二维数组也可以如下定义:,5.2 多维数组,5.2.2 二维数组的初始化,静态初始化:适用于数组元素个数较少的情况int intArray
10、=1,2,2,3,3,4;String22 stringArray=“Hello”,“world”,“java”,“test”;/错误,不能指定维数。,动态初始化:(1)直接为每一维分配空间,其语法格式为:数据类型 数组名=new数据类型行数列数;如:int a=new int34;,a:xxx,5.2.2 二维数组的初始化,5.2 多维数组,AS:xxx,再如:String AS=new String34;,5.2.2 二维数组的初始化,5.2 多维数组,(2)从最高维开始(而且必须从最高维开始),分别为每一维 分配空间,此时二维数值中每行的元素个数可以不相等。如:int a=new int
11、3;a0=new int2;a1=new int3;,5.2.2 二维数组的初始化,5.2 多维数组,a:xxx,int a=new int3;a0=new int2;a1=new int3;,5.2.2 二维数组的初始化,5.2 多维数组,例1:,统计一个公司三个销售小组三个季度中每个小组的总销售额以及整个公司的销售额。,例2:,例3:,注意:二维数组名.length方式返回的将是该二维数值的行数,使用“二维数组名index1.length”返回的是该二维数组第index1行的元素数(即该行的列数)。,【书例5.2】MultiMatrixDemo.java,5.2.3 二维数组的访问,5.2
12、 多维数组,foreach语句用于循环遍历数组或集合中的各个元素。,语法格式为:for(数据类型变量:数组集合),如:int intArray=1,2,3,4,5;/声明变量 i 的类型要与数组或集合的数据类型一致;for(int i:intArray)/系统自动帮我们完成循环的循环条件、迭代语句。System.out.println(i);,5.3 foreach语句,循环变量是临时变量,不是数组元素,系统会把数组中的 值依次赋给这个临时变量。虽然允许为此临时变量赋值,但是 无法来修改数组的值,而且极易出错。,5.3 foreach语句,【书例5.3】ForeachDemo.java,5.5
13、Arrays工具类,java.util包中还提供了一个专门用于操作数组的工具类Arrays。Arrays工具类提供了大量的静态方法。1、使用Arrays的sort()方法排序在前面学习数组时,要想对数组进行排序就需要自定义一个排序方法,其实也可以使用Arrays工具类中的静态方法sort()来实现这个功能,接下来通过一个案例来学习sort()方法的使用。,5.5Arrays工具类,2、使用Arrays的binarySearch(Object a,Object key)方法查找元素程序开发中,经常会在数组中查找某些特定的元素,如果数组中元素较多时查找某个元素就会非常繁琐,为此,Arrays类中提
14、供还了一个方法binarySearch(Object a,Object key)用于查找元素,接下来通过一个案例来学习该方法的使用。,5.5Arrays工具类,2、使用Arrays的binarySearch(Object a,Object key)方法查找元素,所谓二分法查找就是每次将指定元素和数组中间位置的元素进行比较,从而排除掉其中的一半元素,这样的查找是非常高效的。接下来通过一个图例来演示二分法查找元素的过程。,5.5Arrays工具类,3、使用Arrays的copyOfRange(int original,int from,int to)方法拷贝元素在程序开发中,经常需要在不破坏原数组
15、的情况下使用数组中的部分元素,这时可以使用Arrays工具类的copyOfRange(int original,int from,int to)方法将数组中指定范围的元素复制到一个新的数组中,该方法中参数original表示被复制的数组,from表示被复制元素的初始索引(包括),to表示被复制元素的最后索引(不包括),接下来通过一个案例来学习如何拷贝数组。,5.5Arrays工具类,4使用Arrays的fill(Object a,Object val)方法填充元素程序开发中,经常需要用一个值替换数组中的所有元素,这时可以使用Array的fill(Object a,Object val)方法,该
16、方法可以将指定的值赋给数组中的每一个元素,接下来通过一个案例来演示如何填充元素。,5.5Arrays工具类,5使用Arrays的toString(int arr)方法把数组转换为字符串在程序开发中,经常需要把数组以字符串的形式输出,这时就可以使用Arrays工具类的另一个方法toString(int arr)。需要注意的是,该方法并不是对Object类toString()方法的重写,只是用于返回指定数组的字符串形式,接下来通过一个案例来演示如何将数组转换为字符串。,练习:,给定数组9,3,5,6,2,11,5,6,进行如下操作(1)排序,并输出排序后的结果(2)再定义一个数组9,3,5,6,2
17、,11,5,6,比较这两个数组是否相同。(3)查找数字5,并返回其下标(4)使用数字8填充数组中的第3-5元素,并输出结果。(5)拷贝数组中的前5个值到另外一个数组。并输出该数组中的值。,5.5Arrays工具类,注意:Arrays类为我们提供了大量操作数组的方法,实际项目开发中,推荐使用Arrays类的静态方法来完成数组的操作,这样既快捷又不会发生错误,但是面试的时候,如果出现对数组操作的题目,就绝不允许是用Arrays类提供的方法,因为面试官考察的是我们对数组的操作能力,而不是对Arrays类的应用。,字符串是字符的序列,它是组织字符的基本数据结构,从 某种程度上来说有些类似于字符的数组。
18、在Java中,字符串被当作对象来处理。程序中需要用到的字符串可以分为两大类,一类是创建之后不会再做修改和变动的字符串常量;另一类是创建之后允许再做更改和变化的字符串变量。在Java中,存放字符串常量的对象用String类,对于字符串变量,由于程序中经常需要对它做添加,插入,修改等操作,一般存放在StringBuffer类的对象中。它们都位于java.lang包中,因此不需要导包就可以直接使用。,5.6 字符串,String,字符串常量使用双引号括住的一串字符,比如:Hello world!Java编译器自动为每一个字符串常量生成一个String类的实例,因此可以用字符串常量直接初始化一个Str
19、ing对象,如:String s=Hello world!;,5.6 字符串,要创建类String的一个对象并进行初始化,需要调用类String的构造方法。类String中提供了下面的一些构造方法:String():无参数的缺省的构造方法用来创建一个空串。String s=new String();String(String value):利用已经存在的字符串常量创建一个新的String对象,该对象的内容与给出的字符串常量一致。String s=new String(“hello”);String(char value):通过给构造方法传递一个字符数组可以创建一个非空串。char chars=
20、a,b,c;String s=new String(chars);,String,5.6 字符串,String(char,int startIndex,int numChars):这种方法用来创建一个非空串,并且指明所创建的字符串在字符数组中的起始地址以及所包含的字符个数。char chars=a,b,c,d,e,f;String s=new String(chars,2,3);该方法生成的串s为“cde”。(注意数组的下标从0开始),String,5.6 字符串,String(byte mybyte):从byte型数组进行初始化的构造方法。byte mybyte=97,98,99;Strin
21、g s=new String(mybyte);该方法构造的字符串s是“abc”。,String(StringBuffer buffer):这个构造函数利用一个已经存在的StringBuffer对象为新建的String对象初始化。,String,5.6 字符串,1.length public int length()此方法返回字符串的字符个数,如:String s=abc;System.out.println(s.length();则将显示字符个数为3。,String基本方法,5.6 字符串,2.charAt public char charAt(int index)该方法返回字符串中index
22、位置上的字符。String s1=here it is;System.out.println(s1.charAt(3);运行结果:e3.getCharspublic void getchars(int srcbegin,int end,char buf,int dstbegin)将字符从此字符串复制到目标字符数组。,String基本方法,5.6 字符串,4.indexOf和lastIndexOf int indexOf(int ch)int lastIndexOf(int ch)返回字符ch在字符串中出现的第一个和最后一个位置。String s1=I am a student;System.o
23、ut.println(s1.indexOf(a);/或aSystem.out.println(s1.lastIndexOf(a);运行结果:2 5,String基本方法,5.6 字符串,int indexOf(String str)int lastindexOf(String str)返回子串str中第一个字符在字符串中出现的始末位置。int indexOf(int ch,int fromIndex)int lastIndexOf(int ch,int fromIndex)返回字符ch在字符串中位置fromIndex以后出现的始末位置。int indexOf(String str,int fr
24、omIndex)int lastIndexOf(String str,int fromIndex)返回子串str中的第一个字符在字符串中位置fromIndex以后出现的始末位置。,String基本方法,5.6 字符串,5.public boolean startsWith(Stringprefix)public boolean startsWith(String prefix,int toffset)测试字符串是否以指定前缀开始。第二个重载函数是以 指定索引开始,如字符串以prefix为前缀返回true,否则 返回false public boolean endsWith(String suf
25、fix)测试该字符串是否以suffix后缀结束,如是返回true,否 则返回falseString s1=I am a student;System.out.println(s1.startsWith(I);System.out.println(s1.endsWith(student);运行结果:true true,String基本方法,5.6 字符串,6.在Java中,运算符“”可以用来实现字符串的连接,如:String s=“He is”+age+“years old.”假设整数型变量age的值为15,那么,s的值为“He is 15 yearsOld”。pareTopublic int
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 基础 课件
链接地址:https://www.31ppt.com/p-5356569.html