JAVA开发与应用字符串与数组.ppt_第1页
JAVA开发与应用字符串与数组.ppt_第2页
JAVA开发与应用字符串与数组.ppt_第3页
JAVA开发与应用字符串与数组.ppt_第4页
JAVA开发与应用字符串与数组.ppt_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java中的字符串,一、字符串的表示Java中的字符串类String和StringBufferString的字符串的内容是不能改变的StringBuffer的字符串的内容是可以改变的1字符串常量字符串常量是用双引号括住的一串字符。HelloWorld!,2下面用不同方法生成字符串abc:charchars1=a,b,c;charchars2=a,b,c,d,e;Strings1=newString(chars1);Strings2=newString(chars2,0,3);byteascii1=97,98,99;Strings3=newString(ascii1,0);,String类的定义和实例的生成例:Stringstr;str=“thisisastring”或:Stringstr1=newString(“hello”);或:Stringstr2=“aaaa”;,String类与其它类型的转换例1:将实型数转换成字符串System.out.println(String.valueOf(Math.PI);,String类的比较有两个字符串str1,str2str1=str2为真;是指两个引用指向同一个地址str1.equals(str2)为真,是指两个字符串内容相等,例:s1=“abc”;s2=“abc”;s1=s2;真?假?s1.equals(s2);真?假?,字符串“+”操作运算符+可用来实现字符串的连接:Strings=Heis+age+yearsold.;其他类型的数据与字符串进行+运算时,将自动转换成字符串。具体过程如下:Strings=newStringBuffer(heis).append(age).append(yearsold).toString();注意:除了对运算符+进行了重载外,java不支持其它运算符的重载。,3用StringBuffer表示字符串StringBuffer的字符串的内容是可以改变的,创建StringBuffer对象StringBuffer();/*分配16个字符的缓冲区*/StringBuffer(intlen);/*分配len个字符的缓冲区*/StringBuffer(Strings);/*除了按照s的大小分配空间外,再分配16个字符的缓冲区*/StringBufferstr=newStringbuffer(“hello”);,获取StringBuffer对象的length()信息intlen=str.length();,例:StringBuffersb=newStringBuffer(“DrinkJava!”);sb.insert(6,”Hot”);System.out.println(sb.toString();,DrinkHotJava!,思考:Strings=“abc”;s=“abcd”String类型的值是常量,值不能改变,为什么可以重新赋值呢?,数组,目标-解释为什么数组的元素需初始化-给出数组定义并初始化数组元素-确定一个数组中元素的数量-创建二维数组-声明并创建数组-编写从一个数组类型到另一个数组类型数组值的拷贝代码,数组的特征:有序、具有相同类型、通过数组名和下标确定数组中的元素。,一、一维数组1一维数组的定义typearrayName;类型(type)可以为Java中任意的数据类型,包括简单类型和复合类型。例如:intintArray;intintArray;DatedateArray;,-为一个引用创建空间:声明不能创建对象本身,而创建的是一个引用,该引用可被用来引用数组。-注意:intintArray;声明数组时,中括号内没有数值。-数组是一个对象,而不是为原始类型储备的存储器。数组元素使用的实际存储器可由new语句或数组初始化软件动态分配。,二、创建数组使用关键字new创建一个数组对象:inta=newint8;等同于:inta;a=newint8;,例:p=newPoint100;p0=newPoint();p1=newPoint();例:一条声明语句中创建多个数组:Strings1=newString3,s2=newString2;用来指示单个数组元素的下标必须总是从0开始,并保持在合法范围之内大于0或等于0并小于数组长度。,三、一维数组的初始化,静态初始化intintArray=1,2,3,4;StringstringArray=abc,How,you;,动态初始化1)简单类型的数组说明:(即数组元素为简单数据类型的数组)intintArray;intArray=newint5;,注意没有,2)复合类型的数组(也可称为对象数组)StringstringArray;StringstringArray=newString3;/*为数组中每个元素开辟引用空间*/stringArray0=newString(How);/为第一个数组元素开辟空间stringArray1=newString(are);/为第二个数组元素开辟空间stringArray2=newString(you);/为第三个数组元素开辟空间,数组的内存分配图,基本数据类型一维数组内存分配,栈内存,堆内存,num,c,0,0,0,0088:4400,0088:4400,newint3产生的对象,数组的内存分配图,基本数据类型一维数组内存分配,栈内存,堆内存,num,c,0,0,0,null,0088:4400,newint3产生的对象,num=null;,数组内存分配,例子:ClassStudentintnum;Stringname;Student(intnum,Stringname)this.num=num;=name;publicStringtoString()returnnumber=+num+,+name=+name;,对象数组的内存分配,栈内存,堆内存,students,null,Studentstudents;,对象数组的内存分配,堆内存,students,c,0088:4400,0088:4400,newstudents3产生的对象,null,null,Studentstudents;students=newStudent3;,null,栈内存,对象数组的内存分配,堆内存,students,c,0088:4400,0088:4400,newstudents3产生的对象,null,null,Studentstudents;students=newStudent3;students0=newStudent(“lisi”,18);,student0标识的Student对象,lisi,18,0088:4660,0088:4660,栈内存,四一维数组元素的引用数组元素的引用方式为:arrayNameindexindex为数组下标,它可以为整型常数或表达式,下标从0开始。每个数组都有一个属性length指明它的长度,例如:intArray.length指明数组intArray的长度。,问题:intArray的最后一个元素的下标用length怎么表示?,元素最大下标为length1,publicclassHelloWorldpublicstaticvoidmain(Stringarg)intmyArray;myArray=newint10;System.out.println(indexvalue);for(inti=0;i50)y=9;z=y+x;/Possibleusebeforeinitialization,Static怎么用?,classErrorStringmystring=hello;publicstaticvoidmain(Stringargs)System.out.println(mystring);,为什么不正确?因为只有对象的方法可以访问对象的变量。一个对象的方法可以访问对象的数据成员,尽管不属于方法的局部变量;一个类的方法只能访问自己的局部变量。在static方法中不能引用非static的成员方法和数据成员。,关键字static,静态方法和静态变量是属于某一个类,而不属于类的对象。静态方法和静态变量的引用直接通过类名引用。在静态方法中不能调用非静态的方法和引用非静态的成员变量。反之,则可以。可以用类的对象obj去调用静态的方法method(),如:obj.method()。,解决的办法:1)将变量改称类变量classStaticErrorstaticStringmystring=hello;publicstaticvoidmain(Stringargs)System.out.println(mystring);,2)变为局部变量classNoStaticErrorpublicstaticvoidmain(Stringargs)Stringmystring=hello;System.out.println(mystring);,static:1)在变量或方法之前,表明它们是属于类的;2)静态变量在各实例间共享,如果是public静态变量,则其它类可以不通过实例化访问它们;3)静态方法称为类的方法,因此不用实例化即可调用(面向过程)补充:静态存储:这儿的“静态”(Static)是指“位于固定位置”(尽管也在RAM里)。程序运行期间,静态存储的数据将随时等候调用。可用static关键字指出一个对象的特定元素是静态的。但Java对象本身永远都不会置入静态存储空间。,五、多维数组Java编程语言没有象其它语言那样提供多维数组。因为一个数组可被声明为具有任何基础类型,所以你可以创建数组的数组。1二维数组的定义typearrayName;typearrayName;,2二维数组的初始化静态初始化intintArray=1,2,2,3,3,4,5;Java语言中,由于把二维数组看作是数组的数组,数组空间不是连续分配的,所以不要求二维数组每一维的大小相同。,动态初始化1)直接为每一维分配空间,格式如下:arrayName=newtypearrayLength1arrayLength2;例:inta=newint23;,2)从最高维开始,分别为每一维分配空间:arrayName=newtypearrayLength1;arrayName0=newtypearrayLength20;arrayName1=newtypearrayLength21;arrayNamearrayLength1-1=newtypearrayLength2n;,3)例:二维简单数据类型数组的动态初始化如下,inta=newint2;a0=newint3;a1=newint5;因为这种对每个元素的分别初始化,所以有可能创建非矩形数组的数组,对二维复合数据类型的数组,必须首先为最高维分配引用空间,然后再顺次为低维分配空间。例如:newint4是非法的。而且,必须为每个数组元素单独分配空间。例如:Strings=newString2;s0=newString2;/为最高维分配引用空间s1=newString2;/为最高维分配引用空间s00=newString(Good);/为每个数组元素单独分配空间s01=newString(Luck);/为每个数组元素单独分配空间s10=newString(to);/为每个数组元素单独分配空间s11=newString(You);/为每个数组元素单独分配空间,例题:面哪个语句正确地声明一个整型的二维数组?Ainta=newint;Binta1010=newint;Cinta=newint1010;Dinta=newint1010;Einta=newint1010;Fint10a=newint10,3二维数组元素的引用对二维数组中的每个元素,引用方式为:arrayNameindex1index2例如:num10;,【例】publicclassArrayExampublicstaticvoidmain(Stringargs)inti,j;inta=newint23;/动态初始化一个二维数组for(i=0;i2;i+)for(j=0;j3;j+)aij=(i+1)*(j+2);,六、拷贝数组数组一旦创建后,其大小不可调整。然而,你可使用相同的引用变量来引用一个全新的数组:intmyArray=newint6;myArray=newint10;在这种情况下,第一个数组被有效地丢失,除非对它的其它引用保留在其它地方。,Java编程语言在System类中提供了一种特殊方法拷贝数组,该方法被称作arraycopy()。例如,araycopy可作如下使用:intmyArray=1,2,3,4,5,6;inthold=10,9,8,7,6,5,4,3,2,1;System.arraycopy(myArray,0,hold,0,myArray.length);在这一点,数组hold有如下内容:1,2,3,4,5,6,4,3,2,1。,数组的排序:Arrays.sort()。在已排序的数组中查找某个元素:Arrays.binarySearch()。(参见程序),构造函数,01:publicclassIntAd

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论