版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第4章章 数组和字符串数组和字符串数组数组数组阐明数组阐明一个数组是一系列的匿名变量,数组中的一个数组是一系列的匿名变量,数组中的元素可经过下标来访问。元素可经过下标来访问。在在Java中,数组是对象。中,数组是对象。类类Object中定义的方法都可以用于数组。中定义的方法都可以用于数组。数组阐明数组阐明程序员可以阐明任何类型的数组,数组元程序员可以阐明任何类型的数组,数组元素可以是根本类型,也可以是类类型,当素可以是根本类型,也可以是类类型,当然还可以是数组。然还可以是数组。例例char s ;Point points ;s的每个元素都是的每个元素都是char类型的,类型的,points的
2、每的每个元素都是类个元素都是类Point类型的。类型的。等价的数组阐明等价的数组阐明char s;Point points; 这两行阐明与前面的阐明完全等价。这两行阐明与前面的阐明完全等价。创建数组创建数组和一切对象一样,程序中运用和一切对象一样,程序中运用new关键字创建数关键字创建数组,方括号中的数字表示数组元素个数。组,方括号中的数字表示数组元素个数。例:例:s = new char20;points = new Point100;points0 = new Point();points1 = new Point();Java中没有静态的数组定义,数组的内存都是经中没有静态的数组定义,数
3、组的内存都是经过过new动态分配的。动态分配的。points(a)PointsLength:100(b)pointsLength:100X:Y:(c)Point类定义如下:类定义如下:class Point int x, y; Point ( int x1, int y1) x = x1; y = y1; Point() this(0, 0); 图阐明图阐明阐明语句阐明语句:Point points;执行终了,系统为变量执行终了,系统为变量points分配一个援用空间。分配一个援用空间。阐明语句阐明语句:points = new Point 100;执行终了,系统在内存中分配一个数组对象并把执
4、行终了,系统在内存中分配一个数组对象并把数组援用赋给变量数组援用赋给变量points,阐明语句阐明语句: points1 = new Point ();执行终了,数组的形状图执行终了,数组的形状图4-1b变为图变为图4-1c。数组阐明与数组创建可以合并:数组阐明与数组创建可以合并: char s = new char 20; Point points = new Point 100;数组变量的类型可以不同于所指向的数组类,但数组变量的类型可以不同于所指向的数组类,但应该是它的父类。应该是它的父类。例如:例如: Object points; points = new Point 100; 例如:
5、例如:Point points; points = new Object 100;正确正确错误错误数组边境数组边境在在Java中,数组下标从中,数组下标从0开场。开场。数组中的元素个数数组中的元素个数length是数组类中独一是数组类中独一的数据成员变量。的数据成员变量。运用运用new创建数组时系统自动给创建数组时系统自动给length赋赋值。值。数组一旦创建终了,其大小就固定下来。数组一旦创建终了,其大小就固定下来。程序运转时运用程序运转时运用length进展数组边境检查。进展数组边境检查。假设发生越界访问,那么抛出一个异常。假设发生越界访问,那么抛出一个异常。例如例如int list =
6、new int 10;for (int i = 0; i list.length; i+) / 进展相应处置的代码进展相应处置的代码循环的终了条件中运用循环的终了条件中运用list.length,而不是常,而不是常数数10。益处:不会引起数组下标越界,使程序更强益处:不会引起数组下标越界,使程序更强壮,修正更方便。壮,修正更方便。数组初始化数组初始化数组名加上下标可以表示数组元素。数组名加上下标可以表示数组元素。数组的下标范围为数组的下标范围为0到到length-1。当创建一个数组时,每个元素都被初始化。当创建一个数组时,每个元素都被初始化。Java允许用初值来创建数组。允许用初值来创建数组。
7、例如例如String names = Georgianna;Jen;Simon;Tom;静态初始化静态初始化静态初始化可用于任何元素类型,初值块静态初始化可用于任何元素类型,初值块中每个位置的每个元素对应一个援用。中每个位置的每个元素对应一个援用。names = new String4;names0 = Georgianna;names1 = Jen;names2 = Simon;names3 = Tom;多维数组多维数组Java可以建立数组的数组的数可以建立数组的数组的数组组,由此得到多维数组。,由此得到多维数组。普通来讲,普通来讲,n维数组是维数组是n-1维数组的数维数组的数组。组。阐明多
8、维数组时运用类型及多对方括阐明多维数组时运用类型及多对方括号。号。多维数组可以从最高维起,分别为每多维数组可以从最高维起,分别为每一维分配内存。一维分配内存。例如例如int twoDim = new int 4 ;twoDim0 = new int5;twoDim1 = new int5;二维数组二维数组创建二维数组的普通格式为:创建二维数组的普通格式为:type arrayN = new type arrleng1 ;arrayN 0 = new type arrleng2;arrayN 1 = new type arrleng2;.arrayN arrleng1 - 1 = new typ
9、e arrleng2;非矩阵数组非矩阵数组在在Java中还可以创建非矩阵数组。中还可以创建非矩阵数组。例例4-4int twoDim = new int 4 ;twoDim0 = new int2;twoDim1 = new int4;twoDim2 = new int6;twoDim3 = new int8;twoDim数组为数组为4行,每行的元素个数分别行,每行的元素个数分别为为2,4,6,8个,各不一样。个,各不一样。数组方式如下:数组方式如下:X XX X X XX X X X X XX X X X X X X X 该数组各维的长度如下该数组各维的长度如下twoDim.length =
10、 4twoDim0.length = 2twoDim1.length = 4twoDim2.length = 6twoDim3.length = 8二维矩阵数组阐明二维矩阵数组阐明二维矩阵数组的普通阐明格式为二维矩阵数组的普通阐明格式为type arrayName = new type length1length2;其中,其中,arrayName是数组名,是数组名,length1和和length2分别为数组各维的大小,分别为数组各维的大小,type是数是数组元素的类型。组元素的类型。例例4-5int matrix = new int 45;将创建一个有将创建一个有4个数个数组的数组,每个数组组
11、的数组,每个数组中又有中又有5个整数,即个整数,即4行行5列的整数矩阵。列的整数矩阵。等价于:等价于:int matrix = new int 4 ;for (int j = 0; j matrix.length; j+)matrix j = new int5;多维数组的初始化多维数组的初始化多维数组的初始化与一维数组类似,多维数组的初始化与一维数组类似,以二维数组静态初始化为例:以二维数组静态初始化为例:int a = 2,3, 1,5, 3,4;它的方式如下:它的方式如下:2 31 53 4运用两个下标可以访问数组中的任一元素。运用两个下标可以访问数组中的任一元素。正确的阐明例如正确的阐明
12、例如int a1 = new int 23;int a2 = new int 2 ;int a3 = new int 46;不正确的阐明例如不正确的阐明例如int errarr123;int errarr2 = new int 4;int errarr3 4 = new int 34;不允许静态不允许静态阐明数组。阐明数组。数组的维数阐数组的维数阐明顺序应从高明顺序应从高维到低维。维到低维。数组维数的指定数组维数的指定只能出如今只能出如今new运算符之后。运算符之后。数组拷贝数组拷贝数组创建后就不能改动它的大小,但是可数组创建后就不能改动它的大小,但是可以运用一样的援用变量指向一个全新的数以运
13、用一样的援用变量指向一个全新的数组。组。int elements = new int6;elements = new int10;Java在在System类中提供了一个特殊的方法类中提供了一个特殊的方法arraycopy( ),它实现数组之间的拷贝。,它实现数组之间的拷贝。例如例如class ArrayTestpublic static void main(String args) / 初始数组初始数组int elements = 1, 2, 3, 4, 5, 6 ;/./ 增大后的新数组增大后的新数组int hold = 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 ;/ 把把
14、elements数组中的一切元素复制到数组中的一切元素复制到/ hold数组中,下标从数组中,下标从0开场开场System.arraycopy(elements, 0, hold, 0, elements.length);数组数组hold的内容为:的内容为:1,2,3,4,5,6,4,3,2,1。4.2字符串类型字符串类型Java中提供了中提供了String和和StringBuffer类型,它们类型,它们都是类。都是类。字符串是内存中延续陈列的一个或多个字符。字符串是内存中延续陈列的一个或多个字符。Java提供的规范包提供的规范包java.lang中封装了类中封装了类String和和Strin
15、gBuffer,分别用于处置不变字符串和可变,分别用于处置不变字符串和可变字符串。字符串。不变字符串是指字符串一旦创建,其内容就不能不变字符串是指字符串一旦创建,其内容就不能改动。改动。字符串阐明及初始化字符串阐明及初始化Java程序中的字符串分常量和变量两种。程序中的字符串分常量和变量两种。系统为程序中出现的字符串常量自动创建系统为程序中出现的字符串常量自动创建一个一个String对象。对象。如:如:System.out.println(This is a String);将创建将创建This is a String对象,这个创建对象,这个创建过程是隐含的。过程是隐含的。字符串的阐明字符串的
16、阐明字符串的阐明很简单:字符串的阐明很简单: String s1; StringBuffer sb1;创建一个空的字符串:创建一个空的字符串: String s1 = new String( );由字符数组创建字符由字符数组创建字符char chars = a, b, c;String s2 = new String( chars );可以直接用字符串常量来初始化一个字符可以直接用字符串常量来初始化一个字符串:串:String s3 = Hello World!;字符串处置字符串处置字符串创建以后,可以运用字符串类中的字符串创建以后,可以运用字符串类中的方法对它进展操作。方法对它进展操作。St
17、ring类类String类的对象实例是不可改动的,一旦类的对象实例是不可改动的,一旦创建,就确定下来。创建,就确定下来。String类中常用的方法有:类中常用的方法有:length()前往字符串中的字符个数。前往字符串中的字符个数。charAt(int index)前往字符串中前往字符串中index位置位置的字符。的字符。toLowerCase()将当前字符串中一切字符将当前字符串中一切字符转换为小写方式。转换为小写方式。toUpperCase()将当前字符串中一切字符转换将当前字符串中一切字符转换为大写方式。为大写方式。subString(int beginIndex)截取当前字符串中截取当
18、前字符串中从从beginIndex开场到末尾的子串。开场到末尾的子串。replace(char oldChar,char newChar)将当前将当前字符串中出现的一切字符串中出现的一切oldChar转换为转换为newChar。还有还有getChars(),indexOf(),getBytes()等许等许多方法。多方法。字符串操作例如字符串操作例如public class StringTest public static void main(String args ) String s = This is a test String!;System.out.println(before cha
19、nged, s= +s);String t = s.toLowerCase();System.out.println(after changed, s= +s);System.out.println(t= +t);执行结果为:执行结果为:before changed, s= This is a test String!after changed, s= This is a test String! t= this is a test string!StringBuffer类类StringBuffer类处置可变字符串,当修正一类处置可变字符串,当修正一个个StringBuffer类的字符串时,不
20、用再创建类的字符串时,不用再创建一个新的字符串对象,而是直接操作原字一个新的字符串对象,而是直接操作原字符串。符串。Java为为StringBuffer类提供的方法不同于类提供的方法不同于String类中的方法。类中的方法。系统为系统为String类对象分配内存时,按照对类对象分配内存时,按照对象中所含字符的实践个数等量分配。象中所含字符的实践个数等量分配。而为而为StringBuffer类对象分配内存时,除去类对象分配内存时,除去字符所占空间外,再另加字符所占空间外,再另加16个字符大小的个字符大小的缓冲区。缓冲区。对于对于StringBuffer类对象,运用类对象,运用length()方方
21、法可获得字符串的长度,另外,还有法可获得字符串的长度,另外,还有capacity()方法前往缓冲区的容量。方法前往缓冲区的容量。普通地,普通地,StringBuffer的长度是指存储在其的长度是指存储在其中的字符个数,容量是指缓冲区所能包容中的字符个数,容量是指缓冲区所能包容的最大字符数。的最大字符数。几个特殊处置几个特殊处置衔接衔接String类对象可以运用类对象可以运用concat(String str)方法将方法将str衔接在当前字符串的尾部。衔接在当前字符串的尾部。例例String s = This is the ;String t = s.concat(String.);t的内容为:
22、的内容为:This is the String.系统还提供了实现衔接的简单操作,即重系统还提供了实现衔接的简单操作,即重载运算符载运算符“+。“+除了能实现数值加法外,还可衔接它除了能实现数值加法外,还可衔接它的两个操作数。的两个操作数。只需只需“+的两个操作数中有一个是字符串,的两个操作数中有一个是字符串,那么另一个也自动变为字符串类型。那么另一个也自动变为字符串类型。StringBuffer类对象运用类对象运用append()方法实现衔接。方法实现衔接。例如:例如:age是是int型量,值为型量,值为36,String s = He is +age +years old.;String s
23、 = new StringBuffer(He is).append(age).append(years old.).toString();完全等价完全等价比较比较String类中有多个比较方法:类中有多个比较方法:compare To(),equals(),equalsIgnoreCase(),regionMatches()它们可用来实现字符串的比较。这几个方法断定它们可用来实现字符串的比较。这几个方法断定要比较的两个实例内容能否符合条件。要比较的两个实例内容能否符合条件。例如例如/程序程序4-3class StringTestpublic static void main(String ar
24、gs ) String str = This is the first string.;boolean result1 = str.equals(This is the first string.);boolean result2 = str.equals(this is the first string.);boolean result3 = str.equalsIgnoreCase(this is the first string.);System.out.println(result1 = +result1);System.out.println(result2 = +result2);
25、System.out.println(result3 = +result3);执行结果为:执行结果为:result1 = trueresult2 = falseresult3 = trueJava中可以运用关系运算符中可以运用关系运算符“=断定两断定两个字符串能否相等。个字符串能否相等。与与equals()方法不同的是,方法不同的是,“=断定两断定两字符串对象能否是同一实例,即它们在内字符串对象能否是同一实例,即它们在内存中的存储空间能否一样。存中的存储空间能否一样。程序程序4-4class StringTest2public static void main(String args) String s1 = This is the second string.;String s2 = This is
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五版外资企业会计人员聘用与管理服务协议3篇
- 二零二五年环境治理担保合同标的属性与实施3篇
- 二零二五年度农产品批发市场合作协议书4篇
- 2025年湛江货运从业资格证怎么考
- 二零二五版个体工商户雇工劳动合同(文创产业专用)3篇
- 2025年度智能交通设施安装与维护承包合作协议4篇
- 2025年度智慧家居虫害预防与治理服务合同4篇
- 二零二五版国际法律服务机构员工外派协议3篇
- 2025年度健康医疗大数据应用合并合作协议4篇
- 二零二五年度年会场地租赁专项合同5篇
- 2024年高纯氮化铝粉体项目可行性分析报告
- 安检人员培训
- 山东省潍坊市2024-2025学年高三上学期1月期末 英语试题
- 危险性较大分部分项工程及施工现场易发生重大事故的部位、环节的预防监控措施
- 《榜样9》观后感心得体会四
- 2023事业单位笔试《公共基础知识》备考题库(含答案)
- 化学-广东省广州市2024-2025学年高一上学期期末检测卷(一)试题和答案
- 2025四川中烟招聘高频重点提升(共500题)附带答案详解
- EHS工程师招聘笔试题与参考答案(某大型央企)2024年
- 营销策划 -丽亭酒店品牌年度传播规划方案
- 2025年中国蛋糕行业市场规模及发展前景研究报告(智研咨询发布)
评论
0/150
提交评论