ChapterJava基础课件第四章.ppt_第1页
ChapterJava基础课件第四章.ppt_第2页
ChapterJava基础课件第四章.ppt_第3页
ChapterJava基础课件第四章.ppt_第4页
ChapterJava基础课件第四章.ppt_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

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

文档简介

第4章 对象、数组与字符串,内容提要: 对象 一维数组 多维数组 字符串 Java中常用类库,4.1对象,在面向对象的程序设计中,将任何实体都看成对象。 对象是通过对实体的抽象得到,由属性和方法组成。属性是实体的一些特征值,方法是实体的功能和方法。 对象之间通过消息进行传递进行交互,最终完成任务。 对象生命周期三个阶段:创建、使用和清除。,4.1.1 对象的创建,对象是从类来创建的,Java语言中除8种基本数据类型以外的数据类型都称为引用类型。引用类型数据以对象的形式存在,引用类型变量的值是某个对象的句柄,而不是对象本身;声明引用类型变量时,系统只为该变量分配引用空间,并未创建一个具体的对象。,Java对象的创建案例 class Point int x,y; Point() x=10; y=16; Point(int a,int b) x=a; y=b; ,Java对象的创建案例,public class Testobject public static void main(String args) Point p1,p2; p1=new Point(); /为对象分配内存,使用 new 和类中的构造方法 p2=new Point(111,222); System.out.println(“点p1的x坐标是:“+p1.x); System.out.println(“点p1的y坐标是:“+p1.y); System.out.println(“点p2的x坐标是:“+p2.x); System.out.println(“点p2的y坐标是:“+p2.y); ,程序执行的效果如图所示,下面语句从Point类创建了一个对象,包含了创建对象的三个阶段:创建、实例化和初始化。 Point p1,p2; p1=new Point(); /为对象分配内存,使用 new 和类中的构造方法。 p2=new Point(100,100);,4.1.2 对象的使用,对象的使用包括引用对象的成员变量和方法的调用,通过运算符“.”可以实现对变量的访问和方法调用。 引用对象的变量访问格式: 引用对象.变量 引用对象的方法访问格式: 引用对象.方法名,Java对象的创建和用法案例,class BirthDate private int day; private int month; public int year; public void setDay(int d) day = d; public void setMonth(int m)month = m; public void setYear(int y)year = y; public int getDay() return day; public int getMonth()return month; public int getYear()return year; ,续,public class ObjectOperating public static void main(String args) BirthDate b = new BirthDate(); b.setDay(1); b.setMonth(10); b.getMonth(); b.setYear(2003); /b.day = 2; /不合法,无权访问该私有属性 b.year = 2003; System.out.println(b.getDay() +“-“ + b.getMonth ()+ “-“ + b.getYear(); ,续,程序执行的效果如下图所示,4.1.3 对象的清除,Java平台允许你创建任意个对象(当然也会受到系统的限制),在当对象不再使用的时候被清除的,这个过程就是所谓的“垃圾收集”。 Java运行时系统通过垃圾收集周期地释放无用对象所使用的内存,完成对象的清除工作。 Java的垃圾收集器自动扫描对象的动态内存区,对被引用的对象加标记,然后把没有引用的对象作为垃圾收集起来并释放。,4.1.4 对象的复制,浅拷贝和深拷贝 浅拷贝只直接复制所有对象成员的值,不考虑其是基本数据类型还是引用数据类型。 深拷贝在复制对象成员时,对于基本数据类型变量直接复制其值,对于引用数据类型对象递归复制其指向的内存空间。,class Company int id; String name; ,class Person int id; String name; Company comp; ,Company ms = new Company(1, “Microsoft“); Company ibm = new Company(2, “IBM“); Person john = new Person(1, “John“, ms); Person mike = john.clone(); mike.setName(“Mike“); mike.getCompany().setName(“HP“);,4.2 数组,数组是多个相同类型数据的组合,实现对这些数据的统一管理 数组属引用类型,数组型数据是对象(object),数组中的每个元素相当于该对象的成员变量 数组中的元素可以是任何数据类型,包括基本类型和引用类型,4.2.1 一维数组声明,一维数组的声明方式: type var 或 type var; 例如: int a; int a1; double b; Mydate c; Java语言中声明数组时不能指定其长度(数组中元素的个数),例如: int a5; /非法,一维数组的创建,声明了一个一维数组,仅仅是给出了数组名称和元素的数据类型,要想真正使用数组还必须为它内存空间,即创建数组。在为数组分配内存空间时,必须指明数组的长度。创建数组要用到运算符new,其格式如下: arrayName = new typesize; 如: page = new int3; 创建一维数组内存模式如图4-11所示。,数组元素的引用,定义并用运算符new为之分配空间后后,才可以引用数组中的每个元素; 数组元素的引用方式:arrayNameindex index为数组元素下标,可以是整型常量或整型表达式。如a3 , bi , c6*i; 数组元素下标从0开始;长度为n的数组合法下标取值范围: 0 n-1; 每个数组都有一个属性length指明它的长度,例如:a.length 指明数组a的长度(元素个数);,数组初始化,动态初始化 数组定义与为数组元素分配空间并赋值的操作分开进行。,MyDate dates; dates = new MyDate3; dates0 = new MyDate(22, 7, 1964); dates1 = new MyDate(1, 1, 2000); dates2 = new MyDate(22, 12, 1964);,int a; a = new int3; a0 = 3; a1 = 9; a2 = 8;,数组初始化,静态初始化: 在定义数组的同时就为数组元素分配空间并赋值。,int a = 3, 9, 8; MyDate dates = new MyDate(22, 7, 1964), new MyDate(1, 1, 2000), new MyDate(22, 12, 1964) ;,数组元素的默认初始化,数组是引用类型,它的元素相当于类的成员变量,因此数组一经分配空间,其中的每个元素也被按照成员变量同样的方式被隐式初始化。例如: public class Test public static void main(String argv) int a= new int5; System.out.println(a3); ,一维数组初始化方法案例,ArrayString.java public class ArrayString public static void main(String args) String anArray = “String One“, “String Two“, “String Three“ ; for (int i = 0; i anArray.length; i+) System.out.println(anArrayi); ,例题4-1:千人问题:1000个人坐成一圈,从1开始报数,每次报数到3的人离开,问最后剩下的人是第几个?,例题4-2:要求写一个程序,打印杨辉三角形,输出到第五行即可。 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 .,4.2.2 多维数组,Java语言中,多维数组被看作是数组的数组。例如二维数组被看作是一个特殊的一维数组,其每个元素又是一个一维数组。下面主要以二维数组为例进行说明。 (1)二维数组的声明方式: type var 或 type var; 其中type是定义数组包含元素的数据类型,它可以是Java支持的任何一种数据类型,可以是基本数据类型,也可以是引用数据类型;var是数组的名字,可以是任何一个合法的标识符。,二维数组,二维数组举例: int a = 1,2,3,4,0,9,5,6,7;,二维数组,Java中多维数组被做为数组的数组处理 Java中二维数组的声明和初始化应按从高维到低维的顺序进行 int t = new int 4; t0 = new int5; t1 = new int5; int t1 = new int 4; /非法,二维数组,Java中二维数组不必须是规则矩阵形式 int tt = new int4; tt0 = new int2; tt1 = new int4; tt2 = new int6; tt3 = new int8; int tt = new int45;,二维数组初始化,静态初始化: int intArray = 1,2,2,3,3,4,5; int intArray132 = 1,2,2,3,4,5; /illegal 动态初始化 int a = new int45; int b = new int3 b0 = new int2; b1 = new int3; b2 = new int5;,二维数组应用案例,public class ArrayOfArrays public static void main(String args) int a = new int3; for (int i = 0; i a.length; i+) ai = new inti+2; /创建一维数组的数组元素 for (int j = 0; j ai.length; j+) aij = i + j; /打印 for (int i = 0; i a.length; i+) for (int j = 0; j ai.length; j+) System.out.print(aij + “ “); System.out.println(); 分析运行结果,例题4-3:矩阵的基本运算: (1)转置 (2)加法 (3)乘法,4.3字符串,字符串是字符的序列,Java语言利用Java.lang包中的两个类String 和StringBuffer来储存、创建和操作字符串 。 String类用于处理由多个字符组成的不可变数据。 StringBuffer类用于存储和操作由多个字符组成的可变数据。,String类,String是最常用的一种Java引用类型 String类对象保存不可修改的Unicode字符序列 String常量是用双引号括起来的0到多个字符,例如:String s = “HelloWorld“; String类型数据可以和任何其它数据类型进行“+“操作,实现字符串连接的效果。,字符串举例,String message = “Hello World”; message = message + “!”; StringBuffer messageBuf = new StringBuffer(message).append(“!”); String str = messageBuf.toString();,访问字符串,(1)获得字符串的长度 String a = “the fat cat has a bag“; int length= a.length(); (2)按照指定的索引下得到字符 String name = “Martin“; char c1= name.charAt(3); (3)从一个字符串或者字符串缓冲区得到多个字符 String s = “the fat cat has a bag“; String b = s. substring(8);,String类常用方法,例题4-4:有两个字符串“bankrupt“和“banana“,实现以下功能: 比较两个字符串的长度; 将两个字符串连接成一个字符串; 比较两个字符串是否相等; 比较两个字符串中第3个字符是否相等; 将两个字符串中所有的b替换为x; 将两个字符串所有的“a”替换为“na”; 取两个字符串的前三个字符。,例题4-5:写一个程序,比较String和StringBuffer在连接大量字符串时的性能差别。,4.4 Java中常用类库,Java开发包中提供了大量的类库供开发者使用,这些类根据功能的不同,分别放在了不同的包中。下载J2SDK-1_4_2-d

温馨提示

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

最新文档

评论

0/150

提交评论