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

下载本文档

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

文档简介

Java中的字符串,一、字符串的表示 Java中的字符串类 String和StringBuffer String的字符串的内容是不能改变的 StringBuffer的字符串的内容是可以改变的 1字符串常量 字符串常量是用双引号括住的一串字符。 “Hello World!“,2下面用不同方法生成字符串“abc“: char chars1=a,b,c; char chars2=a,b,c,d,e; String s1=new String(chars1); String s2=new String(chars2,0,3); byte ascii1=97,98,99; String s3=new String(ascii1,0);,String 类的定义和实例的生成 例: String str; str=“this is a string” 或: String str1=new String(“hello”); 或: String str2=“aaaa”;,String类与其它类型的转换 例1:将实型数转换成字符串 System.out.println(String.valueOf(Math.PI);,String类的比较 有两个字符串str1,str2 str1=str2为真; 是指两个引用指向同一个地址 str1.equals(str2)为真,是指两个字符串内容相等,例:s1=“abc”; s2=“abc”; s1=s2; 真?假? s1.equals(s2); 真?假?,字符串“+”操作 运算符+可用来实现字符串的连接: String s = “He is “+age+“ years old.“; 其他类型的数据与字符串进行“+“运算时,将自动转换成字符串。具体过程如下: String s=new StringBuffer(“he is“).append(age).append(“years old“).toString(); 注意:除了对运算符“+“进行了重载外,java不支持其它运算符的重载。,3用StringBuffer表示字符串 StringBuffer的字符串的内容是可以改变的,创建StringBuffer对象 StringBuffer( ); /*分配16个字符的缓冲区*/ StringBuffer( int len ); /*分配len个字符的缓冲区*/ StringBuffer( String s ); /*除了按照s的大小分配空间外,再分配16个字符的缓冲区*/ StringBuffer str=new Stringbuffer(“hello”);,获取StringBuffer对象的length()信息 int len=str.length();,例:StringBuffer sb=new StringBuffer(“Drink Java!”); sb.insert(6,”Hot ”); System.out.println(sb.toString();,Drink Hot Java!,思考: String s=“abc”; s=“abcd” String 类型的值是常量,值不能改变,为什么可以重新赋值呢?,数组,目 标 - 解释为什么数组的元素需初始化 - 给出数组定义并初始化数组元素 - 确定一个数组中元素的数量 - 创建二维数组 - 声明并创建数组 - 编写从一个数组类型到另一个数组类型数组值的拷贝代码,数组的特征: 有序、具有相同类型、通过数组名和下标确定数组中的元素。,一、 一维数组 1 一维数组的定义 type arrayName ; 类型(type)可以为Java中任意的数据类型,包括简单类型和复合类型。 例如: int intArray ; int intArray; Date dateArray;,- 为一个引用创建空间:声明不能创建对象本身,而创建的是一个引用,该引用可被用来引用数组。 - 注意:int intArray ;声明数组时,中括号内没有数值。 - 数组是一个对象,而不是为原始类型储备的存储器。数组元素使用的实际存储器可由new语句或数组初始化软件动态分配。,二、 创建数组 使用关键字new 创建一个数组对象: int a=new int8; 等同于: int a; a=new int8;,例:p = new Point 100; p0 = new Point(); p1 = new Point(); 例:一条声明语句中创建多个数组: String s1=new String3,s2=new String2; 用来指示单个数组元素的下标必须总是从0开始,并保持在合法范围之内大于0或等于0并小于数组长度。,三、一维数组的初始化, 静态初始化 int intArray=1,2,3,4; String stringArray=“abc“, “How“, “you“;, 动态初始化 1)简单类型的数组 说明:(即数组元素为简单数据类型的数组) int intArray; intArray = new int5;,注意没有,2)复合类型的数组(也可称为对象数组) String stringArray ; String stringArray = new String3;/*为数组中每个元素开辟引用空间*/ stringArray0= new String(“How“);/为第一个数组元素开辟空间 stringArray1= new String(“are“);/为第二个数组元素开辟空间 stringArray2= new String(“you“);/ 为第三个数组元素开辟空间,数组的内存分配图,基本数据类型一维数组内存分配,栈内存,堆内存,num,c,0,0,0,0088:4400,0088:4400,new int3产生的对象,数组的内存分配图,基本数据类型一维数组内存分配,栈内存,堆内存,num,c,0,0,0,null,0088:4400,new int3产生的对象,num=null;,数组内存分配,例子: Class Student int num; String name; Student(int num,String name) this.num=num; =name; public String toString() return “number=“+num+“,“+“name=“+name; ,对象数组的内存分配,栈内存,堆内存,students,null,Student students;,对象数组的内存分配,堆内存,students,c,0088:4400,0088:4400,new students3产生的对象,null,null,Student students; students=new Student3;,null,栈内存,对象数组的内存分配,堆内存,students,c,0088:4400,0088:4400,new students3产生的对象,null,null,Student students; students=new Student3; students0=new Student(“lisi”,18);,student0 标识的 Student对象,lisi,18,0088:4660,0088:4660,栈内存,四一维数组元素的引用 数组元素的引用方式为: arrayNameindex index为数组下标,它可以为整型常数或表达式,下标从0开始。 每个数组都有一个属性length指明它的长度,例如:intArray.length指明数组intArray的长度。,问题:intArray的最后一个元素的下标用length怎么表示?,元素最大下标为length1,public class HelloWorld public static void main(String arg) int myArray; myArray=new int10; System.out.println(“index value“); for(int i=0;imyArray.length;i+) System.out.println(i+“ “+myArrayi); /初始化默认值为0,注意所有变量的初始化(包括数组元素)是保证系统安全的基础,变量绝不能在未初始化状态使用。,变量初始化 在Java程序中,任何变量都必须经初始化后才能被使用。当一个对象被创建时,实例变量在分配存储器的同时被下列值初始化: byte 0 short 0 int 0 long 0L float 0.0f double 0.0d char u0000 (NULL) boolean false All reference types Null 注意 一个具有空值的引用不引用任何对象。试图使用它引用的对象将会引起一个异常。异常是出现在运行时的错误,这将在 “异常”中讨论。,在方法外定义的变量被自动初始化。局部变量必须在使用之前做“手工”初始化。如果编译器能够确认一个变量在初始化之前可被使用的情形,编译器将报错。 public void doComputation() int x = (int)(Math.random() * 100); int y; int z; if (x 50) y = 9; z = y + x; / Possible use before initialization ,Static 怎么用?,class Error String mystring=“hello“; public static void main(String args) System.out.println(mystring); ,为什么不正确? 因为只有对象的方法可以访问对象的变量。 一个对象的方法可以访问对象的数据成 员,尽管不属于方法的局部变量;一个类的方 法只能访问自己的局部变量。 在static方法中不能引用非static的成员方 法和数据成员。,关键字static,静态方法和静态变量是属于某一个类,而不属于类的对象。 静态方法和静态变量的引用直接通过类名引用。 在静态方法中不能调用非静态的方法和引用非静态的成员变量。反之,则可以。 可以用类的对象obj去调用静态的方法method(),如:obj.method()。,解决的办法: 1)将变量改称类变量 class StaticError static String mystring=“hello“; public static void main(String args) System.out.println(mystring); ,2)变为局部变量 class NoStaticError public static void main(String args) String mystring=“hello“; System.out.println(mystring); ,static: 1)在变量或方法之前,表明它们是属于类的; 2)静态变量在各实例间共享,如果是public静态变量,则其它类可以不通过实例化访问它们; 3)静态方法称为类的方法,因此不用实例化即可调用(面向过程) 补充: 静态存储:这儿的“静态”(Static)是指“位于固定位置”(尽管也在RAM里)。程序运行期间,静态存储的数据将随时等候调用。可用static关键字指出一个对象的特定元素是静态的。但Java对象本身永远都不会置入静态存储空间。,五、多维数组 Java编程语言没有象其它语言那样提供多维数组。因为一个数组可被声明为具有任何基础类型,所以你可以创建数组的数组。 1二维数组的定义 type arrayName ; type arrayName;,2二维数组的初始化 静态初始化 int intArray =1,2,2,3,3,4,5; Java语言中,由于把二维数组看作是数组的数组,数组空间不是连续分配的,所以不要求二维数组每一维的大小相同。, 动态初始化 1) 直接为每一维分配空间,格式如下: arrayName = new typearrayLength1arrayLength2; 例:int a = new int23;,2) 从最高维开始,分别为每一维分配空间: arrayName = new typearrayLength1 ; arrayName0 = new typearrayLength20; arrayName1 = new typearrayLength21; arrayNamearrayLength1-1 = new typearrayLength2n;,3) 例: 二维简单数据类型数组的动态初始化如下, int a = new int2 ; a0 = new int3; a1 = new int5; 因为这种对每个元素的分别初始化,所以有可能创建非矩形数组的数组,对二维复合数据类型的数组,必须首先为最高维分配引用空间,然后再顺次为低维分配空间。 例如: new int 4是非法的。 而且,必须为每个数组元素单独分配空间。 例如: String s = new String2 ; s0= new String2;/为最高维分配引用空间 s1= new String2; /为最高维分配引用空间 s00= new String(“Good“);/ 为每个数组元素单独分配空间 s01= new String(“Luck“);/ 为每个数组元素单独分配空间 s10= new String(“to“);/ 为每个数组元素单独分配空间 s11= new String(“You“);/ 为每个数组元素单独分配空间,例题:面哪个语句正确地声明一个整型的二维数组? A int a = new int; B int a1010 = new int; C int a = new int1010; D int a = new int1010; E int a = new int1010; F int10a = new int10,3二维数组元素的引用 对二维数组中的每个元素,引用方式为:arrayNameindex1index2 例如: num10;,【例】 public class ArrayExam public static void main(String args) int i,j; int a=new int 23; /动态初始化一个二维数组 for (i=0;i2;i+) for (j=0; j3 ;j+) aij=(i+1)*(j+2); ,六、拷贝数组 数组一旦创建后,其大小不可调整。然而,你可使用相同的引用变量来引用一个全新的数组: int myArray = new int 6; myArray = new int 10; 在这种情况下,第一个数组被有效地丢失,除非对它的其它引用保留在其它地方。,Java编程语言在System类中提供了一种特殊方法拷贝数组,该方法被称作arraycopy()。例如,araycopy可作如下使用: int myArray = 1, 2, 3, 4, 5, 6 ; int hold = 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: p

温馨提示

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

评论

0/150

提交评论